音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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 欄目:單片機
功能強大的串口發(fā)送接收程序模塊---2005-11-24調(diào)試完成
/************************************************************************
;*  公 司:  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
功能強大的串口發(fā)送接收程序模塊---2005-11-24調(diào)試完成
...

* - 本貼最后修改時間:2005-11-26 11:20:32 修改者:liyaofeng

3樓: >>參與討論
zheng8648
hao!
 
4樓: >>參與討論
zhouyh
很好,有時間看看
 
5樓: >>參與討論
junior3
thank u ,i will read it carfully!
 
6樓: >>參與討論
ketp
還是謙虛點
說實話,寫得不怎么樣

7樓: >>參與討論
dorbin2001
至少格式很好
 
8樓: >>參與討論
sflfw
ICC 的?
功能強大 而且 省空間否??
一個字節(jié)只要用一句
   UDR=DATA;
或 data=UDR;
不用的都省了吧。

9樓: >>參與討論
xiaobu
很不錯啊
很不錯啊,我是用單片機一年后,才知道這樣編程的好處

10樓: >>參與討論
ap9805411
算不上功能強大吧!
    接收超時判斷也沒有;發(fā)送緩沖沒必要,浪費資源;另程序很多地方?jīng)]精簡。實用性有限!建設(shè)別用什么“功能強大”的字眼,顯得樓主太過自以為是!
    不過編程風格還不錯。

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
求助: AVR中USI與SPI接口串行通訊編程例程
長者給我一點幫助
關(guān)于設(shè)計48*16漢字顯示屏的問題
M162 UART問題
究竟是AVR的問題還是GCC的問題?或者是我的問題?
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號