标题【___串口___最基本代码、待函数化优化】
串口笔记
主要思路:
TXD 和 RXD (串口 下载程序 )
① 文本形式用户写(一个字符一个字符写入)
② Hex形式用户写(ASX||进制的形式写入)
(一)(用户)用上位发送数据时:在一个字符串中,(以文本形式SBUF一个一个字节存)通过串口外部中断,每完成接受一个字节或内容,RI = 1, (变量)unsigned char = SBUF(用户数据一个一个存) ;然后手动恢复RI = 0;//继续下一个准备 ;
(二)单片机里数据回显在 (上位机): 目的把SBUF的数据,转到另一个SBUF 数据, 用到
while(TI == 0 );//while死循环停留 ,等待硬件完成送入,完成后自动TI = 1 ,并跳出这个while死循环。
TI= 0; //TI = 0; 下一个数据准备
//声明函数初始化
void UartInit(void) //9600bps@12.000MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR |= 0x04; //定时器2时钟为Fosc,即1T
T2L = 0xC7; //设定定时初值
T2H = 0xFE; //设定定时初值
AUXR |= 0x10; //启动定时器2
ES = 1 ; //串口中断打开,
}
///-----------main.c
unsigned char Uart_buf[6]; //一次6字符
unsigned char Uart_buf_unm=0; //用于 i++
/*-------------------------------------------------------
UART 串口中断 服务程序
--------------------------------------------------------*/
void Uart() interrupt 4 // 【 上位机(用户)》 单片机 】
{
if(RI ) //每完成接受一个字节或内容,RI = 1,
{
RI = 0; //复位,下一次准备
Uart_buf[Uart_buf_unm] = SBUF ;
Uart_buf_unm++ ;
}
}
void Uart_Pro (void) //回显函数 (单片机》上位机)
{
unsigned char i ;
if(Uart_buf_unm==5)
{
Uart_buf_unm = 0;
sprintf(seg_sss, "%s",Uart_buf); //打印到数码管显示
for(i = 0;i<=4;i++)
{
SBUF = Uart_buf[i];
while(TI ==0 ); //while死循环停留 ,等待硬件完成送入,完成后自动TI = 1 ,并跳出这个while死循环。
TI =0 ;
}
}
}