一下是小弟毕业设计的程序部分,现在调试有问题如下:每次搬TAB1表时,总是把
3F 搬成FF,这是什么原因?
ORG 0000H
AJMP START
ORG 0100H
START: MOV SP, #70H ;设置堆栈初值
0103 74FF MOV A, #0FFH
0105 7900 MOV R1, #00H ;R0初始化
0107 7803 MOV R0, #03H ;循环三次
0109 758000 MOV P0, #00H
LOOP: ACALL M ;调用M序列子程序,用作编码
010E 53B003 ANL P3, #03H ;从P3.1输出
;延迟一秒
0111 75D000 DELAY: MOV PSW, #00H ;延迟子程序,选定R0
0114 18 LOOP1: DEC R0
0115 B80113 CJNE R0, #01H,XINXI ;一秒延迟后跳到XINXI
0118 7803 MOV R0, #03H
011A 758911 MOV TMOD,#11H ;初始化TMOD,方式1
011D 758AB0 MOV TL0, #0B0H ;计数初值B0
0120 758C3C MOV TH0, #3CH ;计数初值3C
0123 D28C SETB TR0 ;开始计数
0125 D2AF SETB EA ;开CPU中断
0127 D2A9 SETB ET0 ;开T0中断
LOOP0: JBC TF0
JNZ LOOP0
012B C0E0 XINXI: PUSH A ;堆栈,保存A中信息
012D C3 CLR C ;标志位清零
012E E9 MOV A,R1
012F 9408 SUBB A,#08H ;是否循环8次
0131 7002 JNZ NEXT
0133 7900 MOV R1,#00H
0135 E9 NEXT: MOV A,R1
0136 90016F MOV DPTR,#TAB ;将DPTR赋基址
0139 93 MOVC A,@A+DPTR ;查表
013A F5A0 MOV P2,A
013C 53A002 ANL P2,#02H ;从P2.1输出
013F 900177 MOV DPTR,#TAB1 ;数码管显示数据
0142 93 MOVC A,@A+DPTR
地址 机器码 源程序
0143 F580 MOV P0,A ;P0输出
0145 D0E0 POP A ;出栈
0147 09 INC R1
0148 23 RL A ;左循环
0149 A200 MOV C, 20H.0
014B 92E4 MOV ACC.4,C ;调整序列位
014D 210C AJMP LOOP
;***************M序列子程序***************
014F 85E0B0 M: MOV P3, ACC ;从P3输出
0152 752000 MOV 20H, #00H
0155 85E021 MOV 21H, ACC
0158 532140 ANL 21H, #40H ;将ACC.6保存
015B A2E7 MOV C, ACC.7 ;将最高为保存
015D B20E CPL 21H.6 ;模2运算
015F 820E ANL C, 21H.6
0161 92F0 MOV B.0, C
0163 A2E7 MOV C, ACC.7
0165 B20E CPL 21H.6
0167 B3 CPL C
0168 820E ANL C, 21H.6
016A 72F0 ORL C, B.0
016C 9200 MOV 20H.0,C ;保存C
016E 22 RET
016F 0202 TAB: DB 02H,02H ;信息码11110000
0171 0202 DB 02H,02H
0173 FDFD DB 0FDH,0FDH
0175 FDFD DB 0FDH,0FDH
0177 060606
017A 06 TAB1: DB 06H,06H,06H,06H
017B 2F2F2F
017E 2F DB 2FH,2FH,2FH,2FH
END
|