一.前言

上次我们学习了串口的发送,今天我们要学习串口的接收,要实现的功能是接收电脑发来的数据,控制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学习之路(十):串口(接收)的更多相关文章

  1. zigbee学习之路(十二):zigbee协议原理介绍

    一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T ...

  2. zigbee学习之路(十四):基于协议栈的无线数据传输

    一.前言 上次实验,我们介绍了zigbee原理的应用与使用,进行了基于zigbee的串口发送协议,但是上个实验并没有实现数据的收发.在这个实验中,我们要进行zigbee的接受和发送实验. 二.实验功能 ...

  3. zigbee学习之路(十五):基于协议栈的按键实验

    一.前言 经过上次的学习,相信大家已经初步学会使用zigbee协议进行发送和接受数据了.今天,我们要进行的实验是按键的实验,学会如何在协议栈里实现按键中断. 二.实验功能 在协议栈上实现按键中断,BU ...

  4. zigbee学习之路(九):串口(发送)

    一.前言 今天,我们来学习和实验串口模块方面的,串口通信是我们常用的通信手段,通过串口交互,我们可以很容易的和pc机进行数据的交换和发送,所以我们今天就来学习一下.这个实验所进行的功能是一开始CC25 ...

  5. 【单片机入门】(三)应用层软件开发的单片机学习之路-----UART串口通讯和c#交互

    引言 在第一章博客中,我们讲了Arduino对Esp32的一个环境配置,以及了解到了常用的一个总线通讯协议,其中有SPI,IIC,UART等,今天我为大家带来UART串口通讯和c#串口进行通讯的一个案 ...

  6. zigbee学习之路(十三):基于协议栈的Usart 实验

    一.前言 这次实验我们来学习基于zigbee的串口通信实验,揭开zigbee神秘的面纱,让大家可以用zigbee协议编制属于自己的程序,这次实验只是串口发送数据,并没有进行无线的数据传输,为的是使大家 ...

  7. zigbee学习之路(一):zigbee介绍

    一.前言 大家好,我是一名在校的大学生,最近对zigbee非常感兴趣,于是自己从网上买了一款秉火cc2530的zigbee开发板,想通过这个平台来和大家分享自己学习和研究的经历,下面就来简单的介绍下z ...

  8. zigbee学习之路(八):定时器1(中断)

    一.前言 通过上次的实验,我们已经学会了定时器3的中断方式,这次,我们来看看定时器1通过中断怎么控制. 二.原理分析 定时器1的初始化跟前面提到的一样,也是要配置寄存器T1CTL,还要进行开中断的操作 ...

  9. 嵌入式Linux驱动学习之路(十六)输入子系统

    以前写的一些输入设备的驱动都是采用字符设备处理的.问题由此而来,Linux开源社区的大神们看到了这大量输入设备如此分散不堪,有木有可以实现一种机制,可以对分散的.不同类别的输入设备进行统一的驱动,所以 ...

随机推荐

  1. Webform——中国省市三级联动以及IsPostBack

    首先要明白Webform的运行顺序,当开始启动时候,首先执行的是Page_Load事件, 当点击任意按钮后,每次点击都要先执行一遍Page_Load(在这里Page_Load里面的事件是给数据控件加载 ...

  2. MarkMan – 马克鳗,让设计更有爱!

    scavin(Google+) on 2010.11.16. MarkMan – 马克鳗 是一款方便高效的标注工具,极大节省设计师在设计稿上添加和修改标注的时间,让设计更有爱.Adobe AIR 平台 ...

  3. IE10以下的IE浏览器在form表单提交、a标签等场景下,接收application/json类型的响应时,会提示是否要下载该json文件

    IE10以下的IE浏览器并不支持application/json这种response格式,所以需要在服务端先将对象转成json字符串然后,设置Content-Type为text/html的类型,再返回 ...

  4. javascript通过时区获取时间

    /* 描述:时区的换算 参数:offset时区位置 使用:东八区calcTime(”+8"); */ function calcTime(offset) { // 创建一个本地日期 var ...

  5. JPA入门例子(采用JPA的hibernate实现版本)

    (1).JPA介绍: JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口.JPA吸取了目前Java持久化技术的优 ...

  6. BizTalk 开发系列(四十二) 为BizTalk应用程序打包不同的环境Binding

    我们在使用微软或者其他公司提供的BizTalk应用程序MSI包的时候经常会有一个目标环境的选择选项.该选项可以在不同的环境下使用不同的绑定(BizTalk应用程序配置)感觉很高级. 其实这个非常的简单 ...

  7. IOS第12天(1,UIViewController控制器的创建的 三种方式,和第一个view创建)

    *************HMAppDelegate.m中 @implementation HMAppDelegate - (BOOL)application:(UIApplication *)app ...

  8. Ajaxupload.js上传插件使用

    注意一下火狐,360IE78下的坑: 返回过来的response在不同浏览器下的字符串不一致 // response(chrome):<pre style="word-wrap: br ...

  9. jedis例子

    @Test public void testDiscoverNodesAutomatically(){ Set<HostAndPort> jedisClusterNode=new Hash ...

  10. lua module package.seeall选项

    module 与 package.seeall http://blog.codingnow.com/2006/02/lua_51_module.html 使用 module("test&qu ...