|
#include "uart.h"
unsigned char ostart;
unsigned char oend;
char idata outbuf[OLEN];
unsigned char istart;
unsigned char iend;
char idata inbuf[ILEN];
bit bdata sendfull;
bit bdata sendactive;
/*串行中斷服務(wù)程序*/
static void com_isr(void) interrupt 4 using 1 //串口中斷
{
//-------------接收數(shù)據(jù)中斷--------------
char c;
if(RI)
{
c=SBUF;
RI=0;
if(istart+ILEN!=iend)
{
inbuf[iend++&(ILEN-1)]=c;
}
}
//-------------發(fā)送數(shù)據(jù)中斷--------------
if(TI)
{
TI=0;
if(ostart!=oend)
{
SBUF=outbuf[ostart++&(OLEN-1)];
sendfull=0;
}
else
{
sendactive=0;
}
}
}
//PUTBUF: 寫字符到SBUF或發(fā)送緩沖區(qū)
void putbuf(char c)
{
if(!sendfull)
{
if(!sendactive)
{
sendactive=1;
SBUF=c;
}
else
{
ES=0;
outbuf[oend++&(OLEN-1)]=c;
if(((oend^ostart)&(OLEN-1))==0)
{ sendfull=1;}
ES=1;
}
}
}
//替換標(biāo)準(zhǔn)庫函數(shù)putchar程序
//printf函數(shù)使用putchar輸出一個(gè)字符
char putchar (char c)
{
if (c=='\n')
{
while(sendfull);
putbuf(0x0D);
}
while(sendfull);
putbuf(c);
return(c);
}
//替換標(biāo)準(zhǔn)庫函數(shù)_getkey程序
//getchar和gets函數(shù)使用_getkey
char _getkey(void)
{
char c;
while(iend==istart)
{;}
ES=0;
c=inbuf[istart++&(ILEN-1)];
ES=1;
return(c);
}
/* 初始化串行口和UART波特率函數(shù)*/
void com_initialize(void)
{
istart=0;
iend=0;
ostart=0;
oend=0;
sendactive=0;
sendfull=0;
TMOD |=0x20; //T/C1工作在方式2
TH1=0xfd;
TR1=1;
SCON=0xd8;
ES=1;
}
void uart_Init()
{
com_initialize();
EA=1;
}
|
|
相關(guān)帖子
- • 這是定義的問題嗎,用的c語言,怎么都改不對(duì)
- • adc_dma進(jìn)行采集時(shí)打印數(shù)據(jù)為0,不開dma數(shù)據(jù)能夠正常顯示,想問一下是什么原因
- • 單片機(jī)不使用外部中斷,如何LED顯示程序?
- • 做了個(gè)替BF7612CM的測(cè)試
- • Keil程序求助,這些報(bào)錯(cuò)怎么解決,小白一個(gè),剛接觸單片機(jī)
- • 求用at89c51單片機(jī)測(cè)LM331 V/F轉(zhuǎn)化后的頻率 我的沒有顯示
- • MCU模擬SPI通信,能發(fā)送數(shù)據(jù),接收不到數(shù)據(jù)
- • 菜鳥求助
- • STM32單片機(jī)向ESP8266發(fā)送指令,設(shè)置延時(shí)1秒上傳一次數(shù)據(jù),延時(shí)不準(zhǔn)確
- • 單片機(jī)矩陣按鍵 原理圖+源代碼
- • 通過手機(jī)藍(lán)牙APP發(fā)出控制指令,控制3個(gè)以上LED燈亮滅和蜂鳴器報(bào)警和關(guān)閉,怎么做 求指導(dǎo)
- • 關(guān)于用51單片機(jī)驅(qū)動(dòng)AD9851的原理及其編程思路?
- • 單片機(jī)用點(diǎn)陣LED實(shí)現(xiàn)靜態(tài)字符顯示實(shí)驗(yàn)程序
- • 關(guān)于單片機(jī)矩陣鍵盤多位數(shù)的輸入程序問題
- • CCS10.2編譯器貌似不支持部分GNU的__attribute__
- • STM32于OLED1.54寸的屏幕資料
- • 基于89C52單片機(jī)的時(shí)鐘設(shè)計(jì)經(jīng)驗(yàn)分享
- • [原創(chuàng)文檔分享]一步一步寫帶界面的程序(基于EasyX等庫) 第三版 C/C++語言
- • arduino due時(shí)鐘 氣象站制作 at24c w25q esp8266 源程序
- • 單片機(jī)秒表程序到了指定時(shí)間不會(huì)停下來
|
|
|
|
|