標(biāo)題: 51單片機(jī)255倒計(jì)時(shí)器匯編程序調(diào)試遇到問(wèn)題 [打印本頁(yè)]

作者: buxiangzhuche    時(shí)間: 2021-12-17 16:38
標(biāo)題: 51單片機(jī)255倒計(jì)時(shí)器匯編程序調(diào)試遇到問(wèn)題
本帖最后由 buxiangzhuche 于 2021-12-17 19:49 編輯

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


自己寫(xiě)的時(shí)候,遇到問(wèn)題如下:①動(dòng)態(tài)數(shù)碼管仿真顯示異常,s28接高電位可以顯示左右各3位,但是撥動(dòng)到低電位只能顯示一位(正常是顯示左三位),利用的是同一個(gè)顯示子程序(寄存器值不同)。②s28只能從高電位切換回低電位(由低到高只顯示一位),且只有第一次有效,后面無(wú)論怎么撥動(dòng)都只顯示一位,如①問(wèn)題。③使用寄存器間接尋址,mov A,@R0,指向bcd碼緩存區(qū)時(shí),指向異常,比如60H內(nèi)有#01H,但是讀取的時(shí)候,a取到了0,inc r0,依次向后也是如此。接線(xiàn)圖以及單片機(jī)程序如下:
  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 ;無(wú)法 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 ;開(kāi)始計(jì)算
  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è)個(gè)位
  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        ;從第一位開(kāi)始
  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        ;準(zhǔn)雙向口讀,先寫(xiě)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定時(shí)器,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,則進(jìn)入設(shè)置計(jì)數(shù)值
  107.         MOV DPTR,#9000H        ;指向A/D的0通道
  108.         SETB EOC
  109.         MOVX @DPTR,A        ;啟動(dòng)A/D轉(zhuǎn)換
  110.         JNB EOC,[        DISCUZ_CODE_17        ]nbsp;       ;沒(méi)轉(zhuǎn)換好則等待
  111.         MOVX A,@DPTR        ;讀A/D轉(zhuǎn)換值
  112.         MOV A,#107        ;測(cè)試用
  113.         MOV R2,A         ;用于倒計(jì)時(shí)
  114.         MOV R3,A         ;用于恢復(fù)計(jì)數(shù)值
  115.         MOV R4,#00H         ;用于計(jì)秒
  116.         MOV R5,#00H         ;用于計(jì)蜂鳴器
  117.         MOV B,#100;開(kāi)始計(jì)算
  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è)個(gè)位
  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工程文件一并附上了,十分感謝。
        




作者: 人工置頂員    時(shí)間: 2021-12-17 22:47
頂一下




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1