采用基本555电路,构成单稳态触发器,采用LED指示灯指示延时时间,对延时时间进行测量并显示
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP X0_INT
ORG 000BH
AJMP T0_INT
ORG 0013H
AJMP X1_INT
MAIN:
MOV TMOD,#01H ;T0定时方式1
MOV TH0, #(65536-50000) / 256 ;50ms@12MHz
MOV TL0, #(65536-50000) MOD 256;
SETB TR0
SETB ET0 ;开启定时中断
SETB EX0
SETB EX1
SETB EA ;定时器初始化结束,下面循环显示即可
MOV R1, #99H ;0~99计数.
MOV R7, #1 ;50ms计数.
MOV P0, #0C0H
MOV P2, #0C0H
LOOP:
SJMP LOOP
DELAY: ;延时子程序.
AA4: MOV R4, #0
DJNZ R4, $
DJNZ R4, $
RET
X0_INT: ;启动/停止
MOV C,P3.2
MOV F0,C
RETI
X1_INT: ;清零
MOV R1, #0
MOV P0, #0C0H
MOV P2, #0C0H
RETI
T0_INT: ;50ms中断执行一次.
MOV TL0, #(65536-50000) MOD 256;
MOV TH0, #(65536-50000) / 256 ;50ms@12MHz
DJNZ R7, T0_END ;中断不到20次.
MOV R7, #20
JNB F0, T0_END
MOV A, R1
ADD A, #1
DA A
MOV R1, A
ANL A, #0FH
MOV DPTR, #TAB
MOVC A, @A+DPTR ;查出段码
MOV P2, A ;显示个位
MOV A, R1
SWAP A
ANL A, #0FH
MOVC A, @A+DPTR ;查出段码
MOV P0, A ;显示十位数.
T0_END:
RETI
TAB:
DB 0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H,80H, 90H
END
未知错误
可以正常清零和计时
略微扫描起码外部中断有问题,这里刚好有完整外部中断荔枝反汇编可供查看,无论C语言或汇编改写的三句都必须有:
C:0x0000 02001E LJMP C:001E
C:0x0003 020006 LJMP WaiBuZhongDuan0(C:0006)
WaiBuZhongDuan0:
C:0x0006 309003 JNB K1(0x90.0),C:000C
C:0x0009 B294 CPL LED1(0x90.4)
C:0x000B 32 RETI
C:0x000C 309103 JNB K2(0x90.1),C:0012
C:0x000F B295 CPL LED2(0x90.5)
C:0x0011 32 RETI
C:0x0012 309203 JNB K3(0x90.2),C:0018
C:0x0015 B296 CPL LED3(0x90.6)
C:0x0017 32 RETI
C:0x0018 309302 JNB K4(0x90.3),C:001D
C:0x001B B297 CPL LED4(0x90.7)
C:0x001D 32 RETI
C:0x001E 787F MOV R0,#0x7F
C:0x0020 E4 CLR A
C:0x0021 F6 MOV @R0,A
C:0x0022 D8FD DJNZ R0,C:0021
C:0x0024 758107 MOV SP(0x81),#0x07
C:0x0027 02002A LJMP main(C:002A)
main:
C:0x002A E4 CLR A
C:0x002B F590 MOV P1(0x90),A
C:0x002D D2AF SETB EA(0xA8.7)
C:0x002F D288 SETB IT0(0x88.0)
C:0x0031 D2A8 SETB EX0(0xA8.0)
C:0x0033 80FE SJMP C:0033
荔枝运行效果https://ask.csdn.net/questions/7701834?spm=1005.2025.3001.5141