小蜜蜂笔记
嵌入式开发与物联网应用教育践行者

小蜜蜂老师的《物联网技术应用-CC2530版》考前必须死磕

知识要点

01、物联网体系的基本三层架构是:感知层、网络层、应用层。
02、微处理器中,内核与外设之间的主要交互方式有2种:查询和中断。
03、在进行按键扫描程序设计时,通过去抖动处理,以减少外部信号的干扰。
04、程序在执行过程中由于外界的原因而被中间打断的情况,称为中断。
05、当一个优先级低的中断尚未执行完毕,又发生了一个高优先级的中断,系统转而执行高优先级的中断服务,这种情况称为中断嵌套。
06、微处理器中每个中断源对应的固定入口地址称为中断向量。
07、CC2530的中断服务函数与一般自定义函数不同,有其独特的写法,在每一个中断服务函数之前,都需要加上一句起始语句,在函数前面需要使用__interrupt关键字来将该函数定义为中断服务函数,中断服务函数不允许有返回值,也不允许传递参数。
08、物联网部署了海量的多种类型传感器,每一个传感器都是一个信息源。
09、云计算的出现意味着计算能力可以作为一种商品进行流通。
10、CC2530微控制器的内核是增强型8051,一共有21个数字I/O端口引脚,其中P0端口有8个引脚,P1端口有8个引脚,P2端口有5个引脚,在应用开发中实际可用的I/O端口引脚只有17个。

11、CC2530的每一个数字I/O端口引脚都可以通过对特殊功能寄存器编程进行配置,通过配置PxSEL寄存器选择对应端口引脚是通用I/O功能还是外设功能,通过配置PxDIR寄存器设置对应端口引脚的信号传输方向。
12、P0、P1和P2端口中的每一个引脚都具有外部中断输入功能,微处理器外部中断的触发方式有电平触发和边沿触发2种,在CC2530中采用的是边沿触发方式,分为上升沿触发和下降沿触发2种。P0端口中的任何一个引脚产生外部中断信号,都会使P0IF标志位自动置1,P1和P2亦同。
13、在微处理器中,不管是定时器还是计数器,实际上都是计数器。CC2530有5个定时器,其中定时器1的功能最全,是一个16位定时器,在实际应用中是优先选用的对象。
14、为了能在程序设计中直接使用CC2530的特殊功能寄存器的名称,需要在程序中引入头文件ioCC2530.h,用C语言实现代码是:#include “ioCC2530.h”。
15、CC2530的定时器1有三种不同的工作模式:自由运行模式、模模式和正计数/倒计数模式。
16、数据通信时,根据微处理器和外设直接的连线结构,可将通信方式分为:并行通信和串行通信。
17、计算机串口采用的RS232电平,CC2530微处理器串口采用的是TTL电平,它们之间进行串口通信,需要借助MAX232芯片进行电平转换。
18、CC2530有2个串口通信接口,它们能够分别运行与异步UART模式或者同步SPI模式。UART模式提供全双工传送,具有独立的数据发送和数据接收中断,波特率可以根据应用灵活设置。
19、当CC2530的UART0串口完整接收到一个字节后,中断标志位URX0IF会自动置1。
20、微处理器系统只能接收数字信号,要处理这些信号就必须把模拟信号转换成数字信号,所以在嵌入式系统中,实现数字化的关键设备是模数转换器,ADC。

21、模数转换器ADC的转换过程一般要经过4个过程:采样、保持、量化、编码。
22、必须掌握ADC的分辨率概念和数据换算原理。
23、CC2530的ADC支持最高14位二进制的模数转换,具有12位的有效数据位,有8个独立的输入通道,可以接收单端或差分信号。
24、CC2530的ADC既可以设置为按序列进行转换,也可以设置为单通道转换。
25、在CC2530的单通道ADC转换中,通过写ADCCON3寄存器触发,所以,单通道的ADC转换,只需要将控制写入ADCCON3寄存器,转换立即开始。
26、ADCCON3寄存器对三个部分的功能进行参数设置,分别是:参考电压、抽取率和通道选择。

选择题习题库

《CC2530单片机原理与应用》单选题01-基础知识

《CC2530单片机原理与应用》单选题02-通用I/O端口

《CC2530单片机原理与应用》单选题03-中断系统与外部中断

《CC2530单片机原理与应用》单选题04-定时器与看门狗

《CC2530单片机原理与应用》单选题05-串行通信

《CC2530单片机原理与应用》单选题06-ADC数模转换

简答与计算题

1、简答题:
写出10种物联网技术应用。

智能农业、智能医疗、智能交通、智能物流、智能家居
智慧校园、导航系统、移动支付、电表集抄、物品追溯

2、 简答题:
简述IAR环境下CC2530应用开发的基本流程。

<1>在IAR中新建工作区;
<2>在工作区中新建工程;
<3>为工程配置参数。
<4>新建C语言代码文件,并添加到工程中。
<5>根据应用需求编写代码。
<6>编译代码。
<7>连接仿真器和目标板。
<8>运行调试代码。

3、 计算题:
有一个温度测控系统,已知温度传感器在0到100度之间为线性输出,参考电压为5V,采用8位的A/D转换器,0度的时候,测得电压为1.8伏,100度的时候,测得电压为4.3伏。
【1】写出温度传感器输出电压与实际温度的关系表达式。
【2】请问该系统的电压分辨率和温度分辨率分别是多少?
【3】如果ADC采集到数据10011101,表示多大的电压?温度是多少?

k=(100-0)/(4.3-1.8)=40
电压与温度的表达式为:y=40*(x-1.8)

电压分辨率为:5V/(256-1)=0.0196V
温度分辨率为:0.0196*40=0.784摄氏度

100111101的十六进制表示为:0x9D,其十进制表示为:16*9+13=157
该数据表示的电压值为:0.0196*157=3.0772V
对应的实际温度值为:40*(3.0772-1.8)=51.008摄氏度

程序设计题

1、设计程序实现CC2530的LED开关控制。
系统上电后,LED灯点亮,过一会,LED灯熄灭,过一会,LED灯点亮,如此反复循环。其中, LED灯的控制信号接到CC2530的P1_3引脚,输入高电平点亮LED灯,输入低电平熄灭LED灯。

#include "ioCC2530.h"

#define LED  P1_3

void Delay(unsigned int t)
{
  while(t--);
}

void Init_Port()
{
  P1SEL &= ~0x08;     //P1_3设置为通用I/O端口
  P1DIR |= 0x08;      //P1_3设置为输出端口
}

void main()
{
  Init_Port();
  while(1)
  {
    LED = 1;        //LED灯点亮
    Delay(60000);
    LED = 0;        //LED灯熄灭
    Delay(60000);
  }
}

2、设计程序,实现CC2350的按键扫描与控制。
当按键SW按下松开口,切换LED灯的开关状态。按键SW的输入信号接到CC2530的P1_2引脚,按键按下的时候输入信号为低电平。LED灯的控制信号接到CC2530的P1_4引脚,输入低电平点亮LED灯,输入高电平熄灭LED灯。在设计按键扫描程序时需要去抖动处理。

#include "ioCC2530.h"

#define SW    P1_2
#define LED   P1_4

void Delay(unsigned int t)
{
  while(t--);
}

void Init_Port()
{
  P1SEL &= ~0x10;     //P1_4设置为通用I/O端口
  P1DIR |= 0x10;      //P1_4设置为输出端口
  
  P1SEL &= ~0x04;     //P1_2作为通用I/O端口
  P1DIR &= ~0x04;     //P1_2端口输入
  P1INP &= ~0x04;     //P1_2设置为上拉/下拉模式
  P2INP &= ~0x40;     //P1_2设置为上拉
}
void Scan_Key()
{
  if(SW == 0)
  {
    Delay(100);       //按键去抖动处理
    if(SW == 0)
    {
      while(SW == 0); //等待按键松开
      LED = ~LED;     //切换LED灯的开关状态
    }
  }
}

void main()
{
  Init_Port();        //初始化I/O端口
  while(1)
  {
    Scan_Key();       //循环扫描按键
  }
}

3、设计程序,通过定时器控制灯光闪烁。
将CC2530内部16MHz的RC振荡器时钟的128分频作为定时器1的计数信号,在模模式中实现0.1秒的间隔定时。在定时中断服务函数中,对LED1灯的开光状态进行切换。 LED1灯的控制信号接到CC2530的P1_4引脚,输入低电平点亮LED灯,输入高电平熄灭LED灯。

#include "ioCC2530.h"

#define LED1  P1_4

void Init_Port()
{
  P1SEL &= ~0x10;     //P1_4设置为通用I/O端口
  P1DIR |= 0x10;      //P1_4设置为输出端口
}

void Init_Timer1()
{
  T1CC0L = 0xd4;      
  T1CC0H = 0x30;        //16MHz时钟,128分频,定时0.1秒
  T1CCTL0 |= 0x04;      //开启通道0的输出比较模式
  T1IE = 1;             //开启定时器中断
  EA = 1;               //开启总中断
  T1CTL = 0x0e;         //分频系数是128,模模式
}
#pragma vector = T1_VECTOR
__interrupt void Timer1_int()
{
  T1STAT &= ~0x20;    //清除定时器1的溢出中断标志位
  LED1 = ~LED1;       //切换LED1灯的开关状态
}

void main()
{
  Init_Port();        //初始化I/O端口
  Init_Timer1();      //初始化定时器1
  while(1);
}

4、设计程序,实现秒闪灯。
利用看门狗WDT的定时器模式,实现1秒的间隔定时,在中断服务函数中,切换LED1灯的开光状态。 LED1灯的控制信号接到CC2530的P1_4引脚,输入低电平点亮LED灯,输入高电平熄灭LED灯。

#include "ioCC2530.h"

#define LED1  P1_4

void Init_Port()
{
  P1SEL &= ~0x10;     //P1_4设置为通用I/O端口
  P1DIR |= 0x10;      //P1_4设置为输出端口
}

void Init_WDT()
{
  WDCTL = 0x0c;     //将看门狗设置为定时器模式,定时1秒
  IEN2 |= 0x20;     //使能看门狗定时器中断
  EA = 1;           //使能总中断
}

#pragma vector = WDT_VECTOR
__interrupt void Service_WDT()
{
  WDTIF = 0;      
  LED1 = ~ LED1;
}

void main()
{
  Init_Port();
  Init_WDT();
  while(1);
}

5、设计程序,实现ADC的数据采样。
采用查询的方式对CC2530中ADC模块的通道0进行循环数据采样,参考电压选择AVDD5,抽取率选择256,采样结果的高8位放在变量adch中,第8位放在变量adcl中。

#include "ioCC2530.h"

void Init_ADC0()
{
  APCFG |= 0x01;
}

void Get_ADC0_Value()
{
  ADCCON3 = (0x80 | 0x20 | 0x00);   //参考电压AVDD5,抽取率256,通道0
  while((ADCCON1&0x80)==0x80);        //等待ADC转换完成
  adch = ADCH;
  adcl = ADCL;
}

void main()
{
  Init_ADC0();          //初始化ADC
  while(1)
  {
    Get_ADC0_Value();   //循环采用数据
  }
}
赞(27)
未经允许不得转载:小蜜蜂笔记 » 小蜜蜂老师的《物联网技术应用-CC2530版》考前必须死磕

小蜜蜂笔记 更专业 更方便 更高效

联系我们精品小店