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

看板Electronics作者 (..........)時間18年前 (2007/06/01 08:55), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《handy012 (handy)》之銘言: : 功能: : 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毫秒, : 使傳送能順利傳完而產生傳送 : 中斷而接下來產生接收中斷 這行接下來是否要就要判斷接收完畢? 接收完成後 mov a,subf 再存至R1 : 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 你的R4十位數會蓋掉R3我想是因為在傳R3後沒有存下來就馬上傳R4了 最後只有存到R4,所以才有這樣的現象 試試看R3傳完後就要判斷是否傳送完畢然後存至R1低四位元 接著再傳R4,接收完畢後存至R1高四位元 R1的高低四位元存完才可以RETI -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.23.155.69
文章代碼(AID): #16Nsvjk5 (Electronics)
文章代碼(AID): #16Nsvjk5 (Electronics)