久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2092|回復: 10
打印 上一主題 下一主題
收起左側

單片機匯編語言想要串口發送一組數據虛擬串口測試串口在不停的發送數據類似死循...

[復制鏈接]
跳轉到指定樓層
樓主
ID:691738 發表于 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;


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:235200 發表于 2020-2-17 11:08 | 只看該作者
沒有把程序的初始化和主循環程序分開,設置了串行中斷而未用中斷方式接收數據
回復

使用道具 舉報

板凳
ID:235200 發表于 2020-2-17 11:20 | 只看該作者
ReceiveOneByte函數和SendOneByte函數不是中斷服務程序,怎能返回用RETI
CHU初始化函數返回也用RETI是嚴重錯誤
接收函數中用到LCALL DELAY100MS;這個延時
結論:程序邏輯思維不清,沒有把中斷概念理解透切
回復

使用道具 舉報

地板
ID:691738 發表于 2020-2-17 12:23 | 只看該作者
先謝謝您幫我找錯,我還是不太明白,接收是是按照發送的寫的,不是中斷方式嗎?我也不太明白中斷查詢的區別,小白一個,還有程序初始化和主循環具體在哪分開呢?能詳細點嗎?謝謝您 感謝
回復

使用道具 舉報

5#
ID:691738 發表于 2020-2-17 12:28 | 只看該作者
先謝謝您幫我找錯,我還是不太明白,接收是是按照發送的寫的,不是中斷方式嗎?我也不太明白中斷查詢的區別,小白一個,還有程序初始化和主循環具體在哪分開呢?能詳細點嗎?謝謝您 感謝
回復

使用道具 舉報

6#
ID:235200 發表于 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;
回復

使用道具 舉報

7#
ID:691738 發表于 2020-2-17 14:24 | 只看該作者
感謝,非常感謝,很詳細,學習了,再次感謝您
回復

使用道具 舉報

8#
ID:691738 發表于 2020-2-17 16:42 | 只看該作者
你好,我還有一個問題,怎么定義236個字節的數據呢,我試了一下只能定義100個字節,多了就報錯,語法錯誤,應該怎么定義呢?謝謝
回復

使用道具 舉報

9#
ID:235200 發表于 2020-2-17 18:52 | 只看該作者
這樣定義:
BUF1:  DB 01H,02H,……
           DB 01H,02H,……
           DB 01H,02H,……
            DB 01H,02H,……
但要注意取數據的方式,一般采用MOVC  A,@A+DPTR 命令最多只能取255個,但定義不受限制
回復

使用道具 舉報

10#
ID:691738 發表于 2020-2-17 21:15 | 只看該作者
好的 明白了 感謝您 學到了很多
回復

使用道具 舉報

11#
ID:691738 發表于 2020-2-19 16:01 | 只看該作者
你好,現在好像又遇到了新的問題,用proteus和串口助手進行仿真,數據可以正常發送執行,燒錄到單片機不行了,單片機型號是stc89C52rc,晶振是11.0592MHz,現在現象是用串口助手給單片機發送數據,單片機沒反應,更改其它波特率,有時會動作一下,外接的繼電器,已經折騰了一天了,不知道該怎么辦,希望您再給指點指點,謝謝
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕一区在线观看视频 | 日日摸夜夜添夜夜添特色大片 | 国产福利视频 | 亚州成人 | 久久久91精品国产一区二区三区 | 91麻豆精品国产91久久久久久 | 欧美 日韩 综合 | 羞羞视频在线观看网站 | 国产高清精品一区二区三区 | 国产精品网址 | 国产成在线观看免费视频 | 欧美精品久久久 | 久久精品小短片 | 少妇黄色 | 欧美日韩在线看 | 久久久久资源 | 综合五月 | 户外露出一区二区三区 | 亚洲精品成人在线 | 在线观看特色大片免费网站 | 中文字幕国产在线 | 国产成人精品亚洲日本在线观看 | 久久精品亚洲精品国产欧美 | 国产一二区视频 | 国产盗摄视频 | 亚洲精品免费在线观看 | 欧美午夜一区 | 国产欧美日韩精品一区二区三区 | 欧美日韩精品影院 | 免费国产一区 | 国产成人精品久久二区二区 | 久www | 国产乱码精品一区二区三区中文 | 国产精品国产馆在线真实露脸 | 真人女人一级毛片免费播放 | 啪啪精品| 亚洲欧洲一区 | 日韩中文字幕区 | 久久毛片 | 国产精品视频在线播放 | 九九久久久|