当前位置: 首页 > 工具软件 > S4A > 使用案例 >

【STC8学习笔记】STC8A8K64S4A12串口配置

伯洋
2023-12-01

串口初始化函数使用stc-isp-v6.88J版本自动生成

串口1例程

#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;
	}
}

串口2

#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;
    }
}
 类似资料: