MCS-51测量输入脉冲宽度,精度1ms

View Code
 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

 

posted @ 2012-06-11 16:55  jinfengswust  阅读(192)  评论(0编辑  收藏  举报