本文主要是介绍C8051F120单片机双串口配置(uart0,uart1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.介绍IO配置及XBR配置
XBR0=0X40;//使能串口0 分配到IO口P0.0 P0.1
XBR1=0;
XBR2=0X44;//使能XBR交叉开关IO控制器 使能串口1并绑定到IO口上
这里串口0 TX,RX优先级最高:P0.0,P0.1
之后仅使能了串口1那么串口1 TX,RX分配在P0.2,P0.3
P1DOUT=0xff;//选择IO口推挽输出
2.内部晶振配置(本程序中使用的是内部晶振)
SFRPAGE=CONFIG_PAGE;
//使用内部晶振OSCICN=0x83;//while(!OSCICN&0x40);//等待晶振稳定CLKSEL=0x00;//输出时钟不分频 时钟源来自内部振荡器CKCON=0x18;//TIM0=SYSCLK TIM1=SYSCLK
3.串口0的配置
void usart0_init()//接收数据的串口 bps19200
{SFRPAGE = UART0_PAGE; //0SCON0=0x50;//方式1 允许接收SSTA0=0x05;SFRPAGE= TMR2_PAGE;TMR2CF=0x8;TMR2CN=0x8;RCAP2L=0xB0;RCAP2H=0xff;TR2=1;TI0=0;RI0=0;ES0=1;//开串口0中断EA=1;
}
这里设置的波特率为19200 可以根据数据手册中的公式调整RCAP2L,RCAP2H来改变波特率,采用8位可变波特率方式
接收中断为:
void date_recv() interrupt 4//接收测试没得问题
{ uchar date;static uchar dic=0;static uchar header=0;static uchar num=0;SFRPAGE=UART0_PAGE;if(RI0==1){RI0=0;date=SBUF0;//获取数据}
}
代码中的数据处理被删去,可以自行在if语句中进行相应的帧头,帧尾等相关校验。
设置的打印函数:
void sendstring_stream1(uchar* date,uchar lenth)
{uchar i;SFRPAGE=UART0_PAGE;for(i=0;i<lenth;i++){SBUF0=date[i];while(!TI0);//等待发送完成TI0=0;//手动清零发送中断标志}
}
包含两个参数,第一个参数是要发送的数据数组,第二个参数为数组的长度
4.串口1的相关配置
串口1只能工作在方式1,3
并且波特率只能由TIM1溢出产生
相关配置如下
void usart1_init()
{SFRPAGE = UART1_PAGE; //1SCON1=0x50;SFRPAGE= TIMER01_PAGE;TMOD=0x20;TH1=0x96;TL1=0x96;TR1=1;//EIE2=0x40;
}
这里设置波特率为9600,没有打开串口中断,若果需要打开则去掉注释处代码,串口1终端号为20
2.设置串口1打印函数
void sendstring_stream2(uchar* date,uchar lenth)
{uchar i;SFRPAGE=UART1_PAGE;for(i=0;i<lenth;i++){SBUF1=date[i];while(!TI1);TI1=0;}
}
与串口0打印函数相同
这篇关于C8051F120单片机双串口配置(uart0,uart1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!