?? serial_int_函數集.c
字號:
//本函數集來自“51單片機世界”,作者斑竹丁丁(聶小猛)。
//主頁地址http://www.mcu51.com
//串口中斷服務程序,僅需做簡單調用即可完成串口輸入輸出的處理
//出入均設有緩沖區,大小可任意設置。
//可供使用的函數名:
//char getbyte(void);從接收緩沖區取一個byte,如不想等待則在調用前檢測inbufsign是否為1。
//getline(char idata *line, unsigned char n); 獲取一行數據回車結束,必須定義最大輸入字符數
//putbyte(char c);放入一個字節到發送緩沖區
//putbytes(unsigned char *outplace,j);放一串數據到發送緩沖區,自定義長度
//putstring(unsigned char code *puts);發送一個定義在程序存儲區的字符串到串口
//puthex(unsigned char c);發送一個字節的hex碼,分成兩個字節發。
//putchar(uchar c,uchar j);輸出一個無符號字符數的十進制表示,必須標示小數點的位置,自動刪除前面無用的零
//putint(uint ui,uchar j);輸出一個無符號整型數的十進制表示,必須標示小數點的位置,自動刪除前面無用的零
//delay(unsigned char d); 延時n x 100ns
//putinbuf(uchar c);人工輸入一個字符到輸入緩沖區
//CR;發送一個回車換行
//*************************************************************************
#include <w77e58.h>
#define uchar unsigned char
#define uint unsigned int
#define OLEN 32 /* size of serial transmission buffer */
idata unsigned char outbuf[OLEN]; /* storage for transmission buffer */
unsigned char idata *outlast=outbuf; //最后由中斷傳輸出去的字節位置
unsigned char idata *putlast=outbuf; //最后放入發送緩沖區的字節位置
#define ILEN 12 /* size of serial receiving buffer */
idata unsigned char inbuf[ILEN];
unsigned char idata *inlast=inbuf; //最后由中斷進入接收緩沖區的字節位置
unsigned char idata *getlast=inbuf; //最后取走的字節位置
bit outbufsign0; //最后一個數據覵BUF發完標志 發完=0
bit outbufsign; //輸出緩沖區非空標志 有=1
bit inbufsign; //接收緩沖區非空標志 有=1
bit inbufful; //輸入緩沖區滿標志 滿=1
#define CR putstring("\r\n") //CR=回車換行
//*****************************
//延時n x 100ns
void delay(unsigned char d) //在源程序開頭定義是否用w77e58或22。1184M晶振
{unsigned char j;
do{ d--;
//110592 & 89c52
#ifndef cpuw77e58
#ifndef xtal221184
j=21; //k=38 cpu80320 100us k=21 cpu 8052
#else
j=42;
#endif
#else
#ifndef xtal221184
j=38;
#else
j=76;
#endif
#endif
do {j--;} while(j!=0);
}while(d!=0);
}
//*****************************
//放入一個字節到發送緩沖區
putbyte(char c)
{uchar i,j;
ES=0; /*暫停串行中斷,以免數據比較時出錯
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -