P2.0接LED模块J12的A
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| ORG 0000H RESET: LJMP MAIN ORG 000BH //定时器中断0入口 LJMP T0_INT ORG 0100H
MAIN: MOV SP,#60H MOV TMOD,#01H //计时工作方式1 MOV 30H,#00H //定时器超时一百次,达到64h即一秒 //12MHz,机器周期1μs,需要10000个计数,初值=65536-10000=55536=D8F0H MOV TH0,#0D8H MOV TL0,#0F0H SETB P2.0 SETB ET0 //开放T0中断和总中断 SETB EA SETB TR0 //启动T0 JNB TF0,$ //wait for TF0
T0_INT: PUSH PSW //保护状态字寄存器 PUSH ACC CLR EA //关闭总中断 MOV TH0,#0D8H MOV TL0,#0F0H INC 30H MOV A,30H CJNE A,#100,CONTINUE_T0 MOV 30H,#00H //定时器超时一百次,达到64h即一秒 CPL P2.0
CONTINUE_T0: SETB EA //开总中断 POP ACC POP PSW //保护状态字寄存器 RETI
END
|
Tips
定时器0还是定时器1
晶振频率是6Mhz还是12Mhz(这里使用的是12MHz,则12个晶振周期—>机器周期1μs)
方式1:最多2^16=65536*1μs=65.5ms
方式2:最多2^8=256μs但自动重装载

- 设置一百次10ms定时器溢出后断点调试,发现右下角时间刚好为1s
- (不精准,由于时钟实际11.0592)