05 单片机串口
来源:互联网 发布:逆战刷永久枪软件 编辑:程序博客网 时间:2024/05/22 07:51
1.2530有两个串口UART0和UART1。
2.他们都有两组备用位置。
UART0:一般是P0_2,P0_3,另一组是P1_4和P1_5;
UART1:一般是P0_4,P0_5,另一组是P1_2和P1_3;
3.可以通过PERCGF寄存器选择备用位置。
4.当选择好备用位置以后,要将相应的IO口设置为外设功能,而不是通用IO口功能。
5.关于流控,奇偶校验位,以及停止位数据位的设置采用默认配置方式。即将
U0UCR = 0;
6.控制寄存器在U0CSR。U0GCR和U0BAUD共同决定波特率。
7.串口初始化流程:
(1)选择IO引脚(PERCFG)
(2)设置IO工作模式(PxSEL)
(3)设置收发模式(U0CSR)
(4)设置停止位以及奇偶校验位(U0UCR)
(5)设置波特率(UxBAUD UxGCR)
(6)开启串口接收中断(IEN0或者IEN2)
(7)开启总中断。(EA=1)
void UartCfg()
{//串口0的备用位置1配置成波特率9600
PERCFG &=0xFE;//1111 1110 选中串口0的的备用位置1
P0SEL |=0x0C; //0000 1100 P0_2 p0_3为偏上外设功能
U0CSR |=0Xc0;
U0GCR =8;
U0BAUD=59;
EA=1;
URX0IE=1;
}
8.注意,发送中断在IEN2,接收中断在IEN0。不管是UART0还是UART1.
9.串口发送:
(1)将要发送的char类型变量赋值给UxDBUF
(2)while(UTXxIF == 0),等待发送中断标志变为1
(3)UTXxIF = 0,清除中断标志。
10.串口接收:
(1)清除接收中断标志URXxIF = 0;
(2)读取UxDBUF到char类型的变量
#pragma vector=URX0_VECTOR
__interrupt void sdfs(void)
{
URX0IF=0;//串口0来数据的标志位,硬件会置1,我们软件要清0
ch=U0DBUF;//从接受寄存器里取字节存入变量ch
U0DBUF=ch;//把变量ch里的值赋给串口0发送数据寄存器
while(0==UTX0IF);
UTX0IF=0;
}
串口模块:
头文件:
#ifndef __UART_H__#define __UART_H__extern void InitUart(); //初始化串口extern void Uart_Send_String(unsigned char *Data,int len);#endif
实现文件:
#include <ioCC2530.h>#define uchar unsigned char#define uint unsigned intvoid InitUart(); //初始化串口void Uart_Send_String(unsigned char *Data,int len);/**************************************************************** 串口初始化函数 ***********************************************************/void InitUart(){ CLKCONCMD &= ~0x40; // 设置系统时钟源为 32MHZ晶振 while(CLKCONSTA & 0x40); // 等待晶振稳定 CLKCONCMD &= ~0x47; // 设置系统主时钟频率为 32MHZ PERCFG&=~0x01; //有2个备用位置,0使用备用位置1;1使用备用位置2 P0SEL |= 0x0C; //P0_2 RXD P0_3 TXD 外设功能 0000 1100 U0CSR |= 0xC0; //串口接收使能 1100 0000 工作UART模式+允许接受 U0UCR |= 0x00; //无奇偶校验,1位停止位 U0GCR |= 11; //U0GCR与U0BAUD配合 U0BAUD |= 216; // 波特率设为115200 IEN0 |= 0X04; //开串口接收中断 'URX0IE = 1',也可以写成 URX0IE=1; EA=1; }void Uart0_SendCh(char ch){ U0DBUF = ch; while(UTX0IF == 0); UTX0IF = 0;}/**************************************************************** 串口发送字符串函数 ****************************************************************/ void Uart_Send_String(unsigned char *Data,int len) { { int j; for(j=0;j<len;j++) { Uart0_SendCh(*Data++); } }}
0 0
- 05 单片机串口
- 单片机串口通信(2)
- 单片机串口通信(1)
- 单片机串口通信实验
- 单片机串口电路
- 单片机之串口通信
- 单片机串口通信
- C# 串口通信、单片机
- 51单片机串口
- 关于 单片机串口 -复位-
- 关于单片机的串口
- C#串口通信、单片机
- 单片机串口调试总结
- 单片机串口理解
- 单片机串口通信不正确
- 51单片机的串口
- 单片机串口通信小结
- P89LPC925单片机串口封装
- C#解决WebBrowser DocumentComplete一个网页多次触发
- C++类中的继承
- [转载]SSH 登录失败:Host key verification failed 的处理方法
- PHP 面向对象OOP
- sql server 查询某个表的所有触发器名称
- 05 单片机串口
- pom文件标签详细备注
- 小程序开发基本框架及其限制与优化
- 全国各个城市代码
- swift3.0 protocol 概览——boolan
- Object.assign()
- 剑指:二维数组中的查找
- React全栈–现代前端技术
- 常用命令