|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
功能強大的串口發(fā)送接收程序模塊---2005-11-24調(diào)試完成 |
| 作者:liyaofeng 欄目:單片機 |
/************************************************************************ ;* 公 司: xx ;* 模 塊: serial.c ;* 功 能: 串口中斷服務(wù)程序,僅需做簡單調(diào)用即可完成串口輸入輸出的處理; ;* 出入均設(shè)有緩沖區(qū),大小可任意設(shè)置 ;* 芯 片: AMEGA16 ;* 說 明: 未利用串口發(fā)送硬件BUFF ;* 設(shè) 計: 李耀峰 ;* 時 間: 2005-11-24 ;* 版 本: V1.0 ;* 記 錄: ;************************************************************************/ /************************************************************************ 可供使用的函數(shù)名: extern void PutByte(byte c); //放入一個字節(jié)到發(fā)送緩沖區(qū) extern void PutString(byte *puts); //發(fā)送一個定義在程序存儲區(qū)的字符串到串口 extern void PutBytes(byte *outplace,byte j); //發(fā)送一串數(shù)據(jù) extern void PutHEX(byte c); //發(fā)送一個字節(jié)的hex碼,分成兩個字節(jié)發(fā) extern byte GetByte (void); //從接收緩沖區(qū)取一個byte extern void SerialInit (word baud); //串口初始化 extern byte inbufsign; //接收緩沖區(qū)數(shù)據(jù),有數(shù)據(jù)=1。 #define CR PutString("\r\n") //發(fā)送一個回車換行 #define NUL putstring("\0") //發(fā)送一個空格 *************************************************************************/ #include <iom16V.h> #include <macros.h> #define byte unsigned CHAR #define word unsigned int #define OLEN 20 //串口發(fā)送緩沖大小 #define ILEN 20 //串口接收緩沖大小 byte outbuf[OLEN]; //發(fā)送緩沖 byte inbuf[ILEN]; //接收數(shù)據(jù)緩沖 byte *outlast=outbuf; //最后由中斷傳輸出去的字節(jié)位置 byte *putlast=outbuf; //最后放入發(fā)送緩沖區(qū)的字節(jié)位置 byte *inlast=inbuf; //最后接收到接收緩沖區(qū)的字節(jié)位置 byte *getlast=inbuf; //最后從發(fā)送緩沖區(qū)取走的字節(jié)位置 struct data //位定義 { unsigned bit0:1; unsigned bit1:1; unsigned bit2:1; unsigned bit3:1; unsigned bit4:1; unsigned bit5:1; unsigned bit6:1; unsigned bit7:1; }bit_flag; #define outbufsign0 bit_flag.bit0 //緩沖區(qū)數(shù)據(jù)發(fā)完標志 發(fā)完=0 #define outbufsign bit_flag.bit1 //發(fā)送緩沖區(qū)非空標志 有=1 #define inbufful bit_flag.bit2 //接收緩沖區(qū)滿標志 滿=1 //#define inbufsign bit_flag.bit3 //接收緩沖區(qū)非空標志 有=1 //byte outbufsign0; //緩沖區(qū)數(shù)據(jù)發(fā)完標志 發(fā)完=0 //byte outbufsign; //發(fā)送緩沖區(qū)非空標志 有=1 //byte inbufful; //接收緩沖區(qū)滿標志 滿=1 byte inbufsign; //接收緩沖區(qū)非空標志 有=1 #define CR PutString("\r\n") //CR=回車換行 #define SPACE PutByte(0x20) //發(fā)送一個空格。 #pragma interrupt_handler SerialIncept_handler:12 //串口接收中斷函數(shù) #pragma interrupt_handler SerialSend_handler:14 //串口發(fā)送中斷函數(shù) //********************************************************************** //函 數(shù) 名: void PutByte(byte c) //功 能: 放入一個字節(jié)到發(fā)送緩沖區(qū) //說 明: //參 數(shù): //返 回 值: //示 范: PutByte(0x00); //*********************************************************************** void PutByte(byte c) { CLI(); //暫停串行中斷,以免數(shù)據(jù)比較時出錯 while((((outlast-putlast)==2)&&(outlast > putlast ))||((outlast < putlast)&&(OLEN-(putlast-outlast)==2))) { SEI(); c++;c--; CLI(); } *putlast=c; //放字節(jié)進入緩沖區(qū) putlast++; //發(fā)送緩沖區(qū)指針加1 if (putlast==outbuf+OLEN) putlast=outbuf; //指針到了頂部換到底部 outbufsign=1; if (!outbufsign0) //緩沖區(qū)無數(shù)據(jù) { outbufsign0=1; UDR=*outlast; //未發(fā)送完繼續(xù)發(fā)送 outlast++; &nbs |
| 2樓: | >>參與討論 |
| 作者: liyaofeng 于 2005/11/26 11:17:00 發(fā)布:
功能強大的串口發(fā)送接收程序模塊---2005-11-24調(diào)試完成 ... * - 本貼最后修改時間:2005-11-26 11:20:32 修改者:liyaofeng |
|
| 3樓: | >>參與討論 |
| 作者: zheng8648 于 2005/11/27 10:37:00 發(fā)布:
hao! |
|
| 4樓: | >>參與討論 |
| 作者: zhouyh 于 2005/11/27 14:03:00 發(fā)布:
很好,有時間看看 |
|
| 5樓: | >>參與討論 |
| 作者: junior3 于 2005/12/1 21:46:00 發(fā)布:
thank u ,i will read it carfully! |
|
| 6樓: | >>參與討論 |
| 作者: ketp 于 2005/12/1 22:18:00 發(fā)布:
還是謙虛點 說實話,寫得不怎么樣 |
|
| 7樓: | >>參與討論 |
| 作者: dorbin2001 于 2005/12/3 0:15:00 發(fā)布:
至少格式很好 |
|
| 8樓: | >>參與討論 |
| 作者: sflfw 于 2005/12/3 10:14:00 發(fā)布:
ICC 的? 功能強大 而且 省空間否?? 一個字節(jié)只要用一句 UDR=DATA; 或 data=UDR; 不用的都省了吧。 |
|
| 9樓: | >>參與討論 |
| 作者: xiaobu 于 2005/12/3 17:29:00 發(fā)布:
很不錯啊 很不錯啊,我是用單片機一年后,才知道這樣編程的好處 |
|
| 10樓: | >>參與討論 |
| 作者: ap9805411 于 2005/12/5 10:07:00 發(fā)布:
算不上功能強大吧! 接收超時判斷也沒有;發(fā)送緩沖沒必要,浪費資源;另程序很多地方?jīng)]精簡。實用性有限!建設(shè)別用什么“功能強大”的字眼,顯得樓主太過自以為是! 不過編程風格還不錯。 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |