首页 > 学院 > 开发设计 > 正文

05 单片机串口

2019-11-08 20:17:15
字体:
来源:转载
供稿:网友
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++);   }  }}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表