1樓:匿名使用者
你主程式這麼寫,傳送一個字元後,微控制器並不停止。應該加一行無限迴圈語句,
while(1);才能停,如下
2樓:草原上之狼
#include
#include
unsigned char ch;
bit read_flag= 0 ;
void init_serialcom( void ) //串列埠通訊初始設定
//向串列埠傳送一個字元
void send_char_com( unsigned char ch)
//串列埠接收中斷函式
void serial () interrupt 4 using 3}main()}}
3樓:匿名使用者
程式沒有停止,執行一次後會自動從頭開始
在程式末尾加while(1);即可
4樓:匿名使用者
主函式在 zf(『2』);後要加一條語句:
while(1);
51微控制器串列埠接收多字元並存入陣列的程式
5樓:匿名使用者
你這串列埠bai接收子程式,只要接du收到第一個位元組的zhi資料就dao一直在中斷子程式中,然後專等待接收其它數屬據了,
while(!ri); 這就是在等待接收其它資料了,接收完了以後又在中斷子程式連續傳送了。這麼寫程式是有很大弊病的,一旦進入中斷程式,到最後傳送結束,都一直在中斷子程式中,那這個期間微控制器是不能再做其它工作的,也就是不能再執行主程式了。
while(!ri);這就是查詢方式等待接收資料,那又何必寫成中斷程式呢,不如直接寫成查詢程式了,同樣下面的, while(!ti);這也明明是在查詢方式傳送,就不必要寫在中斷程式中了。
既然採用中斷的方式,就是當接收到一個資料後才響應一次中斷,儲存這個資料,然後就立即從中斷返回,這樣,繼續執行主程式,這樣,接收資料和傳送資料才不影響主程式。
同理,在中斷程式傳送一個位元組的資料就立即從中斷返回執行主程式,也不影響主程式的執行。
另外,更重要的一點就是while(!ri);,等待接收資料,如果不能收到資料就永遠等待下去,假如通訊線有故障,或者傳送方有問題,不能傳送資料了,那麼將永遠等待下去,這就相當於宕機了,多可怕,寫程式就怕這個事情發生的。
6樓:匿名使用者
每接收到一個資料就判斷資料的合法性,功能,再存到陣列裡,沒收一個還要判斷是不是一幀資料什麼的、、、、、
7樓:微控制器的戰鬥機
有qq嗎?發過來,我為你解答
請問51微控制器與51微控制器之間的串列埠通訊程式怎麼寫?
8樓:匿名使用者
1、查詢方式:
#include
main()
sbuf=dat;//傳送
while(!ti);
ti=0;}}
2、中斷方式:
#include
unsigned char dat;
bit flag;
void uart_isr() interrupt 4if(ti)ti=0;
}main()}}
9樓:走在時間的前頭
就是一個雙機通訊而已嘛,簡單的串列埠通訊,我這裡有一些資料,需要可以來找我。
10樓:做而論道
參考
11樓:匿名使用者
太簡單,找個例程,看看!太多了!一搜一堆
12樓:匿名使用者
給個郵箱,發給你一個**和**,你參考一下
51微控制器,通過串列埠助手向微控制器傳送字串,微控制器將字串逆序傳送回計算機,用C語言程式設計
電腦通過串列埠助手向微控制器傳送字串,微控制器定義一個可以儲存7個字元的陣列,依次儲存接收的字串,當接收到7個字串後,就可以從陣列的最後一個字元向前傳送每一個字元給電腦就可以了。剩下的就是串列埠初始化,串列埠接收和傳送程式了,就比較好寫了。其實,電腦傳送任意的7個字元的字串都可以,微控制器收到後就可...
C51微控制器能與串列埠裝置通訊嗎,C51微控制器能與3個串列埠裝置通訊嗎
當然可以啦 來,三個自串列埠通訊裝置要連在同一條總 線上,如usart spi i2c匯流排上,51微控制器傳送的每一串訊號都帶有地址資訊,當發出的地址資訊與這三個串列埠通訊裝置的某一個地址相同時,微控制器就可以這個通訊裝置通訊了,其他的就處於休眠狀態。能呀!bai串列埠通訊中,有一種模式是多du機...
51微控制器,串列埠通訊一般接受資料,用串列埠中斷,傳送資料用查詢就行了
bit busy 0 unsigned char i void com isr void interrupt 4if ti 我在定時zhi器中dao斷裡面把ti置1,但是不行。main void com isr void interrupt 4 主函授中要加一句sbuf ldata 你串列埠初始化程...