1樓:匿名使用者
問題出在你傳送時關掉中斷,因為丟掉了資料造成的,解決的辦法是:延時一段時間等待接收完畢後再傳送,比如檢測到有接收資料後,延時10毫秒,之後再傳送回pc。
2樓:掃地走人
給你指出幾處明顯的錯誤。
1.resv沒有最大值的限定,這樣你的程式在執行的時候ch[resv]會指向不明地址,因為ch最大為10個位元組。
2.某種程度上可以認為你的串列埠接收程式沒有錯誤,但是你的串列埠接收程式是每次接收到一個位元組就設定收到資料標誌的,所以你傳送資料應該每次傳送一個位元組。而你每次傳送一個字串,顯然和你微控制器上寫的程式不符,所以會產生不明錯誤。
3.可能你想要的是每次傳送多個位元組,也就是一個字串,然後將這個字串一起傳送到pc上。那你應該在串列埠中斷裡面設定一個判斷,也就是說,中斷裡面判斷到上位機傳送的資料結束後,微控制器的串列埠中斷程式才設定標誌位,然後根據標誌位和接收到資料到數量,把所有的資料一次性傳送給pc。
4.指出你出現異常的原因。因為串列埠在接收到1個位元組後,resv=1,也就是ch[1]='h',這個時候標誌位被設定,程式進入傳送程式,響應的sbuf=a,將h傳送出去。
因為51微控制器僅有一個串列埠快取暫存器,這樣傳送的時候是沒有辦法接收的,而pc機不知道,還是在傳送,也許這樣導致的錯誤。
3樓:匿名使用者
pc傳送是一個字串連續傳送的,微控制器在收到第一個字元時,就進入中斷,同時置標誌。
而你在主程式一檢測到標誌,立即關中斷,接收自然停止了。
解決方法:1. 要同時收發的話,可以直接在中斷內區分ti與ri,並寫sbuf = a;2. 完全接收後再一併傳送。
用微控制器串列埠向電腦串列埠除錯助手傳送一個字串,用c語言程式設計
4樓:計算機技術價值
#include
unsigned char flag,a;
void main()
*/if(flag==1)}}
void ser() interrupt 4把字元換一下就行了
5樓:匿名使用者
uchar idata systembuf[10]; //用於接收uchar rx=0; //接收資料條數
uchar code at="yes,it is";
void uart_init (void)void sendchar(uchar ch) //串列埠送一個位元組void sendstring(uchar *p) //送字串}///////
void receive(void) interrupt 4 using 1 //中斷
ri=0;}}
///void main()
rx=0;}}
}//////////如有小錯誤,自己調下,手打的,大小寫可能不正常,這是標準程式,直接用,
6樓:匿名使用者
要這個幹嘛? 不過倒是很簡單
微控制器與pc機rs232串列埠通訊,我的程式在虛擬串列埠下沒問題,一到物理串列埠下,串列埠除錯助手就顯示亂碼
7樓:匿名使用者
硬體只要3根線就可以,傳送,接收,地。注意傳送要接對方的接收。根據您提到的情況,可能是地線沒有接對。
8樓:匿名使用者
晶振或波特率設定不一致?
懂微控制器者進:pc機向微控制器串列埠通訊問題,如何通過串列埠助手傳送一連串數字給微控制器,如0x01,0x02,0x03等
9樓:匿名使用者
你是想問微控制器多位元組 接收程式怎麼寫吧
以51微控制器為例
51微控制器串列埠接收緩衝區只內有一個位元組,那麼我們容可以定義一個陣列做為接收緩衝區,每接收到一個位元組就把它儲存到陣列,通過時間間隔來檢測一幀資料是否發完,用定時器即可,在串列埠中斷裡 復位定時初值,當超過定時時間沒有接收到資料,則會觸發定時中斷,這時微控制器就可以處理接收到的資料了
10樓:萍水e相逢
串列埠助手?
你傳送 16進位制數吧
如果是 程式設計 如 vb 的話
定義 byte 型陣列內
賦值後 直接輸容出!
推薦看書
visual c++_turbo c串列埠通訊程式設計實踐visual_basic與_rs-232_序列通訊控制
11樓:匿名使用者
直接發就是了,串列埠的2、3、5,連線到微控制器對應的序列輸入收發口和地上,然後設定好波回特率,看你是答查詢還是中斷,把你的程式寫好了,然後發著試就行了,哦,你需要一個232的電平轉換晶片,具體的介面自己可以上ic37上找,要學會自己找資料啊
在除錯rs232串列埠通訊時,微控制器往pc機上發資料,串列埠除錯助手可以接收,但是pc往微控制器發資料,接收不到。
12樓:
先解釋一下現象:
(1)max232的12腳即r1out連線到了微控制器的rx腳,因此使用探頭碰max232的12引腳時匯入了干擾訊號,所以接收到了亂的資料。同時,也證明了微控制器的接收電路和程式都沒有問題。
(2)板子上的地接到示波器上的地,pc才能收到資料,說明微控制器與pc沒有共地。同時,也證明了微控制器的傳送電路、程式和pc的接收電路都沒有問題。
原理:(1)pc的串列埠即rs232有9個引腳,與微控制器通訊時用到三個引腳,依次是2腳rx、3腳tx、5腳訊號gnd。
(2)而微控制器串列埠與此相反,2腳tx、3腳rx、5腳訊號gnd。
(3)只要把這三根線依次連線,2-2、3-3、5-5即可完成通訊。
(4)同時,根據實際通訊裝置介面不同,串列埠線也分多種,如直連線、交叉線、公母頭區別等。
故障排除流程:
(1)用萬用表等測量max232的14腳t1out與開發板序列介面的2腳tx、max232的13腳r1in與開發板序列介面的3腳rx、開發板序列介面的5腳與電源地是不是分別連線。如果連線沒問題,則進行下一步。
(2)用萬用表等測量串列埠線,pc端的2腳與微控制器端的2腳、pc端的3腳與微控制器端的3腳、pc端的5腳與微控制器端的5腳是不是分別對應,如果對應連線沒問題,則進行下一步。
(3)將pc上序列介面的2、3引腳短接。
(5)如果收不到,則說明pc的串列埠問題(排除串列埠工具沒有開錯串列埠或短接沒問題的情況下),換臺電腦試下。能收到,則說明電腦端收發都沒問題,進行下一步。
(6)將串列埠線插到電腦上,開發板端的插頭不插而直接將2、3腳短接。再次用串列埠工具傳送,看是否能接收到,如果能接收到,則證明串列埠線沒問題,進行下一步。
(7)將串列埠線插到開發板得序列介面上,再使用串列埠工具收發。
(8)如果以上都不行,則自己做3根線,也可以使用杜邦線,將pc的tx與開發板的rx、pc的rx與開發板的tx、pc的訊號地與開發板的地分別相連。再用串列埠工具收發測試。
通過以上步驟,則可以逐步排查到問題的具體原因。不過,根據問題及之後的描述,最大的可能性是串列埠線用的不對,導致pc串列埠與開發板串列埠的3根線沒有分別對應上。
13樓:
如果用的是51微控制器,除了確認電纜沒問題外,
可以查一下又沒有可能不小心把對應rxd的sfr給賦值0了,查這個不一定要看程式,可以拔掉微控制器晶片看串列埠上接收引腳波形,不好拔的話,按住微控制器復位開關不鬆手也許也可以。
14樓:匿名使用者
微控制器往pc上能發說明串列埠本身應該沒有問題:如果是你自己做的板子最好檢視一下微控制器接收那一路是否有虛焊或有短路情況(直接使用現成的開發板無視)。
然後仔細檢視下程式是否有問題,再在程式中下斷點,就下在接收到資料的下一條**。然後發資料,如果斷住說明資料收到了,是後面處理點亮led的**的問題。如果沒有那就是沒接收到。
還沒有就再使用示波器,示波器要設定成低電平觸發模式,微控制器的串列埠(tx,rx)平時都是高電平,起始位是低電平,後面就是你設定的資料位(7位或8位),還有停止和校驗位根據你設定的情況。資料傳送都是瞬間完成的,所以一定要使用觸發模式,如果捕捉不到,說明pc端的傳送有問題,可以換個串列埠除錯工具,還不行換跟串列埠線,再不行換臺電腦。一般到此問題肯定能解決了啊(除非中途有操作失誤的情況)
另外,一般使用串列埠還是使用中斷模式,可以節省系統資源,降低功耗!
15樓:
步驟一,串列埠除錯可以對你的微控制器
傳送嗎?如果可以,那就是你pc程式問題,如果不可以,那就是你微控制器問題,但是也可能是步驟二問題。
步驟二:傳送資料不對,一般常見的,比如16進位制傳送?還是acsii傳送?
步驟三:學會使用“串列埠監視”的小工具,監視資料包是否遵循協議。
步驟四:看你pc程式吧。用串列埠監視工具可以發現,可能你的pc程式都沒有包出來。
16樓:
1、微控制器串列埠控制在scon裡有個ren暫存器設定正確嗎?接收允許標誌。
2、串列埠中斷開了嗎?即使是查詢方式也要有ri狀態可以查詢才能接收。
3、微控制器串列埠接收最好還是用中斷方式,方便的多void isr_serial(void) interrupt 4sbuf= i; // echo
while(!ti);
ti = 0;}
微控制器串列埠通訊問題,51微控制器串列埠通訊問題
修者世界 p3 0xff的作用其實很簡單,就是為了更好的完成 讀 修改 寫 這個過程,其實對於p3口是沒有必要的,對於p0口這樣做是應該的。 革玉花戚雪 微控制器串列埠通訊的問題,其實你只有乙個問題,就是 p0 0xf0 s2buf 0xfc p0 s2buf 為什麼這裡p0是0x00 你覺得p0應...
PC機與微控制器之間的串列埠通訊的程式
文庫精選 內容來自使用者 xy鴨頭丫頭 include define uchar unsigned charvoid main include define uchar unsigned charsbit sda p2 1 sbit clock p2 0 uchar recive void disp...
5V微控制器與3 3V微控制器串列埠通訊問題
yesyes科 5v微控制器與3.3v微控制器串列埠不能通訊,是設定錯誤造成的,解決方法如下 1 首先51微控制器的可用記憶體只有00h 7fh,堆疊指標設定在60h,則堆疊的大小就是60h 7fh。這算是有規定大小的。2 堆疊主要是為子程式呼叫和中斷操作而設立的,因此對應有兩項功能 保護斷點和保護...