话不多说,先上程序
ORG 0000h
AJMP START
ORG 000BH
AJMP TIME0
START:
MOV 66H,#0
MOV TMOD,#00000001B
MOV TH0,#0BBH
MOV TL0,#0CCH
SETB EA
SETB ET0
SETB TR0
AJMP $
TIME0: PUSH ACC
PUSH PSW
MOV TH0,#0BBH
MOV TL0,#0CCH
INC 66H
MOV A,66H
CJNE A,#30,TIME00
CPL P1.0
MOV 66H,#0
TIME00: POP PSW
POP ACC
RETI
END
这段程序的达成的目标是:用定时器产生一个中断,中断内容是让LED灯闪烁。现在来分析程序的每一个步骤。
ORG 0000h ;。。。
AJMP START ;跳到start处去运行程序
ORG 000BH ;定时器0的中断在中断向量表中的地址
AJMP TIME0 ;跳到中断内容处运行
START:
MOV 66H,#0 ;给60h这个单元赋0
MOV TMOD,#00000001B ;以下6行都是定时器的基本设置,我就不说这个了,用c写过的哥们应该都懂,后面三行是开启中断的。
MOV TH0,#0BBH
MOV TL0,#0CCH
SETB EA
SETB ET0
SETB TR0
AJMP $ ;进入死循环中,等待中断的产生
TIME0: PUSH ACC ;把ACC和PSW中的东西压入栈中,把进入中断前的现场进行保护,就是中断不改变原来的累加器和状态寄存器的内容。
PUSH PSW
MOV TH0,#0BBH ;重新赋初值让它进行下一次中断
MOV TL0,#0CCH
INC 66H ;这个单元内的数值自己加一,相当于i++
MOV A,66H ;传到A中与30进行比较
CJNE A,#30,TIME00 ;如果不相等则跳去让PSW和ACC出栈,然后返回主函数中的死循环。如果相等则继续执行下面的程序,就是把LED灯进行反转,就是让定时器计时到时30次才进行一次灯的状态的改变。
CPL P1.0 ;灯的状态的反转
MOV 66H,#0 ;地址内的数归零,进行下一次的定时器计数
TIME00: POP PSW
POP ACC
RETI ;中断返回的指令,注意不是主程序的返回ret
END
上一篇:汇编写51单片机之按键检测
下一篇:定时器1之使用定时器的查询方式来反转LED
设计资源 培训 开发板 精华推荐
- usb-sata
- 带NFC卡片功能的热插拔简易试轴器
- LT1086CT-3.3 电池后备稳压电源的典型应用
- AD7264-5、500 Ksps、14 位、同步采样 SAR ADC 在控制寄存器模式下的典型应用,具有 PGA 和四个比较器
- 使用 ON Semiconductor 的 CS-5121 的参考设计
- LTC1708EG-PG 演示板,用于移动计算的低成本 VRM,7.5V 至 24Vin、1.3V 至 1.6Vout @ 15A、1.5Vout @ 2.5A 和 2.5Vout @ 0.15A
- RDR-848 - 采用PowiGaN技术的InnoSwitch3-Pro,具有30 W USB PD 3.0和12 W USB-A端口的42 W双端口隔离反激式电源(INN3379C-H302
- AM6TW-2407DH35Z ±7.2V 6 瓦单输出 DC-DC 转换器的典型应用
- 具有准确输入电流限制的 LT3477IFE 800mA、5V 至 12V 升压转换器的典型应用电路
- ADM8612 超低电压监控器的典型应用电路