zigbee学习之路(十):串口(接收)
一.前言
上次我们学习了串口的发送,今天我们要学习串口的接收,要实现的功能是接收电脑发来的数据,控制LED 灯闪烁,而且将收到的数据发回给电脑显示出来。而且要采用不占用cpu资源的中断。
二原理与分析
由于要采用中断处理的方式,所以我们要开接收中断和总中断,具体相关的寄存器配置如下:

U0CSR|=0x40是因为要选择模式和允许接收使能。除此之外都跟上个接收程序一样
三.程序
主函数
#include <ioCC2530.h>
#include "Uart.h"
#define uint unsigned int
#define uchar unsigned char
#define LED1 P1_0 //P1_0连接LED1
#define LED2 P1_1 //P1_1连接LED2
#define LED3 P1_4 //P1_4连接LED3
//函数声明
void Send_ReceicedData(void);
void Initial_IO(void);
void Delayms(uint xms);
//定义待发送的数据 char Txdata0[]={"欢迎您\n"}; //存放"欢迎您"
char Txdata1[]={"This is a Uart test.\n"}; char Txdata2[]={"The data CC2530 has received is: "}; char Txdata3[]={"\n"};
char Rxdata = '\0';
/*********** 函 数 名 : main 功能描述 : USART测试(USART0接收电脑发过来的数据) 输入参数 : NONE 输出参数 : NONE 返 回 值 : NONE **********/ void main(void)
{
SetSysClock(); //设置系统时钟为32MHz
InitUART(); //调用初始化函数
Initial_IO(); //调用初始化函数
UartSend_String(Txdata0,sizeof("秉火团队欢迎您\n"));
Delayms(500);
UartSend_String(Txdata1,sizeof("This is a Uart test.\n"));
while(1) { Send_ReceicedData(); } }
/******************** 函 数 名 : UART0_ISR 功能描述 : USART接收中断 输入参数 : NONE 输出参数 : Rxdata 返 回 值 : NONE **********/
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{ Rxdata = U0DBUF; //接收数据并存于Rxdata
URX0IF = 0; // 清中断标志 }
/************************* 函 数 名 : Send_ReceicedData 功能描述 : 将接收到的数据发回给电脑 输入参数 : NONE 输出参数 : NONE 返 回 值 : NONE **************/
void Send_ReceicedData(void)
{
if ( Rxdata != '\0' )
{
UartSend_String(Txdata2,sizeof("The data CC2530 has received is: ")); //提示接收到数据
Send_char(Rxdata);
UartSend_String(Txdata3,sizeof("\n"));
if (Rxdata=='1')
{ LED1=0; Delayms(500); LED1=1; }
if (Rxdata=='2') { LED2=0; Delayms(500); LED2=1; }
if (Rxdata=='3') { LED3=0; Delayms(500); LED3=1; }
Rxdata='\0'; }
}
/****************** 函 数 名 : Initial_IO 功能描述 : IO初始化函数 输入参数 : NONE 输出参数 : NONE 返 回 值 : NONE ****************/
void Initial_IO(void)
{ P1DIR |= 0xff; //P1为输出
P1=0x1f; //P1_4口为高,让LED3灯指示工作状态 }
/************** 函 数 名 : Delayms 功能描述 : 毫秒延时 输入参数 : xms:延时时间,如 i=xms 即延时i/2毫秒 输出参数 : none 返 回 值 : none ************/ void Delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=587;j>0;j--); }
Uart.c
#include "Uart.h"
#define uint unsigned int
#define uchar unsigned char
/****************** 函 数 名 : InitUART 功能描述 : CC2530串口初始化配置 输入参数 : NONE 输出参数 : NONE 返 回 值 : NONE ******************/ void InitUART(void)
{
PERCFG = 0x00; //位置1 P0口
P0SEL = 0x0c; //P0_2,P0_3 用作串口,第二功能
P2DIR &= ~0XC0; //P0 优先作为UART0 ,优先级
U0CSR |= 0x80; //UART 方式
U0GCR |= 11; //U0GCR与U0BAUD配合
U0BAUD |= 216; //波特率设为115200
UTX0IF = 0; //UART0 TX 中断标志清0
U0CSR |= 0X40; //允许接收 URX0IE=1; //接收中断
EA=1; //开总中断, }
/************************************************** 函 数 名 : Send_char 功能描述 : 串口向电脑发送字节 输入参数 : c---所要发送的数据 输出参数 : NONE 返 回 值 : NONE ***************************************************/
void Send_char(uchar c)
{ U0DBUF = c;
while(UTX0IF == 0); //发送完成标志位
UTX0IF = 0; }
/******************************** 函 数 名 : UartSend_String 功能描述 : 串口向电脑发送字符串 输入参数 : *Data---字符串首地址 len---字符串长度 输出参数 : NONE 返 回 值 : NONE ******************************/
void UartSend_String(char *Data,int len)
{ int j;
for(j=0;j<len;j++)
{ Send_char(*Data++); } }
/********************** 函 数 名 : SetSysClock 功能描述 : 设置系统时钟为32MHz 输入参数 : NONE 输出参数 : NONE 返 回 值 : NONE ******************/
void SetSysClock(void)
{
CLKCONCMD &= ~0x40; //选择系统时钟源为外部32MHz crystal oscillator
while(CLKCONSTA & 0x40); //等待晶振稳定为32MHz
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ
}
四.总结
Send_ReceicedData(void)这个函数,用来根据接收的字符来作出反应,让对应的灯亮,需要注意的是使用了串口中断,所以我们要把相关的串口中断打开,并在中断函数里清除中断标志位。
zigbee学习之路(十):串口(接收)的更多相关文章
- zigbee学习之路(十二):zigbee协议原理介绍
一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T ...
- zigbee学习之路(十四):基于协议栈的无线数据传输
一.前言 上次实验,我们介绍了zigbee原理的应用与使用,进行了基于zigbee的串口发送协议,但是上个实验并没有实现数据的收发.在这个实验中,我们要进行zigbee的接受和发送实验. 二.实验功能 ...
- zigbee学习之路(十五):基于协议栈的按键实验
一.前言 经过上次的学习,相信大家已经初步学会使用zigbee协议进行发送和接受数据了.今天,我们要进行的实验是按键的实验,学会如何在协议栈里实现按键中断. 二.实验功能 在协议栈上实现按键中断,BU ...
- zigbee学习之路(九):串口(发送)
一.前言 今天,我们来学习和实验串口模块方面的,串口通信是我们常用的通信手段,通过串口交互,我们可以很容易的和pc机进行数据的交换和发送,所以我们今天就来学习一下.这个实验所进行的功能是一开始CC25 ...
- 【单片机入门】(三)应用层软件开发的单片机学习之路-----UART串口通讯和c#交互
引言 在第一章博客中,我们讲了Arduino对Esp32的一个环境配置,以及了解到了常用的一个总线通讯协议,其中有SPI,IIC,UART等,今天我为大家带来UART串口通讯和c#串口进行通讯的一个案 ...
- zigbee学习之路(十三):基于协议栈的Usart 实验
一.前言 这次实验我们来学习基于zigbee的串口通信实验,揭开zigbee神秘的面纱,让大家可以用zigbee协议编制属于自己的程序,这次实验只是串口发送数据,并没有进行无线的数据传输,为的是使大家 ...
- zigbee学习之路(一):zigbee介绍
一.前言 大家好,我是一名在校的大学生,最近对zigbee非常感兴趣,于是自己从网上买了一款秉火cc2530的zigbee开发板,想通过这个平台来和大家分享自己学习和研究的经历,下面就来简单的介绍下z ...
- zigbee学习之路(八):定时器1(中断)
一.前言 通过上次的实验,我们已经学会了定时器3的中断方式,这次,我们来看看定时器1通过中断怎么控制. 二.原理分析 定时器1的初始化跟前面提到的一样,也是要配置寄存器T1CTL,还要进行开中断的操作 ...
- 嵌入式Linux驱动学习之路(十六)输入子系统
以前写的一些输入设备的驱动都是采用字符设备处理的.问题由此而来,Linux开源社区的大神们看到了这大量输入设备如此分散不堪,有木有可以实现一种机制,可以对分散的.不同类别的输入设备进行统一的驱动,所以 ...
随机推荐
- C/C++中的实参和形参
今天突然看到一道关于形参和实参的题,我居然不求甚解.藐视过去在我的脑海里只有一个参数的概念,对于形参和实参的区别还真的不知道,作为学习了几年C++的人来说,真的深深感觉对不起自己对不起C++老师 T ...
- 【HDU 2853】 KM算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2853 题意:有n个公司,m个任务,每个公司做每个任务都有一个效率值,最开始每个公司都指派了一个任务,现 ...
- boostrap折叠,jquery ui accordion同时打开多个标签
http://caibaojian.com/bootstrap/javascript.html http://www.w3cschool.cc/jqueryui/example-accordion.h ...
- wxpython更新
.configure时候检查不到gtk+ 使用 apt-get install gnome-core-devel
- Unity3D 开发 之 JDK安装与环境变量配置
安装JDK 选择安装目录 安装过程中会出现两次 安装提示 .第一次是安装 jdk ,第二次是安装 jre .建议两个都安装在同一个java文件夹中的不同文件夹中.(不能都安装在java文件夹的根目录 ...
- C# Dictionary已知value获取对应的key
1:循环遍历法,分为遍历key-value键值对和遍历所有key两种形式 2:使用Linq查询法 private void GetDictKeyByValue() { Dictionary<in ...
- Box2D淌坑日记: 如何正确的设置角度
对刚体角度设置的唯一函数是 SetTransform 然而,这个函数不会对传入的角度作任何处理,因此,如果你试图设置一个角度,并应用一个revoluteJoint时,可能会出现问题. 我在实践中碰到的 ...
- Erlang使用相关笔记
#从源码编译安装Erlang 1. wget http://www.erlang.org/download/otp_src_r16b.tar.gz -p /usr/local/src 2. tar z ...
- 【翻译】How To Tango With Django 1.5.4 第四章
4.模板和静态媒体 这章讲解模板引擎 4.1使用模板 前面我们讲解了view和url 映射,创建出了django 的web页面,现在就要将模板混合进去 好的网站在布局上总是有许多重复的.django提 ...
- Linux内核设计第五周——扒开系统调用三层皮(下)
Linux内核设计第五周 ——扒开系统调用三层皮(下) 一.知识点总结 1.给MenuOS增加新的命令的步骤 更新menu代码到最新版 test.c中main函数里,增加MenuConfig() 增加 ...