C8051F340串口学****笔记UART0是一个异步、全双工串口,它提供标准8051串行口的方式1和方式3。UART0具有增强的波特率发生器电路,有多个时钟源可用于产生标准波特率。接收数据缓冲机制允许UART0在软件尚未读取前一个数据字节的情况下开始接收第二个输入数据字节。 UART0有两个相关的特殊功能寄存器:串行控制寄存器(SCON0)和串行数据缓冲器(SBUF0)。写SBUF0时自动访问发送寄存器;读SBUF0时自动访问接收寄存器,不可能从发送数据寄存器中读数据。 如果UART0中断被允许,则每次发送完成TI0位被置‘1’或接收到数据字节RI0位被置‘1’时将产生中断。当CPU转向中断服务程序时硬件不清除UART0中断标志。中断标志必须用软件清除。 UART0波特率由定时器1工作在8位自动重装载方式产生,定时器1应被配置为方式2,即8位自动重装载方式,定时器1的时钟可以在6个时钟源中选择:SYSCLK、SYSCLK/4、SYSCLK/12、SYSCLK/48、外部振荡器时钟/8和外部输入T1。其中T1CLK是定时器1的时钟频率,T1H是定时器1的高字节(重载值)UART0提供标准的异步、全双工通信,其工作方式(8位或9位)通过S0MODE来选择8位UART每个数据字节共使用10位:一个起始位、8个数据位(LSB在先)和一个停止位,软件向SBUF0寄存器写入一个字节时开始数据发送。在发送结束时中断标志TI0被置1UART1(仅C8051F340/1/4/5有)UART1的使用与UART0基本大致相同,但是。UART1包含一个由16位定时器和可编程预分频器构成的专用波特率发生器,能产生很宽范围的波特率,有多个时钟源可用于产生标准波特率。UART1有六个相关的特殊功能寄存器。三个用于波特率发生器(SBCON1、SBRLH1和SBRLL1),两个用于数据格式、控制和状态功能(SCON1和SMOD1),一个用于发送和接收数据(SBUF1)。使用UART1时,波特率发生器必须被使能。寄存器SBRLH1和SBRLL1保持该专用定时器的16位重载值,对于可靠的UART操作,建议不要将UART波特率配置为大于SYSCLK/16。 C8051F330串口UART0示例程序 //使用F340,(TX0),(RX0);#include<>#include<>#defineSYSCLK24500000 //系统工作频率#defineBAUDRATE9600 //串口工作波特率//-----------------------------------------------------------------------------//功能函数//-----------------------------------------------------------------------------voidSYSCLK_Init(void);voidPORT_Init(void);voidUART0_Init(void);voidUart0_Transmit(unsignedchartmp);voidsendstr(unsignedchar*tmp);unsignedchartemp;voiddelay_1ms(){ unsignedintj; for(j=3060;j>0;j--);}voiddelay_ms(unsignedinti){ for(;i>0;i--)delay_1ms();}//-----------------------------------------------------------------------------//主程序//-----------------------------------------------------------------------------voidmain(void){ PCA0MD&=~0x40; //禁止看门狗 PORT_Init(); //初始化端口I/O SYSCLK_Init(); //初始化系统时钟 UART0_Init(); //串口初始化 EA=1; ES0=1; while(1) { delay_ms(1000); sendstr("etoJuly'sHut!\n"); Uart0_Transmit(032);//发送空格 }}//-----------------------------------------------------------------------------//端口初始化//----------
c8051f340学习笔记—uart 来自淘豆网www.taodocs.com转载请标明出处.