Re: [問題] 8051序列阜傳送與接收
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):