Zigbee物联网应用与开发复习汇总(附某高校期末真题试卷)_zigbee网络地址 考试

U0GCR |= 11;				
U0BAUD |= 216;				//波特率设为115200
UTX0IF = 1;                                 //UART0 TX中断标志初始置位1 
U0CSR |= 0X40;				//允许接收
IEN0 |= 0x84;				//开总中断,接收中断

}

/****************************************************************
主函数
****************************************************************/
void main(void)
{
LED_Init();
initUART0();
while(1)
{
if(RXTXflag == 1) //接收状态
{
if(temp!=0)
{
LED2=!LED2;
UartTX_Send_String(Recdata,10);
UartTX_Send_String(“\n”,1);
RXTXflag = 3; //进入发送状态
}

          temp  = 0;
      }
      if(RXTXflag == 3)			//发送状态
      {          

        U0CSR &= ~0x40;			//不能收数
        U0CSR |= 0x40;			//允许接收
        RXTXflag = 1;		        //恢复到接收状态

      }
}

}
/****************************************************************
串口接收一个字符:一旦有数据从串口传至CC2530,则进入中断,将接收到的数据赋值给变量temp.
****************************************************************/
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
URX0IF = 0; //清中断标志
temp = U0DBUF;
}



#include <iocc2530.h>
#include <string.h>
#define uint unsigned int
#define uchar unsigned char

//定义控制灯的端口
#define LED1 P1_0
#define LED2 P2_0

void LED_Init();
void initUART0(void);
void InitialAD(void);
void UartTX_Send_String(uchar *Data,int len);
void delay(void);

uchar Recdata1[10]=“Hello\n”;
uchar Recdata[10]=“Welcome\n”;
uchar RXTXflag = 1;
uchar temp=0;
uint datanumber = 0;
uint stringlen;
int counter=0;
/****************************************************************
串口发送字符串函数
****************************************************************/
void UartTX_Send_String(uchar *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}

void TIM1_Init()
{
CLKCONCMD&=~0X7f; //晶振设置为32MHz
while(CLKCONSTA & 0x40); //等待晶振稳定

EA=1; //开总中断
T1IE=1; //开T1溢出中断
T1CTL=0x09; //0000 1001启动设32分频,设自由模式
}

void LED_Init()
{
P0SEL &=~0X01;
P0DIR |=0X01;
P2SEL &=~0X01;
P2DIR |=0X01;
LED1=1;
LED2=1;
}
void delay(void)
{
int i = 0,j = 0;
for(i = 0;i < 1000;i++)
for(j = 0;j < 500;j++);
}

/****************************************************************
初始化串口0函数
****************************************************************/
void initUART0(void)
{
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ

PERCFG = 0x00;				//位置1 P0口
P0SEL = 0x3c;				//P0用作串口
P2DIR &= ~0XC0;                             //P0优先作为UART0 
U0CSR |= 0x80;				//串口设置为UART方式
U0GCR |= 11;				
U0BAUD |= 216;				//波特率设为115200
UTX0IF = 1;                                 //UART0 TX中断标志初始置位1 
U0CSR |= 0X40;				//允许接收
IEN0 |= 0x84;				//开总中断,接收中断

}

/****************************************************************
主函数
****************************************************************/
void main(void)
{
LED_Init();
initUART0();
TIM1_Init();
while(1)
{
}
}
/****************************************************************
串口接收一个字符:一旦有数据从串口传至CC2530,则进入中断,将接收到的数据赋值给变量temp.
****************************************************************/
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
URX0IF = 0; //清中断标志
temp = U0DBUF;
}

#pragma vector = T1_VECTOR
__interrupt void Uart(void)
{

IRCON=0x00;
if(counter <91)  // 自由模式6s 
{
  counter++;
}else{
  LED2=0;
  counter=0;
  UartTX\_Send\_String("everything is ok",17);
}

}



#include <iocc2530.h>
#include <string.h>
#define uint unsigned int
#define uchar unsigned char

//定义控制灯的端口
#define LED1 P1_0
#define LED2 P2_0

void LED_Init();
void initUART0(void);
void InitialAD(void);
void UartTX_Send_String(uchar *Data,int len);
void delay(void);

uchar Recdata[10]=“Welcome\n”;
uchar RXTXflag = 1;
uchar temp=0;
uint datanumber = 0;
uint stringlen;
int counter=0;
/****************************************************************
串口发送字符串函数
****************************************************************/
void UartTX_Send_String(uchar *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}

void LED_Init()
{
P0SEL &=~0X01;
P0DIR |=0X01;
P2SEL &=~0X01;
P2DIR |=0X01;
LED1=1;
LED2=1;
}

/****************************************************************
初始化串口0函数
****************************************************************/
void initUART0(void)
{
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ

PERCFG = 0x00;				//位置1 P0口
P0SEL = 0x3c;				//P0用作串口
P2DIR &= ~0XC0;                             //P0优先作为UART0 
U0CSR |= 0x80;				//串口设置为UART方式
U0GCR |= 11;				
U0BAUD |= 216;				//波特率设为115200
UTX0IF = 1;                                 //UART0 TX中断标志初始置位1 
U0CSR |= 0X40;				//允许接收
IEN0 |= 0x84;				//开总中断,接收中断

}

/****************************************************************
主函数
****************************************************************/
void main(void)
{
initUART0();
stringlen = strlen((char *)Recdata);
if(counter==0){
counter=1;
UartTX_Send_String(“What is your name?”,19);
}

while(1)
{
      if(RXTXflag == 1)			     //接收状态
      {
        if( temp != 0)
        {
            if((temp!='#')&&(datanumber<50))     //’#‘被定义为结束字符,最多能接收50个字符
            {          
             Recdata[datanumber++] = temp;
            }
            else
            {
              RXTXflag = 3;                      //进入发送状态
            }
            if(datanumber == 50)
              RXTXflag = 3;
          temp  = 0;
        }
      }
      if(RXTXflag == 3)			//发送状态
      {
        UartTX\_Send\_String("send:",5);
        
        U0CSR &= ~0x40;			//不能收数
        UartTX\_Send\_String("Hello ",7);
        UartTX\_Send\_String(Recdata,datanumber);
        UartTX\_Send\_String("\n",1);
        U0CSR |= 0x40;			//允许接收
        RXTXflag = 1;		        //恢复到接收状态
        datanumber = 0;			//指针归0
        memset(Recdata, 0, sizeof(Recdata));
      }
}

}
/****************************************************************
串口接收一个字符:一旦有数据从串口传至CC2530,则进入中断,将接收到的数据赋值给变量temp.
****************************************************************/
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
URX0IF = 0; //清中断标志
temp = U0DBUF;
}



#include <iocc2530.h>
#include <string.h>
#define uint unsigned int
#define uchar unsigned char

//定义控制灯的端口
#define LED1 P0_0
#define LED2 P2_0

void LED_Init();
void initUART0(void);
void InitialAD(void);
void UartTX_Send_String(uchar *Data,int len);

int cnt=0;
int flag=0;
uchar Recdata[6];
uchar RXTXflag = 1;
uchar temp=0;
uint datanumber = 0;
uint stringlen;
int counter=0;
/****************************************************************
串口发送字符串函数
****************************************************************/
void UartTX_Send_String(uchar *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}

void LED_Init()
{
P0SEL &=~0X01;
P0DIR |=0X01;
P2SEL &=~0X01;
P2DIR |=0X01;
LED1=1;
LED2=1;
}

/****************************************************************
初始化串口0函数
****************************************************************/
void initUART0(void)
{
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ

PERCFG = 0x00;				//位置1 P0口
P0SEL = 0x3c;				//P0用作串口
P2DIR &= ~0XC0;                             //P0优先作为UART0 
U0CSR |= 0x80;				//串口设置为UART方式
U0GCR |= 11;				
U0BAUD |= 216;				//波特率设为115200
UTX0IF = 1;                                 //UART0 TX中断标志初始置位1 
U0CSR |= 0X40;				//允许接收
IEN0 |= 0x84;				//开总中断,接收中断

}

/****************************************************************
主函数
****************************************************************/
void main(void)
{
initUART0();
LED_Init();
while(1)
{

}

}
/****************************************************************
串口接收一个字符:一旦有数据从串口传至CC2530,则进入中断,将接收到的数据赋值给变量temp.
****************************************************************/
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{

URX0IF = 0;

Recdata[datanumber++] = U0DBUF;
if(datanumber==5)
{
if(Recdata[0] == ‘L’ && Recdata[1] == ‘E’ && Recdata[2] == ‘D’&& Recdata[3] == ‘1’&& Recdata[4] == ‘1’)
LED1=0;
if(Recdata[0] == ‘L’ && Recdata[1] == ‘E’ && Recdata[2] == ‘D’&& Recdata[3] == ‘1’&& Recdata[4] == ‘2’)
LED1=1;
if(Recdata[0] == ‘L’ && Recdata[1] == ‘E’ && Recdata[2] == ‘D’&& Recdata[3] == ‘2’&& Recdata[4] == ‘1’)
LED2=0;
if(Recdata[0] == ‘L’ && Recdata[1] == ‘E’ && Recdata[2] == ‘D’&& Recdata[3] == ‘2’&& Recdata[4] == ‘2’)
LED2=1;
datanumber = 0;
//memset(Recdata,0,sizeof(Recdata));
}

}


1.每隔10秒采集一次VDD/3的电压值并显示出来,并且当串口接收到来自串口调试助手发送来的0x01时,发送VDD/3的电压值。  
 \*2. 每隔20秒询问一次是否有AD采集任务,若收到回复“temp sensor”则令ADC采集片内温度传感器的值并显示出来,若收到回复“vdd”则令ADC采集VDD/3的值并显示出来。



#include <iocc2530.h>
#include <string.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char

void initUART0(void);
void UartTX_Send_String(char *Data,int len);
float GetTemperature(void);
int counter=0;
char Temp[6];
/****************************************************************
串口发送字符串函数
****************************************************************/
void UartTX_Send_String(char *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}

void TIM1_Init()
{
CLKCONCMD&=~0X7f; //晶振设置为32MHz
while(CLKCONSTA & 0x40); //等待晶振稳定

EA=1; //开总中断
T1IE=1; //开T1溢出中断
T1CTL=0x09; //0000 1001启动设32分频,设自由模式

}

float GetTemperature(void)
{
uint value,sum;
int i;
for(i=0;i<4;i++)
{
ADCCON3 = (0x3E); //选择1.25V为参考电压;14位分辨率;对片内温度传感器采样
ADCCON1 |= 0x30; //选择ADC的启动模式为手动
ADCCON1 |= 0x40; //启动AD转化
while(!(ADCCON1 & 0x80)); //等待 AD 转换完成
value = ADCL >> 2; //ADCL 寄存器低 2 位无效,由于他只有12位有效,ADCL寄存器低4位无效。网络上很多代码这里都是右移两位,那是不对的
value |= (((uint)ADCH) << 6);
sum+=value;
}
value=sum>>2;
return (value-1367.5)/4.5;
}

/****************************************************************
初始化串口0函数
****************************************************************/
void initUART0(void)
{
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ

PERCFG = 0x00;				//位置1 P0口
P0SEL = 0x3c;				//P0用作串口
P2DIR &= ~0XC0;                             //P0优先作为UART0 
U0CSR |= 0x80;				//串口设置为UART方式
U0GCR |= 11;				
U0BAUD |= 216;				//波特率设为115200
UTX0IF = 1;                                 //UART0 TX中断标志初始置位1 
U0CSR |= 0X40;				//允许接收
IEN0 |= 0x84;				//开总中断,接收中断

}

/****************************************************************
主函数
****************************************************************/
void main(void)
{
initUART0();
TIM1_Init();
while(1)
{
}
}

#pragma vector = T1_VECTOR
__interrupt void Uart(void)
{

IRCON=0x00;
if(counter <15)  // 自由模式1s 
{
  counter++;
}else{
    counter=0;   
    float AvgTemp = GetTemperature();         
   
    memset(Temp, 0, 6);
    sprintf(Temp,"%.2f", AvgTemp);//将浮点数转成字符串
    UartTX\_Send\_String(Temp,5);
    UartTX\_Send\_String(" ",10);
}

}


无线射频收发实验



#include “ioCC2530.h”
#define LED2 P2_0
static unsigned char buf[128];
static int len=0;
unsigned char i;

void Delay(unsigned char m)
{
int i=0,j=0;
for(i=0;i<1000;i++)
{
for(j=0;j < m; j++);
}
}

/***********************
*串口初始化
*返回参数 无
***********************/
void initUARTtest(void)
{

CLKCONCMD &= ~0x40;  //晶振
while(!(SLEEPSTA & 0x40));   //等待晶振稳定 
CLKCONCMD &= ~0x47;     //TICHSPD128分频,CLKSPD不分频 
SLEEPCMD |= 0x04; 	//关闭不用的RC振荡器 
PERCFG = 0x00;		 //位置1 P0口 
P0SEL = 0x3c;		//P0用作串口 
U0CSR |= 0x80;//UART方式 
U0GCR |= 10;	//波特率设为57600 
U0BAUD |= 216;
UTX0IF = 0;//中断标志清0
U0CSR |= 0X40;//允许接收
IEN0 |= 0x84;	//开总中断,接收中断 

}

/*************************************************/
void UartTX_Send_String(unsigned char *Data,int len)
{
int j;
//LED2 = ~LED2;
for(j=0;j<len;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}

void rf_init()
{
//硬件CRC以及AUTO_ACK使能
//FRMCTRL0 |= (0x20 | 0x40); /* AUTO_ACK | AUTO_CRC */
TXFILTCFG = 0x09;//设置TX抗混叠过滤器以获得合适的带宽
AGCCTRL1 = 0x15;//调整AGC目标值
FSCAL1 = 0x00;//获得最佳的EVM
RFIRQM0 |= (1<<6);// RXPKTDONE 中断位使能
IEN2 |= (1<<0);// RF 中断使能
EA = 1;//开中断
FREQCTRL = 0x0d; //信道选择,选择11信道
SHORT_ADDR0 = 0x05;//目标地址过滤期间使用的短地址
SHORT_ADDR1 = 0x00;
PAN_ID0 = 0x22; //目标地址过滤期间使用的PANID
PAN_ID1 = 0x00;
RFST = 0xed; //清除RXFIFO缓冲区并复位解调器
RFST = 0xe3; //为RX使能并校准频率合成器
FRMFILT0 &= ~(1<<0);//禁止帧过滤
//FRMFILT0 = 0x0C;
}

#pragma vector=RF_VECTOR
__interrupt void rf_isr(void)
{
unsigned char i;

EA = 0; //关中断
//接收帧结束
if (RFIRQF0 & (1<<6)) {       
	len = RFD-2;//接收帧长度
	len &= 0x7f;
	//将接收的数据写入buf中
	for (i = 0; i < len; i++) 
        {
            buf[i] = RFD;
            //Delay(200);
		}
	RFST =0xED; //清除接收缓冲区
    UartTX\_Send\_String(buf,len); //Uart0SendString(buf); 
	S1CON = 0;  // 清RF中断
    RFIRQF0 &= ~(1<<6); //清 RXPKTDONE中断
    LED2 = ~LED2; //LED1灯状态改变 
}
EA = 1; 

}

void tx()
{
unsigned char i;
unsigned char mac[]="hncu ";

RFST = 0xe3; //为RX使能并校准频率合成器
//wait for SFD not active and TX\_Active not active 
// TX\_ACTIVE | SFD 
while (FSMSTAT1 & ((1<<1) | (1<<5))); 
RFIRQM0 &= ~(1<<6); //禁止RXPKTDONE中断
IEN2 &= ~(1<<0); //禁止RF中断
RFST = 0xee; // ISFLUSHTX 
RFIRQF1 = ~(1<<1);// 清除 TXDONE 中断
     	 
RFD = 8;// 传输的帧长度
//将mac的内容写到RFD中
for(i=0;i<6;i++)
    {
      RFD = mac[i];
    } 
RFIRQM0 |= (1<<6);// 打开RX中断
IEN2 |= (1<<0);//打开RF中断
     
RFST = 0xe9; //发送数据包ISTXON
while (!(RFIRQF1 & (1<<1)));//等待传输结束
RFIRQF1 = ~(1<<1);//清除 TXDONE状态 
LED2=~LED2;//LED1灯状态改变
//Delay(200);//延时

}

void main(void)
{
initUARTtest();
//P0DIR |= 0x01;
P2DIR |= 0x01;

LED2=1;//关闭LED2
EA = 0;//关闭总中断
SLEEPCMD &= ~0x04;//设置时钟频率为32M
//等待时钟稳定
while(!(SLEEPSTA & 0x40));
CLKCONCMD &= ~0x47;
SLEEPCMD |= 0x04; 
rf\_init();//初始化RF
EA = 1;//中断使能 
//发送或等待接收中断
while(1) {
    //宏定义RX
    #ifndef RX //如果没有定义RX,开始发送
        tx();
        Delay(200);//延时
        //Delay(200);
    # else //如果定义RX,等待接收断中
        //UartTX\_Send\_String(buf,len);
    #endif

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

O等大厂,18年进入阿里一直到现在。**

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-VHi84T4v-1715604083555)]

[外链图片转存中…(img-7UDzNnrz-1715604083556)]

[外链图片转存中…(img-fkIeivcQ-1715604083556)]

[外链图片转存中…(img-yp6Ra6m7-1715604083557)]

[外链图片转存中…(img-8dL34kxH-1715604083558)]

[外链图片转存中…(img-uKFY3t2N-1715604083558)]

[外链图片转存中…(img-V4Wqm6HW-1715604083559)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

  • 27
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值