串口初始化函数使用stc-isp-v6.88J版本自动生成
#include <STC8.h>
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xE0; //设置定时初始值
TH1 = 0xFE; //设置定时初始值
ET1 = 0; //禁止定时器%d中断
TR1 = 1; //定时器1开始计时
ES = 1;//使能串口中断
EA = 1;//使能总中断
}
//向串口发送一个字符
void putchar(char ch)
{
SBUF = ch;
while(!TI);TI = 0;
}
//向串口发送一段字符串
void prints(char *s)
{
while(*s != '\0')//发送字符串,直到遇到0才结束
{
SBUF = *s++;
while(!TI);
TI = 0;
}
}
void main(void)
{
UartInit();
prints("HelloWorld!");
putchar('\n');
while(1);
}
void UART1_Isr() interrupt 4
{
unsigned char uartData;//单字节串口数据
if(RI)
{
/*将接收到的数据向PC机发送回去*/
RI = 0;
uartData = SBUF;
SBUF = uartData;
TI = 0;
}
}
#include <STC8.h>
bit busy;
char wptr;
char rptr;
char buffer[16];
void UartInit(void) //9600bps@11.0592MHz
{
S2CON = 0x50; //8位数据,可变波特率
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0xE0; //设置定时初始值
T2H = 0xFE; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
IE2 = 0x01; //串口2中断允许
EA = 1; //开总中断
}
//向串口发送一个字符
void Uart2Send(char dat)
{
while (busy);
busy = 1;
S2BUF = dat;
}
//向串口发送一段字符串
void Uart2SendStr(char *p)
{
while (*p)
{
Uart2Send(*p++);
}
}
void main()
{
UartInit();
Uart2SendStr("HelloWorld!\n");
while (1)
{
if (rptr != wptr)
{
Uart2Send(buffer[rptr++]);
rptr &= 0x0f;
}
}
}
void Uart2Isr() interrupt 8
{
if (S2CON & 0x02)
{
S2CON &= ~0x02;
busy = 0;
}
if (S2CON & 0x01)
{
S2CON &= ~0x01;
buffer[wptr++] = S2BUF;
wptr &= 0x0f;
}
}