OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3479|回复: 5

51单片机255倒计时器汇编程序调试遇到问题

[复制链接]

2

主题

4

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-7-20
在线时间
7 小时
发表于 2021-12-18 11:31:30 | 显示全部楼层 |阅读模式
1金钱

255倒计时器的需求是,有s28(单刀开关),s29(按钮)两个控制构件,要求是s28低电位时,进入预设模式,有滑动电阻器输入电压,利用adc0808模数转换,得到数字量,然后在8位数码管最左3位动态显示出来,s28高电位时,8位数码管上最左边3位显示预设值,最右边3位显示实时倒计时值,按下s29(1下开始,2下暂停)开始倒计时,每一秒-1,减到0,则使蜂鸣器响30秒,然后8位数码管最右边重新显示预设值,等待下一次倒计时。


自己写的时候,遇到问题如下:①动态数码管仿真显示异常,s28接高电位可以显示左右各3位,但是拨动到低电位只能显示一位(正常是显示左三位),利用的是同一个显示子程序(寄存器值不同)。②s28只能从高电位切换回低电位(由低到高只显示一位),且只有第一次有效,后面无论怎么拨动都只显示一位,如①问题。③使用寄存器间接寻址,mov A,[url=]@R0,指向bcd码缓存区时,指向异常,比如60H内有#01H,但是读取的时候,a取到了0,inc[/url]r0,依次向后也是如此。接线图以及汇编程序如下:

11111111.png

  1.         IOCON EQU 8003H
  2.         PORTA EQU 8000H
  3.         PORTB EQU 8001H
  4.         IN0   EQU 9000H               
  5.         BUF   EQU 60H  ;ad转换读入缓存
  6.         EOC   BIT P1.0
  7.         BIZ   BIT P1.1
  8.         S28   BIT P1.2
  9.         S29   BIT P3.2
  10.         ORG 0000H
  11.         LJMP START
  12.         ORG 0200H
  13.         ORG 0003H
  14.         JNB S28,out
  15.         CPL  TR0
  16.         out:
  17.         RETI
  18.         ORG 000BH
  19.         INC R4 ;+1,重装值
  20.         MOV TH0,#4EH
  21.         MOV TL0,#20H
  22.         CJNE R4,#20,leave
  23.         MOV R4,#00H
  24.         JNB F0,jishu
  25.         CLR BIZ
  26.         INC R5
  27.         CJNE R5,#30,leave
  28.         SETB BIZ
  29.         MOV A,R3 ;无法 MOV R2,R3
  30.         MOV R2,A
  31.         LCALL CON
  32.         CLR TR0
  33.         AJMP leave
  34.         jishu:
  35.         MOV A,R2
  36.         DEC A
  37.         MOV R2,A
  38.         MOV B,#100 ;开始计算
  39.         DIV AB
  40.         MOV 63H,A        ;63H 预设百位
  41.         MOV A,B
  42.         MOV B,#10
  43.         DIV AB
  44.         MOV 64H,A        ;64H 预设十位        
  45.         MOV 65H,B        ;65H 预设个位
  46.         CJNE R2,#00H,leave
  47.         SETB F0
  48.         leave:
  49.         RETI
  50.         CON:
  51.         MOV 63H,60H
  52.         MOV 64H,61H
  53.         MOV 65H,62H
  54.         RET
  55.         SHOW:
  56.         MOV R7,#80H        ;从第一位开始
  57.         MOV R0,#60H        ;缓存首地址
  58.         next:
  59.         LCALL DELAY
  60.         MOV A,@R0         ;送段码
  61.         MOV DPTR,#TAB
  62.         MOVC A,@A+DPTR
  63.         MOV DPTR,#PORTA
  64.         MOVX @DPTR,A
  65.         INC R0        ;下一段
  66.         MOV A,R7        ;送位码
  67.         CPL A
  68.         INC DPTR        ;指向portb
  69.         MOVX @DPTR,A
  70.         CPL A
  71.         RR A        ;下一位        
  72.         MOV R7,A
  73.         CJNE R7,#10H,gou
  74.         MOV R7,#04H
  75.         gou:
  76.         DJNZ R6,next
  77.         RET
  78.         TAB: DB 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
  79.         DELAY:
  80.         MOV R1,#0FFH
  81.         DJNZ R1,$
  82.         RET
  83.         START:
  84.         MOV P0,#0FFH        ;准双向口读,先写1
  85.         MOV P1,#0FFH
  86.         MOV P3,#0FFH
  87.         MOV DPTR,#IOCON        ;指向8255命令口
  88.         MOV A,#80H        ;PA、PB、PC设为基本输出模式
  89.         MOVX @DPTR,A
  90.         MOV TMOD,#01H ;初始化T0定时器,11.1HZ频率下,设为20000即可
  91.         MOV TH0,#4EH
  92.         MOV TL0,#20H
  93.         SETB EA
  94.         SETB ET0
  95.         SETB EX0
  96.         SETB IT0        ;下降沿触发
  97.         pan:
  98.         JB S28, DJS ;是0,则进入设置计数值
  99.         MOV DPTR,#9000H        ;指向A/D的0通道
  100.         SETB EOC
  101.         MOVX @DPTR,A        ;启动A/D转换
  102.         JNB EOC                     ;没转换好则等待
  103.         MOVX A,@DPTR        ;读A/D转换值
  104.         MOV A,#107        ;测试用
  105.         MOV R2,A         ;用于倒计时
  106.         MOV R3,A         ;用于恢复计数值
  107.         MOV R4,#00H         ;用于计秒
  108.         MOV R5,#00H         ;用于计蜂鸣器
  109.         MOV B,#100;开始计算
  110.         DIV AB
  111.         MOV 60H,A        ;60H 预设百位
  112.         MOV 63H,A
  113.         MOV A,B
  114.         MOV B,#10
  115.         DIV AB
  116.         MOV 61H,A        ;61H 预设十位
  117.         MOV 64H,A
  118.         MOV 62H,B        ;62H 预设个位
  119.         MOV 65H,B
  120.         MOV R6,#03H ;显示位数
  121.         LCALL SHOW
  122.         AJMP PAN
  123.         djs:
  124.         MOV R6,#06H ;显示位数
  125.         LCALL SHOW
  126.         AJMP PAN
  127.         END
复制代码

end.zip (203.6 KB, 下载次数: 0)

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

1061

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3583
金钱
3583
注册时间
2019-8-14
在线时间
1052 小时
发表于 2021-12-18 14:47:32 | 显示全部楼层
回复

使用道具 举报

2

主题

592

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1458
金钱
1458
注册时间
2019-7-28
在线时间
137 小时
发表于 2021-12-18 17:18:08 | 显示全部楼层
帮顶     
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2021-12-18 22:05:11 | 显示全部楼层
牛逼,汇编代码还是。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-7-20
在线时间
7 小时
 楼主| 发表于 2021-12-18 22:29:39 | 显示全部楼层
正点原子 发表于 2021-12-18 22:05
牛逼,汇编代码还是。。。

大佬,帮忙看看吧,结课大作业
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2021-12-21 01:42:46 | 显示全部楼层
吴无坞 发表于 2021-12-18 22:29
大佬,帮忙看看吧,结课大作业

我也看不懂
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 22:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表