发表于:2005-08-10 22:46:00
楼主
ORG 0000H
AJMP START 转启动
ORG 000BH
AJMP D1S 转中断
ORG 0100H
START: MOV P0,#0FFH 置P0高电位
MOV P1,#0FFH 置P1高电位
MOV P2,#0FFH 置P2高电位
MOV P3,#0FFH 置P3高电位
MOV 20H,#00H 预置值个位清0
MOV 21H,#00H 预置值十位清0
MOV 22H,#00H 预置值百位清0
MOV 23H,#00H 预置值千位清0
MOV R0,#01H 计数值个位送1
MOV R1,#00H 计数值十位清0
MOV R2,#00H 计数值百位清0
MOV R3,#00H 计数值千位清0
CLR 2CH.0 个位比较标志清0
CLR 2CH.1 十位比较标志清0
CLR 2CH.2 百位比较标志清0
CLR 2CH.3 千位比较标志清0
CLR C 清0C
MOV TMOD,#01H 定时器T0方式1
MOV TL0,#0B0H 置定时器初值
MOV TH0,#3CH
MOV IE,#82H T0开中断
MOV 24H,#14H 24H装入延时次数
ACALL DISPLAY 调用显示
AJMP READ 转读数
READ: MOV P1,#0FFH 置P1高电位
CLR P1.0 清0P1.0
ACALL D2MS 调2ms延时子程序
MOV A,P1 读P1
CPL A A取反
SWAP A A高低半字节交换
ANL A,#0FH 屏蔽高4位
MOV A,20H 数据送入预置值个位
MOV P1,#0FFH P1置高电位
CLR P1.1 P1.1清零
ACALL D2MS 调2ms延时子程序
MOV A,P1 读P1
CPL A A取反
SWAP A A高低半字节交换
ANL A,#0FH 屏蔽高4位
MOV A,21H 数据送入预置值十位
MOV P1,#0FFH P1置高电位
CLR P1.2 P1.2清0
ACALL D2MS逻辑 调2ms延时子程序
MOV A,P1 读P1
CPL A A取反
SWAP A A高低半字节交换
ANL A,#0FH 屏蔽高4位
MOV A,22H 数据送入预置值百位
MOV P1,#0FFH P1置高电位
CLR P1.3 P1.3清0
ACALL D2MS 调2ms延时子程序
MOV A,P1 读P1
CPL A A取反
SWAP A A高低半字节交换
ANL A,#0FH 屏蔽高4位
MOV A,23H 数据送入预置值千位
MOV P1,#0FFH P1置高电位
ACALL DISPLAY 调显示子程序
AJMP IN 转输入
IN: MOV A,P3 读P3
CPL A A取反
ANL A,#0F0H 屏蔽低4位
JZ READ A=0转读数
ACALL D5MS A非0调用5mS延时子程序
ACALL DISPLAY 调显示子程序
MOV A,P3 再读P3
CPL A A取反
ANL A,#0F0H 屏蔽低4位
JB ACC.4,COMP1 ACC.4=1转COMP
AJMP READ ACC.4=0转读数
COMP1: MOV A,R3 千位计数值送A
ANL A,#0FH 屏蔽高4位
CJNE A,23H,COMP2 比较不相等转COMP2
SETB 2CH.3 比较相等置位千位标志
AJMP COMP2 转COMP2
COMP2: MOV A,R2 百位计数值送A
ANL A,#0FH 屏蔽高4位
CJNE A,22H,COMP3 比较不相等转COMP3
SETB 2CH.2 比较相等置位百位标志位
AJMP COMP3 转COMP3
COMP3: MOV A,R