找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1251|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

51單片機255倒計時器匯編程序調(diào)試遇到問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:979551 發(fā)表于 2021-12-17 16:38 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 buxiangzhuche 于 2021-12-17 19:49 編輯

255倒計時器的需求是,有s28(單刀開關(guān)),s29(按鈕)兩個控制構(gòu)件,要求是s28低電位時,進入預(yù)設(shè)模式,有滑動電阻器輸入電壓,利用adc0808模數(shù)轉(zhuǎn)換,得到數(shù)字量,然后在8位數(shù)碼管最左3位動態(tài)顯示出來,s28高電位時,8位數(shù)碼管上最左邊3位顯示預(yù)設(shè)值,最右邊3位顯示實時倒計時值,按下s29(1下開始,2下暫停)開始倒計時,每一秒-1,減到0,則使蜂鳴器響30秒,然后8位數(shù)碼管最右邊重新顯示預(yù)設(shè)值,等待下一次倒計時。


自己寫的時候,遇到問題如下:①動態(tài)數(shù)碼管仿真顯示異常,s28接高電位可以顯示左右各3位,但是撥動到低電位只能顯示一位(正常是顯示左三位),利用的是同一個顯示子程序(寄存器值不同)。②s28只能從高電位切換回低電位(由低到高只顯示一位),且只有第一次有效,后面無論怎么撥動都只顯示一位,如①問題。③使用寄存器間接尋址,mov A,@R0,指向bcd碼緩存區(qū)時,指向異常,比如60H內(nèi)有#01H,但是讀取的時候,a取到了0,inc r0,依次向后也是如此。接線圖以及單片機程序如下:
  1.         IOCON EQU 8003H
  2.         PORTA EQU 8000H
  3.         PORTB EQU 8001H
  4.         IN0   EQU 9000H               
  5.         BUF   EQU 60H  ;ad轉(zhuǎn)換讀入緩存
  6.         EOC   BIT P1.0
  7.         BIZ   BIT P1.1
  8.         S28   BIT P1.2
  9.         S29   BIT P3.2
  10.         
  11.         ORG 0000H
  12.         LJMP START
  13.         ORG 0200H
  14.                
  15.         ORG 0003H
  16.         JNB S28,out
  17.         CPL  TR0
  18.         out:
  19.         RETI
  20.         
  21.         ORG 000BH
  22.         INC R4 ;+1,重裝值
  23.         MOV TH0,#4EH
  24.         MOV TL0,#20H
  25.         CJNE R4,#20,leave
  26.         MOV R4,#00H
  27.         JNB F0,jishu
  28.         CLR BIZ
  29.         INC R5
  30.         CJNE R5,#30,leave
  31.         SETB BIZ
  32.         MOV A,R3 ;無法 MOV R2,R3
  33.         MOV R2,A
  34.         LCALL CON
  35.         CLR TR0
  36.         AJMP leave
  37.         jishu:
  38.         MOV A,R2
  39.         DEC A
  40.         MOV R2,A
  41.         MOV B,#100 ;開始計算
  42.         DIV AB
  43.         MOV 63H,A        ;63H 預(yù)設(shè)百位
  44.         MOV A,B
  45.         MOV B,#10
  46.         DIV AB
  47.         MOV 64H,A        ;64H 預(yù)設(shè)十位        
  48.         MOV 65H,B        ;65H 預(yù)設(shè)個位
  49.         CJNE R2,#00H,leave
  50.         SETB F0
  51.         leave:
  52.         RETI
  53.         
  54.         CON:
  55.         MOV 63H,60H
  56.         MOV 64H,61H
  57.         MOV 65H,62H
  58.         RET
  59.                
  60.         SHOW:
  61.         MOV R7,#80H        ;從第一位開始
  62.         MOV R0,#60H        ;緩存首地址
  63.         next:
  64.         LCALL DELAY
  65.         MOV A,@R0         ;送段碼
  66.         MOV DPTR,#TAB
  67.         MOVC A,@A+DPTR
  68.         MOV DPTR,#PORTA
  69.         MOVX @DPTR,A
  70.         INC R0        ;下一段
  71.         MOV A,R7        ;送位碼
  72.         CPL A
  73.         INC DPTR        ;指向portb
  74.         MOVX @DPTR,A
  75.         CPL A
  76.         RR A        ;下一位        
  77.         MOV R7,A
  78.         CJNE R7,#10H,gou
  79.         MOV R7,#04H
  80.         gou:
  81.         DJNZ R6,next
  82.         RET
  83.         
  84.         TAB: DB 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
  85.                
  86.         DELAY:
  87.         MOV R1,#0FFH
  88.         DJNZ R1,$
  89.         RET
  90.         
  91.         START:
  92.         MOV P0,#0FFH        ;準雙向口讀,先寫1
  93.         MOV P1,#0FFH
  94.         MOV P3,#0FFH
  95.         MOV DPTR,#IOCON        ;指向8255命令口
  96.         MOV A,#80H        ;PA、PB、PC設(shè)為基本輸出模式
  97.         MOVX @DPTR,A
  98.         MOV TMOD,#01H ;初始化T0定時器,11.1HZ頻率下,設(shè)為20000即可
  99.         MOV TH0,#4EH
  100.         MOV TL0,#20H
  101.         SETB EA
  102.         SETB ET0
  103.         SETB EX0
  104.         SETB IT0        ;下降沿觸發(fā)
  105.         pan:
  106.         JB S28, DJS ;是0,則進入設(shè)置計數(shù)值
  107.         MOV DPTR,#9000H        ;指向A/D的0通道
  108.         SETB EOC
  109.         MOVX @DPTR,A        ;啟動A/D轉(zhuǎn)換
  110.         JNB EOC,[        DISCUZ_CODE_17        ]nbsp;       ;沒轉(zhuǎn)換好則等待
  111.         MOVX A,@DPTR        ;讀A/D轉(zhuǎn)換值
  112.         MOV A,#107        ;測試用
  113.         MOV R2,A         ;用于倒計時
  114.         MOV R3,A         ;用于恢復(fù)計數(shù)值
  115.         MOV R4,#00H         ;用于計秒
  116.         MOV R5,#00H         ;用于計蜂鳴器
  117.         MOV B,#100;開始計算
  118.         DIV AB
  119.         MOV 60H,A        ;60H 預(yù)設(shè)百位
  120.         MOV 63H,A
  121.         MOV A,B
  122.         MOV B,#10
  123.         DIV AB
  124.         MOV 61H,A        ;61H 預(yù)設(shè)十位
  125.         MOV 64H,A
  126.         MOV 62H,B        ;62H 預(yù)設(shè)個位
  127.         MOV 65H,B
  128.         MOV R6,#03H ;顯示位數(shù)
  129.         LCALL SHOW
  130.         AJMP PAN
  131.         djs:
  132.         MOV R6,#06H ;顯示位數(shù)
  133.         LCALL SHOW
  134.         AJMP PAN
  135.         END
復(fù)制代碼


                end.zip (203.6 KB, 下載次數(shù): 6)


為了便于各位大佬前輩調(diào)試,源碼及protues8.9工程文件一并附上了,十分感謝。
        



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:301191 發(fā)表于 2021-12-17 22:47 | 只看該作者
頂一下
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表