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