找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1879|回复: 3
收起左侧

很急需要幫忙 关于電子鐘彙編語言

[复制链接]
ID:139514 发表于 2017-1-2 17:55 | 显示全部楼层 |阅读模式
100黑币
寫電子鐘彙編語言,發射端發射4個數字到接收端的數碼管顯示四位數字,分別是分和秒各兩位數,
發射端:TIMER0是寫發射數字的判別式,TIMER1是配合串列埠模式1,SERIES是串列埠中斷接收端:LOOP是接端數字的判別式,接收一個BYTE,高位元是位數,低位元是數字,
TIMER0是顯示四位數字,SERIERS是串列埠中斷
程式寫不出來需要幫忙,發射端的TIMER0暫時寫秒的個位和十位,接收端的判別
數字接收過來的判別式已經寫好了,但是數字送過去依然失敗,接收端的TIMER0
程式沒有任何錯誤,可以在數碼管顯示數字,請神人幫忙完成越快越好
我用兩塊一樣的開發粄~

發射端程式:
                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 ;中斷優先權有:串列埠.計數器1.計數器0
                MOV IE,#10010010B ;中斷開啟有:總開關.串列埠.計數器0
                MOV SCON,#01000000B ;串列埠模式1,不可接收資料
                MOV        TMOD,#00100010B ;計數器1模式2,計數器0模式2
                MOV TCON,#11110000B ;計數器1開啟,計時器0溢位旗標,計時器0開啟
                SETB TR0 ;開啟計數器0
                MOV  TH1,#253        ;設定計時器1的值,鮑率=9600
                SETB TR1        ;開啟計數器1                                
                MOV DPTR,#TABLE ;DPTR指向數碼管資料區                        
                        MOV q1,#00H ;個位,判別位數=0,數字=0                                
                        MOV q2,#10H ;十位,判別位數=1,數字=0        

LOOP: sjmp loop         
;---------------------------------------------------
TIMER0:  
                PUSH ACC
                CLR TR0     ;關閉計數器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=要發射的個位   
                inc a
                mov q1,a
                cjne a,#0ah,k1  ; 發射個位的式子,發射0~9是跑到k1
                mov a,#00h     ;當發射個位超過0a時會歸零
                mov q1,a        
                mov sbuf,a   ;發射個位等於0時
                acall delay
                                
                mov a,q2    ;q2=要發射的十位
                inc a
                mov q2,a
                cjne a,#16h,k1        ; 發射十位的式子,發射0~5是跑到k1                                                        
                mov a,#10h       ;把十位數歸零,但判別位數還是1
                mov q2,a
                mov sbuf,a
                acall delay

k0:                setb tr0
                pop acc
                reti          ;返回主程式
k1:        
                mov sbuf,a     ;發射數字
                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        ;清除接收中斷旗標               
                MOV A,SBUF
                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



以下是接收端的程式:


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

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



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

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

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

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最小系統.pdf

656.92 KB, 下载次数: 10

開發粄電路

回复

使用道具 举报

ID:7485 发表于 2017-1-2 22:03 | 显示全部楼层
你的程序我没看完。不知道你的计数源是什么?分、秒是怎么产生的。你的学习板上的晶振是多少的?波特率对不对?两块板子是怎么连接的,连接线多长?
但是,
C/T1做波特率发生器不应该开中断,更没有中断优先权。中断程序“TIMER1”也不需要。包括接收端和发送端
//发送端可以不开串口中断。
回复

使用道具 举报

ID:139514 发表于 2017-1-3 09:34 | 显示全部楼层
分和秒的產生是用發送端的TIMER0,晶振11.0592,發射端的TXD接腳用杜邦線接到
接收端的RXD街角,波特率我算過了正確無誤,板子是YL-39開發版,兩個開發版,只是
將發射端發射數字到接收端那裏顯示數字,請問C/T1是指發射端還是接收端??
謝謝你下面給我的意見,有些東西不需要我卻打上去,抱歉我是新手,感謝你給我的意見
回复

使用道具 举报

ID:613800 发表于 2019-9-25 10:12 | 显示全部楼层
很详细
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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