嵌入式实验
实验一:LED发光二极管实验
1.实验环境
1)硬件:通用节点一个、USB仿真器、PC机;
2)软件:IAR Embedded
Workbench for
MCS-51;
2.实验内容
1)熟悉Zigbee硬件模块相关接口;
2)使用IAR开发环境设计程序,利用CC2530
的IO口进行LED发光二极管的亮灭操作;
3.
实验原理
1)硬件接口原理
2) 软件设计
#include
#define
D_COUNT 50
//通用延时时间计数
void Delay(unsigned int n)
{
unsigned
int t,tt;
for(tt=0;tt
for(t=0;t<1000;t++)
;
}
void main( void )
{
unsigned
int i;
P0DIR =0xff;
//设置P0口全部为输出
P1DIR =0xff;
//设置P1口全部为输出
P0 =0xff;
//点亮所有灯
P1 =0xff;
Delay(D_COUNT);Delay(D_COUNT);Delay(D_COUNT);
P0 =0;
//熄灭所有灯
P1 =0;
Delay(D_COUNT);Delay(D_COUNT);Delay(D_COUNT);
while(1)
{
for(i=0;i<8;i++)
{
P0 =0x01<<i;
//P0的第i位为1,其它位为0
//P1_0 ^=1;
//P1.0取反
Delay(D_COUNT);
//设置IO状态后需要一个延时来让我们看到效果
}
P0 = 0;
for(i=0;i<8;i++)
{
P1 =
0x01<<i;
//P1的第i位为1,其它位为0
//P0_0 ^=1;
//P0.0取反
Delay(D_COUNT);
//设置IO状态后需要一个延时来让我们看到效果
}
P1 = 0;
}
}
程序首先通过配置CC2530相关控制寄存器P0DIR、P1DIR来设置P0、P1工作于普通GPIO的输出模式。然后点亮所有灯,经过一个长延时后再熄灭所有灯,再经过一个长延时后进入程序主循环。在循环中首先依次将P0的某一位置1(从低到高,其他位为0,每次置位后在进行一个标准延时)。然后对P0所有位清0,接着对P1口执行以上类似操作。P1口操作结束后清0,再回到上面循环对P0口进行操作……
4. 实验步骤
·使用USB 仿真器连接PC 机和通用节点模块,模块电源开关处于中间“OFF”档,使用仿真器给模块供电。
·启动IAR 开发环境,打开“...\基础传感器实验\1-5基础例程\1-LED”目录下的实验工程。
·在IAR 开发环境中编译程序、点击下载、调试程序。按“F5”使程序运行。
·观察现象,可以看到发光二极管轮流亮起。
·使用调试界面上的停止按钮使程序停止,观察现象是否停止。(现象停止)
·使用调试界面上的go按钮(等同“F5”),观察现象。(二极管轮流亮起)
实验二:串口收发数据实验
1.实验环境
1)硬件:通用节点或任意传感器节点一个、USB仿真器、USB电缆、PC机;
2)软件:IAR Embedded
Workbench for
MCS-51、串口调试工具;
2.实验内容
1)熟悉Zigbee硬件模块相关接口;
2)使用IAR开发环境设计程序,利用CC2530
的串口0 进行数据收发通讯;
3.实验原理
1) 硬件接口原理
2)软件设计
#include "ioCC2530.h"
#include <string.h>
#define uint unsigned int
#define uchar unsigned char
//定义控制灯的端口
#define led1 P1_0
#define led2 P1_1
void InitIO(void);
//IO初始化
void InitUart(void);
//串口初始化
void SendString(char*string,uint legth);
//发送字符串
uchar temp; //存放接受的数据
char wch[] = "Welcome to test this program!\n";
void DelayXms(unsigned int Count)
{
unsigned int i;
unsigned int j;
for(i = 0; i < Count; i++)
{
for( j=10000;j>0; j--);
}
}
void InitIO(void)
{
SLEEPCMD
&= ~0X04;
CLKCONCMD =
0X10;
//32k和32M时钟使用外部晶体,timer分频8M
while(CLKCONSTA!=0X10);
//等待时钟切换
SLEEPCMD = 0X04;
P2DIR =0x00;
//高两位零
若设则最高优先USART0
P1DIR|=0X03;
//P1.0 P1.1 LEDs 灯端口配置
P0DIR|=0X00;
//input
PERCFG =0x00;
//UART0 默认端口
P1SEL = 0X00;
P0SEL =0X0c;
//P0<3:2>设置成外围应用
}
void InitUart(void)
{
U0CSR |= 0x80;
//UART方式
U0GCR = 11;
//baud_e 波特率设为115200
U0BAUD |= 216; //baud_m =
BaudRate*2^(28-buad_e)/32M-256//BaudRate=(256+baud_m)/2^(28-buad_e)x32MHz
UTX0IF =1; //接收中断标记
U0CSR |= 0X40; //允许接收
URX0IE =1; //接收中断使能
EA =1;
//总中断开关打开
}
void SendString(char*string,uint lenth)
{
uint j;
for (j=0;
j<lenth; j++)
{
U0DBUF
= *string++;
//将要发送字符送入U0DBUF发送寄存器
while(UTX0IF == 0);
//等待发送完成
UTX0IF
= 0;
//清0标志位
}
}
void main(void)
{
InitIO();
InitUart();
DelayXms(10);
led1=1;
//点亮2个LED灯
led2=1;
SendString(wch,sizeof(wch));
while(1)
{
;
//进入无限循环等待中断函数被处触发
}
}
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
URX0IF = 0;
//清中断标志
temp = U0DBUF;
U0DBUF = temp; //将收到的字符发送回去
while(UTX0IF == 0); //等待发送 UTX0IF = 0; //清发送标志
led1 = ~led1; //指示中断活动
led2 = ~led2;
}
DelayXms(unsigned int
Count):延时函数。
InitIO():完成IO初始化功作。InitUart():完成串口的初始化工作。
SendString(char*string,uint legth):完成从串口发送字符串。
main():主函数。完成各种初始化后进入循环等待串口接收中断被触法。
UART0_ISR():串口接收中断函数。将收到的字符从串口发回。同时改变LED灯的状态,指示串口收到数据。
此实验的是实验现象:
发送文本框“字符串输入框”中的内容,点击发送按钮。可以看到相同的字符串又被返回
实验三:按键控制实验
1.实验环境
硬件:传感器节点一个、USB仿真器、PC机;
软件:IAR Embedded Workbench for MCS-51;
2.实验内容
熟悉Zigbee硬件模块相关接口;
使用IAR 开发环境设计程序,利用CC2530 的GPIO读取按键值并相应对进行LED发光二极管的亮灭操作;
3.实验原理
1)硬件接口原理
2)软件设计
#include <ioCC2530.h>
#define D_COUNT
50
//标准延时周期计数
#define KEY_INPUT P2_0
//定义按键引脚
void Delay(unsigned int n)
{
unsigned int t,tt;
for(tt=0;tt<n;tt++)
for(t=0;t<1000;t++)
;
}
void main( void )
{
unsigned int i;
P0DIR =0x00;
//P0口全部为输入
P1DIR =0x03;
//P1口低2位输出,其他输入
P1 = 0;
Delay(D_COUNT);Delay(D_COUNT);Delay(D_COUNT);
while(1)
{
if(!KEY_INPUT)
//判断按键是否按下
{
i++;
P1 =i&0x03;
//P1低2位赋值为i的低2位
Delay(100);
//延时,加长2次判断间隔
}
Delay(10);
}
}
程序通过读取P2.0的信息来获得按键的状态,同时对P1上的2个发光二极管进行操作。程序中的长延时是为了使得一定时间内的按下只被识别为一次按下,短延时是为了滤掉可能的干扰信号。
4.实验步骤
1)使用USB 仿真器连接PC
机和任意一个传感器节点模块,模块电源开关处于“ON”档,使用电池给模块供电(如电池电量低插上USB电缆,可一边充电一边使用)。
2)启动IAR 开发环境,打开“...\基础传感器实验\1-5基础例程\3-按键控制”目录下的实验工程。
3)在IAR 开发环境中编译程序、点击下载、调试程序。按“F5”使程序运行。
4)观察现象:可以看到2个发光二极管都没有亮起。
当按下模块中间的“KEY”按键,可观察到发光二极管亮起。按住其中一个按键,在短时间内松手,则认为是短按,LED亮起又熄灭;如果一直按住这个按键不松手,那么超过规定的长时间内,则认为是长按,LED会持续亮一段时间。