读书人

小弟我的程序主要是实现8051的TO、T1分

发布时间: 2012-02-07 17:45:36 作者: rapoo

我的程序主要是实现8051的TO、T1分别计数,并做差并用LED显示,不知道哪里错了,哪位高手能帮我看下?谢谢!
ORG 0300H

CSH: MOV R3,#0FH ;字位码始值送R3
MOV A,R3
MOV P2,A ;字位码送P2口
MOV A,#0C0H ;字形码送A(“0”的字形码)
MOV P0,A ;字形码送P0口,LED显示全0

START: JB P1.0,START ;等待开始键按下,若无按下,则系统不工作

ZCZ: MOV TMOD,#55H ;令T0和T1为计数器方式1
MOV TH0,#0D8H ;装入T0高8位初值
MOV TL0, #0F0H ;装入T0低8位初值
SETB TR0 ;启动T0计数
SETB TR1 ;启动T1计数

JX: JB TF0,OK ;若T0溢满,跳转至OK
AJMP JX ;若T0未溢满则JX
OK: CLR TR0 ;停止T0计数
CLR TR1 ;停止T1计数




QIUCHA: ;求T0与T1的差值
MOV 10H,TL0 ;赋T0低八位给10H
MOV 11H,TH0 ;赋T0高八位给11H
MOV 12H,TL1 ;赋T1低八位给12H
MOV 13H,TH1 ;赋T1高八位给13H
CLR C ;清零
MOV A,11H
SUBB A,13H ;T0与T1高八位相减
MOV 15H,A ;结果赋给15H
MOV A,10H
SUBB A,12H ;T0与T1低八位相减
MOV 14H,A ;结果赋给14H

JC QJDZ
MOV R7,#00H ;差值为为正数时,R7=0
MOV 16H,14H ;差值低八位赋给16H
MOV 17H,15H ;差值高八位赋给17H
SJMP LOOP ;转移至LOOP

QJDZ: ;求绝对值
MOV R7,#01H ;差值为负数时,R7=1
MOV A,14H ;低八位赋给A
CPL A ;取反
INC A ;加1
MOV 16H,A ;赋给16H
JC JIA ;低八位若产生进位,则跳转JIA
MOV A,15H ;无进位,高八位赋给A
CPL A ;取反
MOV 17H,A ;赋给17H
SJMP LOOP ;转移至LOOP

JIA: ;低八位有产生进位
MOV A,15H ;把1高八位赋给A
CPL A ;取反
INC A ;加1
MOV 17H,A ;赋给17H
SJMP LOOP ;转移至LOOP




LOOP:
MOV A, 16H ;低八位二进制赋给A
MOV B, #100 ;100赋给B
DIV AB ;A除以B
MOV R3, A ;百位数送R3
MOV A, #10 ;10赋给A,B中为余数
XCH A, B ;A与B中的数交换
DIV AB ;A除以B
MOV R4, A ;十位数送R4,B中为余数
MOV R5, B ;个位数送R5





DISPLY:
MOV DPTR,#TABLE ;DPTR指向字形表的起始地址
MOV R0,#00001000B ;字位码送R0
MOV A,R5 ;个位数字形码的地址偏移量送A
MOVC A,@A+DPTR
MOV P0,A ;字形码送P0口
MOV P2,R0 ;字位码送P2口
ACALL DELAY ;延时1ms
ANL P2,#00000000B ;令显示器熄灭,以免产生残影

MOV DPTR,#TABLE ;DPTR指向字形表的起始地址
MOV A,R0
RR A ;字位码右移
MOV R0,A
MOV A,R4 ;十位数字形码的地址偏移量送A
MOVC A,@A+DPTR


MOV P0,A ;字形码送P0口
MOV P2,R0 ;字位码送P2口
ACALL DELAY ;延时1ms
ANL P2,#00000000B ;令显示器熄灭,以免产生残影

MOV DPTR,#TABLE ;DPTR指向字形表的起始地址
MOV A,R0
RR A ;字位码右移
MOV R0,A
MOV A,R3 ;十位数字形码的地址偏移量送A
MOVC A,@A+DPTR
MOV P0,A ;字形码送P0口
MOV P2,R0 ;字位码送P2口
ACALL DELAY ;延时1ms
ANL P2,#00000000B ;令显示器熄灭,以免产生残影

MOV DPTR,#TABLE ;DPTR指向字形表的起始地址
MOV A,R7 ;R7送给A
JZ LOOP1 ;A=0则LOOP1
MOV A,#14H ;负号地址偏移量送A
MOVC A,@A+DPTR
MOV P0,A ;负号字形码送P0口
MOV P2,#00000001B ;字位码送P2口
ACALL DELAY ;延时1ms
ANL P2,#00000000B ;令显示器熄灭,以免产生残影

LOOP1: MOV A,#10H ;空格(正号)地址偏移量送A
MOVC A,@A+DPTR
MOV P0,A ;空格(正号)字形码送P0口
MOV P2,#00000001B ;字位码送P2口
ACALL DELAY ;延时1ms
ANL P2,#00000000B ;令显示器熄灭,以免产生残影


DELAY: MOV R2,#02H ;延时1ms程序
DELAY1: MOV R1,#0FFH
DELAY2: DJNZ R1,DELAY2
DJNZ R2,DELAY1
RET ;返回

TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H ;字形码表
DB 92H, 82H, 0F8H,80H, 90H
DB 88H, 83H, 0C6H,0A1H,86H
DB 8EH, 0FFH,0CH, 89H, 7FH
DB 0BFH

END




[解决办法]
T0 T1 谁先计满?不知道的话 需要判断啊 计数值加法应该先地位减 后高位减啊!

读书人网 >汇编语言

热点推荐