嵌入式实验报告

实验报告
一、 小组成员 江剑豪 孙玉祥 张峻玮

二、 实验内容
1.LED发光二极管实验;
2.串口收发数据实验;
3.按键控制实验;

三、 实验环境

  1. 硬件:通用节点或任意传感器节点一个、USB仿真器、USB电缆、PC机;
  2. 软件:IAR Embedded Workbench for MCS-51、串口调试工具;

四、 实验目的

  1. 熟悉Zigbee硬件模块相关接口;
  2. 使用IAR 开发环境设计程序,利用CC2530 的串口0 进行数据收发通讯;利用CC2530 的GPIO读取按键值并相应对进行LED发光二极管的亮灭操作;利用CC2530 的IO口进行LED发光二极管的亮灭操作;

五、 实验步骤
1.LED发光二极管
1-1.使用USB 仿真器连接PC 机和通用节点模块,模块电源开关处于中间“OFF”档,使用仿真器给模块供电。
1-2.启动IAR 开发环境,打开“…\基础传感器实验\1-5基础例程\1-LED”目录下的实验工程。
1-3.在IAR 开发环境中编译程序、调试程序。按“F7”使程序运行,观察现象,可以看到发光二极管轮流亮起。
1-4.使用调试界面上的go按钮 (等同“F5”),观察现象。
1-5.修改程序,使led灯按奇偶顺序依次亮灭。
#include <ioCC2530.h>
#define D_COUNT 50 //通用延时时间计数
/***************************************
延时函数,n为延时周期计数
/
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 = 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;
}
}

2.串口数据收发
2-1. 使用USB 仿真器连接PC 机和ZIGBEE模块。将系统配套USB线一端连接PC 机,一端连接ZIGBEE模块的MINI-USB接口上。
2-2连接USB电缆时,需要安装USB转串口的驱动程序,在“…\基础传感器实验\1-5基础例程\2-串口”目录下运行程序“CH341SER.EXE”安装驱动。
2-3.启动IAR 开发环境,打开“…\基础传感器实验\1-5基础例程\2-串口”目录下的实验工程。
2-4.在IAR 开发环境中编译程序、调试程序。按“F7”使程序运行。
2-5.打开“…\基础传感器实验\1-5基础例程\2-串口”目录下的串口调试程序“串口调试程序(支持中文).EXE”。按照下图设置这几项:串口号选择刚刚在设备管理器中记下的串口号;波特率选择“115200”;点击右下角的发送数据按钮,可以看到接受文本框中显示接受到同样的数据。
2-6.更换发送文本框“字符串输入框”中的内容,点击发送按钮。可以看到相同的字符串又被返回。
#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”;
/*****************************************************************************
功能描述: 延时
Count: 延时单位数量
/
void DelayXms(unsigned int Count)
{
unsigned int i;
unsigned int j;
for(i = 0; i < Count; i++)
{
for( j=10000; j>0; j–);
}
}
/

功能描述: IO初始化
*****************************************************************************/
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; //总中断开关打开
}
/

功能描述: 串口发送字符串
string: 字符串指针
lenth: 长度
*/
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;
}

3.按键控制
3-1.使用USB 仿真器连接PC 机和任意一个传感器节点模块,模块电源开关处于“ON”档,使用电池给模块供电(如电池电量低插上USB电缆,可一边充电一边使用)。
3-2.启动IAR 开发环境,打开“…\基础传感器实验\1-5基础例程\3-按键控制”目录下的实验工程。
3-3.在IAR 开发环境中编译程序、调试程序。按“F7”使程序运行。
3-4.观察现象,可以看到2个发光二极管都没有亮起。
3-5.按下模块中间的“KEY”按键,观察2个发光二极管的状态。
3-6.重复按键操作,尝试长按或短按,观察发光二极管状态。修改程序中的延时数值(下图中红点行)后再重复上面操作,体会不同延时下的效果。
#include <ioCC2530.h>
#define D_COUNT 50 //标准延时周期计数
#define KEY_INPUT P2_0 //定义按键引脚
/*****************************************************************************
功能描述: 延时
Count: 延时单位数量
/
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);
}
}

六、 实验结果

  1. LED灯按顺序亮灭;LED灯按奇偶数码顺序亮灭
  2. 显示出welcome to test this problem;显示出hello 你好!hello 我好!hello 大家好!
  3. 0代表灯灭,1代表灯亮,按一下key键后灯按照00、01、10、11顺序显示
    七、 实验反思
    对函数理解不清导致进度缓慢。

猜你喜欢

转载自blog.csdn.net/weixin_43470799/article/details/84323979