標(biāo)題: 很急需要幫忙 關(guān)于電子鐘彙編語言 [打印本頁]

作者: 黃昭旨    時間: 2017-1-2 17:55
標(biāo)題: 很急需要幫忙 關(guān)于電子鐘彙編語言
寫電子鐘彙編語言,發(fā)射端發(fā)射4個數(shù)字到接收端的數(shù)碼管顯示四位數(shù)字,分別是分和秒各兩位數(shù),
發(fā)射端:TIMER0是寫發(fā)射數(shù)字的判別式,TIMER1是配合串列埠模式1,SERIES是串列埠中斷接收端:LOOP是接端數(shù)字的判別式,接收一個BYTE,高位元是位數(shù),低位元是數(shù)字,
TIMER0是顯示四位數(shù)字,SERIERS是串列埠中斷
程式寫不出來需要幫忙,發(fā)射端的TIMER0暫時寫秒的個位和十位,接收端的判別
數(shù)字接收過來的判別式已經(jīng)寫好了,但是數(shù)字送過去依然失敗,接收端的TIMER0
程式?jīng)]有任何錯誤,可以在數(shù)碼管顯示數(shù)字,請神人幫忙完成越快越好
我用兩塊一樣的開發(fā)粄~

發(fā)射端程式:
                q1 EQU 31H  ;個位
                q2 EQU 32H  ;十位                                


        
                ORG 0000H
                AJMP START
                ORG 000BH
                AJMP TIMER0                                
                ORG 001BH
                AJMP TIMER1
                ORG 0023H
                AJMP SERIES               
                                

START:        MOV IP,#00011010B ;中斷優(yōu)先權(quán)有:串列埠.計數(shù)器1.計數(shù)器0
                MOV IE,#10010010B ;中斷開啟有:總開關(guān).串列埠.計數(shù)器0
                MOV SCON,#01000000B ;串列埠模式1,不可接收資料
                MOV        TMOD,#00100010B ;計數(shù)器1模式2,計數(shù)器0模式2
                MOV TCON,#11110000B ;計數(shù)器1開啟,計時器0溢位旗標(biāo),計時器0開啟
                SETB TR0 ;開啟計數(shù)器0
                MOV  TH1,#253        ;設(shè)定計時器1的值,鮑率=9600
                SETB TR1        ;開啟計數(shù)器1                                
                MOV DPTR,#TABLE ;DPTR指向數(shù)碼管資料區(qū)                        
                        MOV q1,#00H ;個位,判別位數(shù)=0,數(shù)字=0                                
                        MOV q2,#10H ;十位,判別位數(shù)=1,數(shù)字=0        

LOOP: sjmp loop         
;---------------------------------------------------
TIMER0:  
                PUSH ACC
                CLR TR0     ;關(guān)閉計數(shù)器0
                MOV TH0,#6
                MOV TL0,#6
               
               
                djnz r4,k0       ; 延遲時間
                mov r4,#100   ;
                djnz r5,k0       ;
                mov r5,#2      ;

                                          ;q1=00,00~09    q2=10,10~15
                mov a,q1    ;q1=要發(fā)射的個位   
                inc a
                mov q1,a
                cjne a,#0ah,k1  ; 發(fā)射個位的式子,發(fā)射0~9是跑到k1
                mov a,#00h     ;當(dāng)發(fā)射個位超過0a時會歸零
                mov q1,a        
                mov sbuf,a   ;發(fā)射個位等於0時
                acall delay
                                
                mov a,q2    ;q2=要發(fā)射的十位
                inc a
                mov q2,a
                cjne a,#16h,k1        ; 發(fā)射十位的式子,發(fā)射0~5是跑到k1                                                        
                mov a,#10h       ;把十位數(shù)歸零,但判別位數(shù)還是1
                mov q2,a
                mov sbuf,a
                acall delay

k0:                setb tr0
                pop acc
                reti          ;返回主程式
k1:        
                mov sbuf,a     ;發(fā)射數(shù)字
                acall delay
                        
                setb tr0
                pop acc
                reti     ;返回主程式
;---------------------------------------------------
TIMER1:                                                
                PUSH ACC                        
                CLR TR1                                
                                                               
                MOV TH1,#253        
                SETB TR1        
                POP ACC               
                RETI               
;---------------------------------------------------
SERIES:        
                JNB TI,RECEIVE ;判斷是否傳送完畢,如果否,就是接收完畢中斷
                CLR TI
                RETI
RECEIVE:               
               
                CLR RI        ;清除接收中斷旗標(biāo)               
                MOV A,SBUF
                RETI
;---------------------------------------------------
TABLE:  DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ; 數(shù)字0~9                                       
        
DELAY:        MOV R6,#250    ;延遲的副程式
DL1:        MOV R7,#200
DL2:        DJNZ R7,DL2
                DJNZ R6,DL1
                RET
               
                END



以下是接收端的程式:


        ScanLine                 EQU  22H   ;掃描信號
        packet                equ  23h    ;接收數(shù)字的寄存器

                                                
                        
                        ORG  0000H
                        AJMP START
                        ORG  000BH
                        AJMP TIMER0
                        ORG 0023H
                        AJMP SERIES
               



START:         MOV IP,#00011010B ;中斷優(yōu)先權(quán):串列埠.計數(shù)器1.計數(shù)器0
                MOV IE,#10011010B ;中斷致能:總開關(guān)開啟.串列埠.計數(shù)器1.計數(shù)器0
                MOV        SCON,#01010000B ;串列埠模式1,REN=1可接收資料
                MOV        TMOD,#00100001B ;計數(shù)器1模式2,計數(shù)器0模式1
                MOV TCON,#11110000B ;-計數(shù)器1溢位+啟動,計數(shù)器0溢位+啟動
                MOV TH0,#0ECH
                MOV TL0,#78H
                SETB TR0 ;-計數(shù)器0開啟
                SETB EA
                SETB ET0
                SETB ET1
                MOV         TH1,#253        ;計數(shù)器1模式自動在載入253,鮑率=9600                        
                SETB TR1                ;開啟記數(shù)器1
                SETB TR0 ;開啟記數(shù)器0        
                        MOV SP,#60H ;SP堆疊暫存器指向位置60H
                        MOV ScanLine,#11110111B         ;掃描信號初值
                        MOV DPTR,#TABLE        ;DPTR指向數(shù)碼管資料區(qū)
                        MOV R0,#30H                ;四位數(shù)資料區(qū)
                        MOV 30H,#00                ;個位歸零
                        MOV 31H,#00                ;十位歸零
                        MOV 32H,#00                ;百位歸零
                        MOV 33H,#00            ;千位歸零
                        mov packet,#00         ;接收數(shù)字的寄存器

loop:
        
        mov packet,sbuf ; 把接收的數(shù)字放到packet的寄存器裡面                                                                                   
        mov a,packet     ;把數(shù)字放到累積器a裡面
        anl a,#0f0h  ;把數(shù)字過濾個位數(shù)字,會剩下位數(shù)        
        cjne a,#00h,k1 ;判別是否為個位數(shù)字,若不是則跳k1副程式
        anl packet,#0fh ;把接收到個位數(shù)字的位數(shù)歸零留下數(shù)字
        mov r1,#30h
        mov @r1,packet   ;把濾除後留下的數(shù)字放入r1裡面即可顯示數(shù)字
        ajmp loop
k1:               
        cjne a,#10h,k2 ;判別是否為十位數(shù)字,若不是則跳k2副程式
        anl packet,#0fh ;把接收到十位數(shù)字的位數(shù)歸零留下數(shù)字
        inc r1         ;r1=31h
        mov @r1,packet   ;把濾除後留下的數(shù)字放入r1裡面即可顯示數(shù)字
        ajmp loop
               
k2: ajmp loop

TIMER0:         
                PUSH ACC
                CLR  TR0     ;關(guān)閉計數(shù)器0
                MOV TH0,#0F4H   ;重新設(shè)定計數(shù)器0的數(shù)值
                MOV TL0,#078H        
                MOV A,@R0          ;載入時間資料
                MOVC A,@A+DPTR        ;將BCD碼轉(zhuǎn)成顯示碼
                MOV P0,A              ;將顯示碼送到P0
                INC R0                        ;下一位數(shù)        
                MOV A,ScanLine      
                MOV P2,A           ;輸出掃描信號
                RR A              ;掃描下一行
                MOV ScanLine,A   ;更新掃描信號
                CJNE A,#10111111B,ti00   ;已經(jīng)掃描完四位數(shù)?
                MOV R0,#30H                ;重新設(shè)定緩衝區(qū)位址30H               
                MOV ScanLine,#11110111B  ;重新設(shè)定掃描信號

ti00:        SETB TR0
                POP  ACC                        
                RETI    ;返回主程式
        
;---------------------------------------------------
SERIES:                                          
                        JNB TI,RECEIVE
                        CLR TI
                        RETI
RECEIVE:                                                                                                                  
                        CLR RI         
                        MOV        A,SBUF                                                
                        mov packet,a
                        RETI
;--------------------------------------------------------
TABLE:        DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;0~9               

DELAY:        MOV R6,#250    ;延遲副程式
DL1:        MOV R7,#200
DL2:        DJNZ R7,DL2
        DJNZ R6,DL1
        RET
               
        END


51 AVR最小系統(tǒng).pdf

656.92 KB, 下載次數(shù): 10

開發(fā)粄電路


作者: ahshmj    時間: 2017-1-2 22:03
你的程序我沒看完。不知道你的計數(shù)源是什么?分、秒是怎么產(chǎn)生的。你的學(xué)習(xí)板上的晶振是多少的?波特率對不對?兩塊板子是怎么連接的,連接線多長?
但是,
C/T1做波特率發(fā)生器不應(yīng)該開中斷,更沒有中斷優(yōu)先權(quán)。中斷程序“TIMER1”也不需要。包括接收端和發(fā)送端
//發(fā)送端可以不開串口中斷。
作者: 黃昭旨    時間: 2017-1-3 09:34
分和秒的產(chǎn)生是用發(fā)送端的TIMER0,晶振11.0592,發(fā)射端的TXD接腳用杜邦線接到
接收端的RXD街角,波特率我算過了正確無誤,板子是YL-39開發(fā)版,兩個開發(fā)版,只是
將發(fā)射端發(fā)射數(shù)字到接收端那裏顯示數(shù)字,請問C/T1是指發(fā)射端還是接收端??
謝謝你下面給我的意見,有些東西不需要我卻打上去,抱歉我是新手,感謝你給我的意見
作者: qq1182560902    時間: 2019-9-25 10:12
很詳細(xì)




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