[問題] 8051序列阜傳送與接收

看板Electronics作者 (handy)時間18年前 (2007/05/31 21:15), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/3 (看更多)
功能: start(int0):傳送10+2使七段顯示器顯示12 stop(int1):傳送02使七段顯示器顯示02 可是按下start卻顯示10也就是十位數(R4)會蓋掉個位數(R3)不是相加 想了很久還有找不到錯誤 各位前輩可以給個方向嗎?感謝! ORG 00H JMP START ORG 03H JMP INT0 ORG 13H JMP INT1 ORG 23H JMP UARTINT START: MOV TMOD,#00100000B MODE2 TIMER1 MOV TH1,#1DH 採用模式1,鮑率設定為137.6Hz MOV TL1,#1DH 所以TH1求出為30 SETB TR1 SETB IT0 ANL PCON,#01111111B SMOD=0 採用單倍鮑率 MOV SCON,#01010000B 採用模式1 致能REN MOV IE,#10010101B 致能串列 中斷 外部中斷0,1 MOV R2,#00000010B 一開始顯示自己組別(02) MOV R3,#00000010B 組別個位數(02) MOV R4,#00010000B 組別十位數(10) MOV P0,R2 CLR F0 設定旗標,用以判斷是否接收 第2筆資料 LOOP: JMP LOOP 等待中斷 INT0: MOV A,R3 開始傳送自己組別資料 MOV SBUF,A 傳送個位數 MOV R5,#1 CALL DELAY 採用DELAY延時5.73毫秒, 使傳送能順利傳完而產生傳送 中斷而接下來產生接收中斷 TRANS: MOV A,R4 MOV SBUF,A 傳送十位數 SETB F0 設定旗標為1,使其可接收第2筆 MOV R5,#1 CALL DELAY 同前面DELAY之敘述 UARTINT: JB RI,RECEIVE 判斷是為接收或傳送中斷 CLR TI 若是傳送中斷則清除TI使得可傳第2筆 RETI RECEIVE: CLR RI 清除RI使得可接收第2筆 JB F0,RECE 若F0=1 則接收第2筆 MOV A,SBUF 接收第一筆個位數 MOV R1,A 接其放置R1暫存 RETI RECE: MOV A,SBUF 接收第2筆十位數 ORL A,R1 將個位數與十位數串在一起 MOV P0,A 顯示在7節顯示器上 RETI DELAY: MOV R7,#20 延時副程式 延時5.73毫秒 D1: MOV R6,#144 DJNZ R6,$ DJNZ R7,D1 DJNZ R5,DELAY RET INT1: MOV A,R2 STOP 使其顯示原本組別資料 MOV P0,A RETI END -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.13.136.217

05/31 21:15, , 1F
以上為自傳自接的情況下
05/31 21:15, 1F

06/03 08:05, , 2F
建議使用C語言寫51程式,節省時間,並簡潔易懂。
06/03 08:05, 2F
文章代碼(AID): #16NifXmd (Electronics)
文章代碼(AID): #16NifXmd (Electronics)