微机原理实践教程(C语言篇)---A001闪烁灯

1.硬件

2.C程序

cpp 复制代码
#define ADR_273 0x0200
#define ADR_244 0x0400
#define LED_PORT 0x800

void outp(unsigned int addr, char data)
// 输出一字节到I/O端口
{ __asm
    { mov dx, addr
      mov al, data
      out dx, al
    }
}

char inp(unsigned int addr)
// 从I/O端口输入一字节
{ char result;
   __asm
    { mov dx, addr
      in al, dx
      mov result, al
    }
   return result;
}

char end_flag[5]={0x55,0x55,0x55,0x55,0x55};

void delay(void)
// 延时函数,使用原有的双重循环延时方式
{
    int i;
    for(i=0; i<5000; i++);
    for(i=0; i<5000; i++);
}

void main(void)
/* 闪烁灯程序:8位LED时亮时灭
   采用共阳LED,输出0点亮,输出1熄灭 */
{ 
    int i;
    unsigned char led_pattern;
    
    // 初始值:1111 1110 (最低位D0=0,点亮第1个LED)
    led_pattern = 0x00;
    
    while (1)
    {
        // 输出当前模式到LED端口
        outp(LED_PORT, led_pattern);
        
        // 延时控制流水速度
        delay();
        
        led_pattern = ~led_pattern;
        outp(LED_PORT, led_pattern);

        delay();
       
    }
    
    // 退出时关闭所有LED(输出全1)
    // outp(LED_PORT, 0xFF);
}

汇编

cpp 复制代码
.MODEL	TINY
.8086

.code

extrn _main:proc

.startup

	call  near ptr _main
endless:
   jmp   endless

.data

public	__acrtused		; trick to force in startup
	__acrtused = 9876h	; funny value not easily matched in SYMDEB

.stack

END

3.编译脚本

bash 复制代码
..\tools\ml.exe /c /AT /Zm /Zi rtl.asm    
..\tools\dmc.exe -mt -0 -c -g main.c      
..\tools\optlink.exe /TINY rtl.obj main.obj, debug.com

4.下载测试

相关推荐
M78佐菲3 小时前
51单片机学习笔记:ds18b20要点整理
linux·笔记·嵌入式硬件·学习·51单片机
lsswear3 小时前
Python 并发 线程
开发语言·python
郑州光合科技余经理3 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
软件课代表CiCi3 小时前
运行库是什么?电脑缺运行库怎么办?c++运行库缺失修复全攻略
开发语言·c++·windows·电脑·dll修复·dll丢失·运行库
Ivanqhz4 小时前
MLIR OpBuilder
开发语言·python·mlir
洪核单片机5 小时前
DPJ-96基于STM32单片机wifi远程监控智慧教室 温湿度光照粉尘人数考勤
stm32·单片机·嵌入式硬件·智慧教室·教室人数考勤
红宝村村长5 小时前
windows笔记本双系统ubuntu设置
开发语言
m0_752753126 小时前
单片机基础知识
单片机·51单片机
天空'之城6 小时前
单片机基础核心知识点汇总(三十六)
单片机·嵌入式硬件
菜鸟~noob2336 小时前
【电子战】第15篇:混合定位——TDOA/FDOA/AOA 联合【含matlab代码】
开发语言·matlab