C8051F340学习笔记—UART.doc

上传人:桔**** 文档编号:558243022 上传时间:2023-11-10 格式:DOC 页数:16 大小:320.54KB
返回 下载 相关 举报
C8051F340学习笔记—UART.doc_第1页
第1页 / 共16页
C8051F340学习笔记—UART.doc_第2页
第2页 / 共16页
C8051F340学习笔记—UART.doc_第3页
第3页 / 共16页
C8051F340学习笔记—UART.doc_第4页
第4页 / 共16页
C8051F340学习笔记—UART.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《C8051F340学习笔记—UART.doc》由会员分享,可在线阅读,更多相关《C8051F340学习笔记—UART.doc(16页珍藏版)》请在金锄头文库上搜索。

1、C8051F340串口学习笔记UART0 是一个异步、全双工串口,它提供标准 8051 串行口的方式 1 和方式 3。UART0具有增强的波特率发生器电路,有多个时钟源可用于产生标准波特率。接受数据缓冲机制允许 UART0 在软件尚未读取前一个数据字节的情况下开始接受第二个输入数据字节。UART0 有两个相关的特殊功能寄存器:串行控制寄存器(SCON0)和串行数据缓冲器(SBUF0)。写 SBUF0时自动访问发送寄存器;读 SBUF0时自动访问接受寄存器,不也许从发送数据寄存器中读数据。假如 UART0 中断被允许,则每次发送完毕TI0 位被置1或接受到数据字节RI0 位被置1时将产生中断。当

2、 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 个数据

3、位(LSB 在先)和一个停止位,软件向 SBUF0 寄存器写入一个字节时开始数据发送。在发送结束时中断标志 TI0被置1UART1(仅C8051F340/1/4/5有)UART1的使用与UART0基本大体相同,但是。UART1 包含一个由 16 位定期器和可编程预分频器构成的专用波特率发生器,能产生很宽范围的波特率,有多个时钟源可用于产生标准波特率。UART1 有六个相关的特殊功能寄存器。三个用于波特率发生器(SBCON1、SBRLH1 和SBRLL1),两个用于数据格式、控制和状态功能(SCON1 和 SMOD1),一个用于发送和接受数据(SBUF1)。使用 UART1 时,波特率发生器必须

4、被使能。寄存器 SBRLH1 和 SBRLL1 保持该专用定期器的 16 位重载值,对于可靠的 UART 操作,建议不要将 UART 波特率配置为大于 SYSCLK/16。C8051F330串口UART0示例程序 /使用F340,串口为P0.4(TX0),P0.5(RX0);#include#include#define SYSCLK 24500000/ 系统工作频率#define BAUDRATE 9600/ 串口工作波特率/-/ 功能函数/-void SYSCLK_Init(void);void PORT_Init(void);void UART0_Init(void);void Uart

5、0_Transmit(unsigned char tmp);void sendstr(unsigned char*tmp);unsigned char temp ;void delay_1ms() unsigned int j ; for(j=3060;j0;j-);void delay_ms(unsigned int i) for(;i0;i-)delay_1ms();/-/ 主程序/-void main(void) PCA0MD&=0x40 ;/ 严禁看门狗 PORT_Init();/ 初始化端口I/O SYSCLK_Init();/ 初始化系统时钟 UART0_Init();/ 串口初始

6、化 EA=1 ; ES0=1 ; while(1) delay_ms(1000); sendstr(Welcome to Julys Hut!n); Uart0_Transmit(032); /发送空格 /-/ 端口初始化/-void PORT_Init(void) P0MDOUT | =0x10 ;/ 使能 UTX 为推挽输出 XBR0=0x01 ;/ 使能 UART0 占用 P0.4(TXD) 和 P0.5(RXD) XBR1=0x40 ;/使能交叉开关XBR2=0x00 ; /严禁UART1/-/ 系统时钟初始化/-void SYSCLK_Init(void) OSCICN|=0x03

7、; / 配置内部振荡器的的最大频率 RSTSRC=0x04 ;/ 使能始终丢失检测寄存器/-/ 串口UART0初始化/-void UART0_Init(void) SCON0=0x10 ; if(SYSCLK/BAUDRATE/2/2561) TH1=-(SYSCLK/BAUDRATE/2); CKCON&=0x0B ; CKCON|=0x08 ; else if(SYSCLK/BAUDRATE/2/2564) TH1=-(SYSCLK/BAUDRATE/2/4); CKCON&=0x0B ; CKCON|=0x09 ; else if(SYSCLK/BAUDRATE/2/25612) TH1

8、=-(SYSCLK/BAUDRATE/2/12); CKCON&=0x0B ; else TH1=-(SYSCLK/BAUDRATE/2/48); CKCON&=0x0B ; CKCON|=0x02 ; TL1 = TH1 ; TMOD &= 0xf0 ; TMOD |= 0x20 ; TR1 =1 ; / TI0 = 1;/-/ 串口UART0中断/-/中断向量0x0023void UATR0_ISR(void)interrupt 4 /Rx、Tx共用中断 /接受中断 if(!TI0) RI0=0 ; temp=SBUF0 ; Uart0_Transmit(temp); /发送中断 else

9、 TI0=0 ;/-/ 串口UART0发送/-void Uart0_Transmit(unsigned char tmp) ES0 = 0 ;/关UART0中断 EA = 0 ;/关全局中断 SBUF0 = tmp ; while(TI0 = 0);TI0 = 0 ; ES0 = 1 ;/开UART0中断 EA = 1 ;/开全局中断/-/ 发送字符串/-void sendstr(unsigned char*tmp) while(*tmp) Uart0_Transmit(*tmp+); 本程序是通过F340的uart0与PC进行串口通讯的例程,具体实现为当F340收到从PC传来的数据后将数据原样回发给PC机 ,端口为RXP0.5,TXP0.4#include#define uchar unsigned char#define uint unsigned int/*端口初始化函数*/void PORT_Init (void) XBR0 = 0x01; / I/O交叉开关寄存器0,UART TX0, RX0 连到端口引脚 P0.4 和P0.5 XBR1 = 0x40; /端口交叉开关使能 P0MDOUT = 0x10; /P0.4为推挽输出,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 项目/工程管理

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号