标题:
51单片机255倒计时器汇编程序调试遇到问题
[打印本页]
作者:
buxiangzhuche
时间:
2021-12-17 16:38
标题:
51单片机255倒计时器汇编程序调试遇到问题
本帖最后由 buxiangzhuche 于 2021-12-17 19:49 编辑
255倒计时器的需求是,有s28(单刀开关),s29(按钮)两个控制构件,要求是s28低电位时,进入预设模式,有滑动电阻器输入电压,利用adc0808模数转换,得到数字量,然后在8位数码管最左3位动态显示出来,s28高电位时,8位数码管上最左边3位显示预设值,最右边3位显示实时倒计时值,按下s29(1下开始,2下暂停)开始倒计时,每一秒-1,减到0,则使蜂鸣器响30秒,然后8位数码管最右边重新显示预设值,等待下一次倒计时。
自己写的时候,遇到问题如下:①动态数码管仿真显示异常,s28接高电位可以显示左右各3位,但是拨动到低电位只能显示一位(正常是显示左三位),利用的是同一个显示子程序(寄存器值不同)。②s28只能从高电位切换回低电位(由低到高只显示一位),且只有第一次有效,后面无论怎么拨动都只显示一位,如①问题。③使用寄存器间接寻址,mov A,@R0,指向bcd码缓存区时,指向异常,比如60H内有#01H,但是读取的时候,a取到了0,inc r0,依次向后也是如此。接线图以及单片机程序如下:
接线图.png
(201.94 KB, 下载次数: 37)
下载附件
接线图
2021-12-17 19:49 上传
IOCON EQU 8003H
PORTA EQU 8000H
PORTB EQU 8001H
IN0 EQU 9000H
BUF EQU 60H ;ad转换读入缓存
EOC BIT P1.0
BIZ BIT P1.1
S28 BIT P1.2
S29 BIT P3.2
ORG 0000H
LJMP START
ORG 0200H
ORG 0003H
JNB S28,out
CPL TR0
out:
RETI
ORG 000BH
INC R4 ;+1,重装值
MOV TH0,#4EH
MOV TL0,#20H
CJNE R4,#20,leave
MOV R4,#00H
JNB F0,jishu
CLR BIZ
INC R5
CJNE R5,#30,leave
SETB BIZ
MOV A,R3 ;无法 MOV R2,R3
MOV R2,A
LCALL CON
CLR TR0
AJMP leave
jishu:
MOV A,R2
DEC A
MOV R2,A
MOV B,#100 ;开始计算
DIV AB
MOV 63H,A ;63H 预设百位
MOV A,B
MOV B,#10
DIV AB
MOV 64H,A ;64H 预设十位
MOV 65H,B ;65H 预设个位
CJNE R2,#00H,leave
SETB F0
leave:
RETI
CON:
MOV 63H,60H
MOV 64H,61H
MOV 65H,62H
RET
SHOW:
MOV R7,#80H ;从第一位开始
MOV R0,#60H ;缓存首地址
next:
LCALL DELAY
MOV A,@R0 ;送段码
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#PORTA
MOVX @DPTR,A
INC R0 ;下一段
MOV A,R7 ;送位码
CPL A
INC DPTR ;指向portb
MOVX @DPTR,A
CPL A
RR A ;下一位
MOV R7,A
CJNE R7,#10H,gou
MOV R7,#04H
gou:
DJNZ R6,next
RET
TAB: DB 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
DELAY:
MOV R1,#0FFH
DJNZ R1,$
RET
START:
MOV P0,#0FFH ;准双向口读,先写1
MOV P1,#0FFH
MOV P3,#0FFH
MOV DPTR,#IOCON ;指向8255命令口
MOV A,#80H ;PA、PB、PC设为基本输出模式
MOVX @DPTR,A
MOV TMOD,#01H ;初始化T0定时器,11.1HZ频率下,设为20000即可
MOV TH0,#4EH
MOV TL0,#20H
SETB EA
SETB ET0
SETB EX0
SETB IT0 ;下降沿触发
pan:
JB S28, DJS ;是0,则进入设置计数值
MOV DPTR,#9000H ;指向A/D的0通道
SETB EOC
MOVX @DPTR,A ;启动A/D转换
JNB EOC,[ DISCUZ_CODE_17 ]nbsp; ;没转换好则等待
MOVX A,@DPTR ;读A/D转换值
MOV A,#107 ;测试用
MOV R2,A ;用于倒计时
MOV R3,A ;用于恢复计数值
MOV R4,#00H ;用于计秒
MOV R5,#00H ;用于计蜂鸣器
MOV B,#100;开始计算
DIV AB
MOV 60H,A ;60H 预设百位
MOV 63H,A
MOV A,B
MOV B,#10
DIV AB
MOV 61H,A ;61H 预设十位
MOV 64H,A
MOV 62H,B ;62H 预设个位
MOV 65H,B
MOV R6,#03H ;显示位数
LCALL SHOW
AJMP PAN
djs:
MOV R6,#06H ;显示位数
LCALL SHOW
AJMP PAN
END
复制代码
end.zip
(203.6 KB, 下载次数: 6)
2021-12-17 19:47 上传
点击文件名下载附件
源码及接线图
为了便于各位大佬前辈调试,源码及protues8.9工程文件一并附上了,十分感谢。
作者:
人工置顶员
时间:
2021-12-17 22:47
顶一下
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1