欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機匯編語言想要串口發送一組數據虛擬串口測試串口在不停的發送數據類似死循...
[打印本頁]
作者:
liuxiansheng.
時間:
2020-2-16 21:40
標題:
單片機匯編語言想要串口發送一組數據虛擬串口測試串口在不停的發送數據類似死循...
用模擬串口測試的時候,本來是想的是發送一次自定義的這組數據然而測試卻一直發送自定義的這組數據,我實在是找不出錯誤了,希望各位大神幫幫忙,謝謝。我是小白,可能寫的有點亂,有點啰嗦,謝謝大家了。
ORG 0000H; LJMP MAIN;
ORG 0050H;
MAIN:
MOV A,#0FFH;
MOV R2,#0FFH;
MOV SP,#80H;
LCALL CHU;
LCALL ReceiveOneByte;
PANDUAN:
CJNE R2,#0FEH,L1; 繼電器控制
CLR P2.0;
L1:CJNE R2,#0FDH,L2;
SETB P2.0;
L2: CJNE R2,#0FCH,L3;
CLR P2.1;
L3:CJNE R2,#0FBH,L4;
SETB P2.1;
L4:CJNE R2,#0FAH,L5;
CLR P2.2;
L5:CJNE R2,#0F9H,L6;
SETB P2.2;
L6:CJNE R2,#0F8H,L7;
CLR P2.3;
L7:CJNE R2,#0F7H,L8;
SETB P2.3;
L8:CJNE R2,#0F6H,L9;
CLR P2.4;
L9:CJNE R2,#0F5H,L10;
SETB P2.4;
L10:CJNE R2,#0F4H,L11;
CLR P2.5;
L11:CJNE R2,#0F3H,L12;
SETB P2.5;
L12:CJNE R2,#0F2H,L13;
CLR P2.6;
L13:CJNE R2,#0F1H,L14;
SETB P2.6;
L14:CJNE R2,#0F0H,L15;
CLR P2.7;
L15:CJNE R2,#0EFH,L16;
SETB P2.7; 繼電器控制結束
L16:CJNE R2,#0FEH,L17; 數據控制
MOV R2,#00H;
MOV DPTR,#BUF1;
LCALL LOOP;
LJMP MAIN;
L17:CJNE R2,#0EDH,MAIN;
MOV R2,#00H;
MOV DPTR,#BUF2;
LCALL LOOP;
LJMP MAIN;
RET;
LOOP:
MOV R0,#03H; 定義發送數量
MOV R3,#00H;
LM:
MOV A,R3;
MOVC A,@A+DPTR;
LCALL SendOneByte;
INC R3;
DJNZ R0,LM;
RET;
SendOneByte:
CLR ES;
發送數據
CLR TI;
MOV SBUF,A;
WAIT:
JNB TI,WAIT;
發送等待
CLR TI;
SETB ES;
RETI;
CHU:
MOV TMOD,#20H;
串口初始化(勿動) MOV SCON,#50H;
MOV TH1,#0FDH;
MOV TL1,#0FDH;
MOV PCON,#00H;
SETB EA;
SETB ES;
SETB TR1;
RETI;
ReceiveOneByte:
CLR RI;
接收數據
PUSH ACC;
MOV A,SBUF;
MOV R2,A;
LCALL DELAY100MS;
LCALL PANDUAN;
MOV R2,#00H;
POP ACC;
WAIT1:
JNB RI,WAIT1;
CLR RI;
RETI;
DELAY100MS:
MOV R7,#23H;
DL1: MOV R6,#0AH;
DL0: MOV R5,#82H;
DJNZ R5,$;
DJNZ R6,DL0;
DJNZ R7,DL1;
RET;BUF1: DB 01H,02H,03H;
定義數據段BUF2: DB 0FDH,0FDH;
END;
作者:
csmyldl
時間:
2020-2-17 11:08
沒有把程序的初始化和主循環程序分開,設置了串行中斷而未用中斷方式接收數據
作者:
csmyldl
時間:
2020-2-17 11:20
ReceiveOneByte函數和SendOneByte函數不是中斷服務程序,怎能返回用RETI
CHU初始化函數返回也用RETI是嚴重錯誤
接收函數中用到LCALL DELAY100MS;這個延時
結論:程序邏輯思維不清,沒有把中斷概念理解透切
作者:
liuxiansheng.
時間:
2020-2-17 12:23
先謝謝您幫我找錯,我還是不太明白,接收是是按照發送的寫的,不是中斷方式嗎?我也不太明白中斷查詢的區別
,小白一個,還有程序初始化和主循環具體在哪分開呢?能詳細點嗎?謝謝您 感謝
作者:
liuxiansheng.
時間:
2020-2-17 12:28
先謝謝您幫我找錯,我還是不太明白,接收是是按照發送的寫的,不是中斷方式嗎?我也不太明白中斷查詢的區別
,小白一個,還有程序初始化和主循環具體在哪分開呢?能詳細點嗎?謝謝您 感謝
作者:
csmyldl
時間:
2020-2-17 13:01
ORG 0000H;
LJMP MAIN;
ORG 0023H ;如果采用中斷,要設置中斷入口
LJMP ReceiveOneByte ;有接收數據就執行
ORG 0050H;
MAIN:
MOV A,#0FFH;
MOV R2,#0FFH;
MOV SP,#80H;
LCALL CHU ;這是串口初始化程序,運行只要一次
;以下是主循環
PANDUAN: ;所以主程序要轉移到這地方
CJNE R2,#0FEH,L1; 繼電器控制
CLR P2.0;
L1:CJNE R2,#0FDH,L2;
SETB P2.0;
L2: CJNE R2,#0FCH,L3;
CLR P2.1;
L3:CJNE R2,#0FBH,L4;
SETB P2.1;
L4:CJNE R2,#0FAH,L5;
CLR P2.2;
L5:CJNE R2,#0F9H,L6;
SETB P2.2;
L6:CJNE R2,#0F8H,L7;
CLR P2.3;
L7:CJNE R2,#0F7H,L8;
SETB P2.3;
L8:CJNE R2,#0F6H,L9;
CLR P2.4;
L9:CJNE R2,#0F5H,L10;
SETB P2.4;
L10:CJNE R2,#0F4H,L11;
CLR P2.5;
L11:CJNE R2,#0F3H,L12;
SETB P2.5;
L12:CJNE R2,#0F2H,L13;
CLR P2.6;
L13:CJNE R2,#0F1H,L14;
SETB P2.6;
L14:CJNE R2,#0F0H,L15;
CLR P2.7;
L15:CJNE R2,#0EFH,L16;
SETB P2.7; 繼電器控制結束
L16:CJNE R2,#0FEH,L17; 數據控制
MOV R2,#00H;
MOV DPTR,#BUF1;
LCALL LOOP;
LJMP PANDUAN ;此處是主循環返回
L17:CJNE R2,#0EDH,MAIN;
MOV R2,#00H;
MOV DPTR,#BUF2;
LCALL LOOP;
LJMP PANDUAN ;此處是主循環返回
RET;
LOOP:
MOV R0,#03H; 定義發送數量
MOV R3,#00H;
LM:
MOV A,R3;
MOVC A,@A+DPTR;
LCALL SendOneByte; 這是發送已知的3個字節
INC R3;
DJNZ R0,LM;
RET;
SendOneByte: ;這個發送程序可以不用中斷
CLR ES; 發送數據
CLR TI;
MOV SBUF,A;
WAIT:
JNB TI,WAIT; 發送等待
CLR TI;
SETB ES;
RETI; ;如果不用中斷就要改為RET
CHU:
MOV TMOD,#20H; 串口初始化(勿動)
MOV SCON,#50H;
MOV TH1,#0FDH;
MOV TL1,#0FDH;
MOV PCON,#00H;
SETB EA; 允許中斷
SETB ES;
SETB TR1;
RETI; ;此處要改為RET
ReceiveOneByte:
CLR RI; 接收數據
PUSH ACC;
MOV A,SBUF;
MOV R2,A; 接收數據存入R2就可以了,主程序不斷判斷R2中的數據
;LCALL DELAY100MS; ;以下幾行不要了
;LCALL PANDUAN;
;MOV R2,#00H;
POP ACC;
;WAIT1: ;這幾行判斷是否接收完,中斷方式不要,查詢方式也要放在前面
;JNB RI,WAIT1;
;CLR RI;
RETI;
DELAY100MS:
MOV R7,#23H;
DL1: MOV R6,#0AH;
DL0: MOV R5,#82H;
DJNZ R5,$;
DJNZ R6,DL0;
DJNZ R7,DL1;
RET;
BUF1: DB 01H,02H,03H; 定義數據段
BUF2: DB 0FDH,0FDH;
END;
作者:
liuxiansheng.
時間:
2020-2-17 14:24
感謝,非常感謝,很詳細,學習了,再次感謝您
作者:
liuxiansheng.
時間:
2020-2-17 16:42
你好,我還有一個問題,怎么定義236個字節的數據呢,我試了一下只能定義100個字節,多了就報錯,語法錯誤,應該怎么定義呢?謝謝
作者:
csmyldl
時間:
2020-2-17 18:52
這樣定義:
BUF1: DB 01H,02H,……
DB 01H,02H,……
DB 01H,02H,……
DB 01H,02H,……
但要注意取數據的方式,一般采用MOVC A,@A+DPTR 命令最多只能取255個,但定義不受限制
作者:
liuxiansheng.
時間:
2020-2-17 21:15
好的 明白了 感謝您 學到了很多
作者:
liuxiansheng.
時間:
2020-2-19 16:01
你好,現在好像又遇到了新的問題,用proteus和串口助手進行仿真,數據可以正常發送執行,燒錄到單片機不行了,單片機型號是stc89C52rc,晶振是11.0592MHz,現在現象是用串口助手給單片機發送數據,單片機沒反應,更改其它波特率,有時會動作一下,外接的繼電器,已經折騰了一天了,不知道該怎么辦,希望您再給指點指點,謝謝
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1