#include <STC8.H>
#include "intrins.h"
#define FOSC 11059200UL
#define BRT (65536 - FOSC / 115200 / 4)
bit busy,c;
char wptr;
char rptr;
char buffer[16];
void UartIsr() interrupt 4
{
if (TI)
{
TI = 0;
busy = 0;
}
if (RI)
{
RI = 0;
if(wptr>0x0f)
{
wptr = 0;
c = 1;
}
if(c==0||wptr<rptr)
{
buffer[wptr++] = SBUF;
}
}
}
void UartInit()
{
SCON = 0x50;
T2L = BRT;
T2H = BRT >> 8;
AUXR = 0x15;
wptr = 0x00;
rptr = 0x00;
c= 0;
busy = 0;
}
void UartSend(char dat)
{
while (busy);
busy = 1;
SBUF = dat;
}
//void UartSendStr(char *p)
//{
// while (*p)
// {
// UartSend(*p++);
// }
//}
char takedata (void)
{
if(rptr>0x0f)
{
rptr = 0;
c = 0;
}
if(c==1||rptr<=wptr)
{
return (buffer[rptr++]);
}
return 0;
}
void main()
{
UartInit();
ES = 1;
EA = 1;
while (1)
{
UartSend (takedata());
}
}
STC 8A串口程序 带缓存
最新推荐文章于 2024-05-10 21:29:05 发布