1 FLAG BIT 00H
2 PULSE DATA 40H
3
4 ORG 0000H
5 AJMP RESET
6 ORG 0013H
7 AJMP EINT1
8 ORG 001BH
9 AJMP TINT1
10
11 ORG 0040H
12 RESET:
13 MOV TMOD,#010H
14 SETB PX1 ; 一定要设外部中断优先
15 SETB IT1
16 SETB EX1
17 SETB ET1
18 SETB EA
19 AJMP MAIN
20
21 EINT1:
22 CLR TR1 ; 停止定时器,以免使PULSE额外增加
23 SETB FLAG ; 设置显示标志位
24 RETI
25
26 TINT1: ; 每1ms让PULSE增加1
27 MOV TH1,#0FCH
28 MOV TL1,#0B0H
29 INC PULSE
30 RETI
31
32 ORG 0100H
33 MAIN:
34 JNB P3.3,$ ; 主程序查询P3.3引脚状态
35 ; 直到高电平产生才执行到下一条语句,即启动1ms定时器
36
37 MOV TH1,#0FCH
38 MOV TL1,#0B0H
39 SETB TR1
40
41 JNB FLAG,$ ; 主程序在定时计数期间一直在这条指令处等待
42 ; 直到外部中断产生后置位FLAG
43
44 CLR FLAG
45 MOV A,PULSE ; 读取定时值n毫秒,然后转化成十位和个位
46 MOV B,#10 ; 最后通过查表显示到两个数码管上
47 DIV AB
48 MOV DPTR,#TABLE
49 MOVC A,@A+DPTR
50 MOV P0,A
51 MOV A,B
52 MOVC A,@A+DPTR
53 MOV P2,A
54 SJMP MAIN
55
56 ORG 0200H
57 TABLE: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H
58
59 END