標(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ī)程序如下:
接線(xiàn)圖.png
(201.94 KB, 下載次數(shù): 37)
下載附件
接線(xiàn)圖
2021-12-17 19:49 上傳
IOCON EQU 8003H
PORTA EQU 8000H
PORTB EQU 8001H
IN0 EQU 9000H
BUF EQU 60H ;ad轉(zhuǎn)換讀入緩存
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 ;無(wú)法 MOV R2,R3
MOV R2,A
LCALL CON
CLR TR0
AJMP leave
jishu:
MOV A,R2
DEC A
MOV R2,A
MOV B,#100 ;開(kāi)始計(jì)算
DIV AB
MOV 63H,A ;63H 預(yù)設(shè)百位
MOV A,B
MOV B,#10
DIV AB
MOV 64H,A ;64H 預(yù)設(shè)十位
MOV 65H,B ;65H 預(yù)設(shè)個(gè)位
CJNE R2,#00H,leave
SETB F0
leave:
RETI
CON:
MOV 63H,60H
MOV 64H,61H
MOV 65H,62H
RET
SHOW:
MOV R7,#80H ;從第一位開(kāi)始
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 ;準(zhǔn)雙向口讀,先寫(xiě)1
MOV P1,#0FFH
MOV P3,#0FFH
MOV DPTR,#IOCON ;指向8255命令口
MOV A,#80H ;PA、PB、PC設(shè)為基本輸出模式
MOVX @DPTR,A
MOV TMOD,#01H ;初始化T0定時(shí)器,11.1HZ頻率下,設(shè)為20000即可
MOV TH0,#4EH
MOV TL0,#20H
SETB EA
SETB ET0
SETB EX0
SETB IT0 ;下降沿觸發(fā)
pan:
JB S28, DJS ;是0,則進(jìn)入設(shè)置計(jì)數(shù)值
MOV DPTR,#9000H ;指向A/D的0通道
SETB EOC
MOVX @DPTR,A ;啟動(dòng)A/D轉(zhuǎn)換
JNB EOC,[ DISCUZ_CODE_17 ]nbsp; ;沒(méi)轉(zhuǎn)換好則等待
MOVX A,@DPTR ;讀A/D轉(zhuǎn)換值
MOV A,#107 ;測(cè)試用
MOV R2,A ;用于倒計(jì)時(shí)
MOV R3,A ;用于恢復(fù)計(jì)數(shù)值
MOV R4,#00H ;用于計(jì)秒
MOV R5,#00H ;用于計(jì)蜂鳴器
MOV B,#100;開(kāi)始計(jì)算
DIV AB
MOV 60H,A ;60H 預(yù)設(shè)百位
MOV 63H,A
MOV A,B
MOV B,#10
DIV AB
MOV 61H,A ;61H 預(yù)設(shè)十位
MOV 64H,A
MOV 62H,B ;62H 預(yù)設(shè)個(gè)位
MOV 65H,B
MOV R6,#03H ;顯示位數(shù)
LCALL SHOW
AJMP PAN
djs:
MOV R6,#06H ;顯示位數(shù)
LCALL SHOW
AJMP PAN
END
復(fù)制代碼
end.zip
(203.6 KB, 下載次數(shù): 6)
2021-12-17 19:47 上傳
點(diǎn)擊文件名下載附件
源碼及接線(xiàn)圖
為了便于各位大佬前輩調(diào)試,源碼及protues8.9工程文件一并附上了,十分感謝。
作者:
人工置頂員
時(shí)間:
2021-12-17 22:47
頂一下
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1