论文部分内容阅读
【摘 要】教育教学须因材施教,面对高职学生群体,应运用怎样的教学方法才能达到最佳教学效果呢?根据自己多年教学体会,认为高职课堂教学,既不能等同于高中教学,也不能完全照搬高校教学。它必须具有高职的特色,其课堂教学既要注重知识性,更要注重趣味性,理论够用,技能为主,通过学生跟着老师做、学生学着自己做、理论教学做总结的方式,通过实践体会理解掌握单片机的功能应用技能。
【关键词】高职教学;ZigBee无线技术;单片机数据通讯应用
1.引言
当前各类高职技能大赛项目的机器人控制、非接触识别等等科目,单片机的数据通讯应用属于必用项目。如何设计数据通讯知识的教学,使得掌握单片机数据采集或者控制所需数据传输给其他单片机或者远端PC,是必须面对的科目。
2.数据通讯的方法
单片机的常用数据通信主要分为以下类型:
类型1:串行通讯
使用单片机的串口接口(Serial Interface),将数据逐位顺序传送的过程称为串口通讯。串口通讯特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,但传送速度较慢。CC2530具有USART0/USART1两个串口供用户使用,通过RS232接口线将单片机的数据传递到PC机或接收PC机发出的指令。还可以设计相应线路板,实现单片机之间的串口数据通讯。
类型2:无线局域网通讯
使用ZigBee无线技术,CC2530单片机模块板可以在0~75m的范圍内,以IEEE 802.15.4标准的下实现无线数据收发功能。一个ZigBee网络最多可以容纳254个从设备和1个主设备。一个区域内最多可以存在100个网,而且组网灵活,用于实现单片机板之间的数据通讯。通讯方式可以是一对一、一对多、多对多、级联组网等,用户可以设计灵活的数据协议来实现数据通讯。
局域网无线通讯和串口通讯的灵活组合,可以满足大多数用户的数据交流与控制需求,且结合其他通讯设备,方便实现远程监控。
3.UART串口通讯设计步骤
UART串口通讯实现步骤为:设置串口初始化、读写串口处理等步骤。又根据数据传输方向,分为单片机→PC、PC→单片机数据传输的作不同配置。在完成初始化串口配置以后,将需要传输的数据存入缓存UxDBUF,并且需要等待一定时间,等待数据被接收方取走,发送数据不宜使用发送中断(PC实时性差,容易乱码,故使用定时器T1设置定时发送中断发送字符数据,可以通过调试测试出最佳等待时间)。接收数据则可以使用接收中断来实现数据接收(单片机实时性好)。实验参考代码如下:
3.1单片机→PC初始化设置函数(使用UART0口,异步通讯模式,波特率为57600)
void initUART01(void)
{ //片内外设引脚位置采用上电复位默认值,即PERCFG寄存器采用默认值
PERCFG = 0x00; //位置 1 P0 口
P0SEL = 0x3c; //定义P0 用作串口, P0.2、P0.3、P0.4、P0.5作为片内外设I/O
U0BAUD = 216; U0GCR = 10; //波特率为57600
U0CSR |= 0x80; // 模式选择UART模式
U0UCR |= 0x80; // 进行USART初始化清除
UTX0IF = 0; // 清零UART0 TX发送中断标志 }
3.2PC→单片机初始化设置函数(使用UART0口,异步通讯模式,波特率为57600)
void initUART02(void)
{ //片内外设引脚位置采用上电复位默认值,即PERCFG寄存器采用默认值
PERCFG = 0x00; //位置 1 P0 口
P0SEL = 0x3c; //定义P0 用作串口, P0.2、P0.3、P0.4、P0.5作为片内外设I/O
U0BAUD = 216; U0GCR = 10; //波特率为57600
U0CSR |= 0x80; // 模式选择UART模式
U0UCR |= 0x80; // 进行USART初始化清除
U0CSR |= 0x40; //允许UART0接收数据。特别强调必须在其他配置完成后才能配置,不能和模式选择一起配置
URX0IF = 0; // 清零UART0 RX接收中断标志 }
3.3发送功能代码参考(设计定时中断,在中断中定时发送,假设为:0.02s)
void UART0SendByte(unsigned char c) // 发送一字节
{ U0DBUF = c; // 将要发送的1字节数据写入U0DBUF(串口 0 收发缓冲器)
while (!UTX0IF); // 等待TX中断标志,即U0DBUF就绪
UTX0IF = 0; // 清零TX中断标志 }
void UART0SendString(unsigned char *str) // UART0发送一个字符串
{ while(1)
{ if(*str == ‘\0’)
break; // 遇到结束符,退出
UART0SendByte(*str++); // 发送一字节 } }
3.4接收功能代码参考
#pragma vector=URX0_VECTOR //中断向量表的设置 __interrupt void URX0_ISR(void)
{ URX0IF = 0;//清中断标志
receive_handler(); //调用接收数据后处理函数(略)}
3.5定时发送中断设计等其他相关辅助代码,参见教学研究二、三
4.无线局域网通讯设计
借助于TI公司提供基于CC2530的软件代码BasicRF包,实现ZigBee无线通讯十分简单。BasicRF是简单的无线点对点传输协议,可以用来进行无线设备数据传输的入门学习开发相对简单的无线控制与无线传感网络。这样无需深入了解无线通讯底层协议理论(这对于高职学生是非常困难的…),只要教会学生使用BasicRF包实现无限传输数据的方法即可。教师需要对BasicRF包的应用,合理做出功能上的划分,设计好实现程序的框架,教授学生将功能函数添加到框架的合适的部位,实现数据的传输。
4.1根据TI公司提供基于CC2530的软件代码BasicRF包的使用说明,进行编程环境的基本配置(略)
4.2初始化
//BasicRF地址设置:
#define RF_CHANNEL 20 // 频道 11~26
#define PAN_ID 0x1A5B //网络id 0x0000-0xFFFF
#define MY_ADDR 0x1015 //本机模块地址 id 0x0000-0xFFFF
#define SEND_ADDR 0xAC3A //发送地址 0x0000-0xFFFF
//提示:发送模块和接收模块MY_ADDR和SEND_ADDR相反。
//多组同时实验:RF_CHANNEL / PAN_ID 至少一个不一样
//模块相关资源初始化
void halBoardInit(void )
//无线收发参数的配置初始化
void ConfigRf_Init(void );
//检查结构变量配置端口是否成功,返回值成功为SUCCESS 0,失败为FAILED 1
uint8 basicRfInit(&basicRfConfig)
4.3发送与接收函数
//发送“ZIGBEE TEST \r\n”,13個字符,成功返回值为0:
uint8 basicRfSendPacket(SEND_ADDR,”ZIGBEE TEST\r\n”,13);
//判断有无收到zigbee信号,有为真返回值为1:
uint8 basicRfPacketIsReady();
//接收数据放缓存pRxData中,缓冲区最大长度为MAX_RECV_BUF_LEN ,返回值是数据串长度
uint8 basicRfReceive(pRxData, MAX_RECV_BUF_LEN, NULL);
4.4主程序框架(参见图1)
void main(void)
{ uint16 len = 0;
halBoardInit(); //模块相关资源的初始化
ConfigRf_Init(); //无线收发参数的配置初始化
//LED1(绿)、LED2(红)点亮,参见教学研究二、三
while(1)
{ len = RecvUartData(); // 接收串口数据
if(len > 0)
{
// 绿灯取反,无线发送指示(略)
basicRfSendPacket(SEND_ADDR,uRxData,len);
//把串口数据通过zigbee发送出去}
if(basicRfPacketIsReady()) //查询有没收到无线信号
{ // 红灯取反,无线接收指示(略)
len = basicRfReceive(pRxData, MAX_RECV_BUF_LEN, NULL); //接收无线数据
halUartWrite(pRxData,len); //接收到的无线发送到串口数
}}}
说明:
⑴根据需要选择框架中功能块,不需要的删去即可;
⑵收发模块使用相同的框架流程,注意收发地址的对应关系。
5.数据通讯教学总结
通过框架式教学设计的实践,学生基本上能够完成数据通讯功能的设计,并且能够自由拓展应用,设计6组及以上的单片机组网应用项目,并且结合其他课程知识点,实现人机互动的PC级C#平台监控界面设计,部分学生可以实现手机远程操作平台对单片机网应用的实时监控。
参考文献:
[1] 姜仲 刘丹 ZigBee技术与实训教程[M]北京 清华大学出版社2014.
[2] 物联网无线传感网实训教程[M]北京 新大陆时代教育科技有限公司2014.
[3] 本书编委 ZigBee技术开发-CC2530单片机原理及应用[M]北京 清华大学出版社2015.
[4] 杨玥 单片机与接口技术-基于CC2530的单片机应用[M]北京 清华大学出版社2017.
【关键词】高职教学;ZigBee无线技术;单片机数据通讯应用
1.引言
当前各类高职技能大赛项目的机器人控制、非接触识别等等科目,单片机的数据通讯应用属于必用项目。如何设计数据通讯知识的教学,使得掌握单片机数据采集或者控制所需数据传输给其他单片机或者远端PC,是必须面对的科目。
2.数据通讯的方法
单片机的常用数据通信主要分为以下类型:
类型1:串行通讯
使用单片机的串口接口(Serial Interface),将数据逐位顺序传送的过程称为串口通讯。串口通讯特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,但传送速度较慢。CC2530具有USART0/USART1两个串口供用户使用,通过RS232接口线将单片机的数据传递到PC机或接收PC机发出的指令。还可以设计相应线路板,实现单片机之间的串口数据通讯。
类型2:无线局域网通讯
使用ZigBee无线技术,CC2530单片机模块板可以在0~75m的范圍内,以IEEE 802.15.4标准的下实现无线数据收发功能。一个ZigBee网络最多可以容纳254个从设备和1个主设备。一个区域内最多可以存在100个网,而且组网灵活,用于实现单片机板之间的数据通讯。通讯方式可以是一对一、一对多、多对多、级联组网等,用户可以设计灵活的数据协议来实现数据通讯。
局域网无线通讯和串口通讯的灵活组合,可以满足大多数用户的数据交流与控制需求,且结合其他通讯设备,方便实现远程监控。
3.UART串口通讯设计步骤
UART串口通讯实现步骤为:设置串口初始化、读写串口处理等步骤。又根据数据传输方向,分为单片机→PC、PC→单片机数据传输的作不同配置。在完成初始化串口配置以后,将需要传输的数据存入缓存UxDBUF,并且需要等待一定时间,等待数据被接收方取走,发送数据不宜使用发送中断(PC实时性差,容易乱码,故使用定时器T1设置定时发送中断发送字符数据,可以通过调试测试出最佳等待时间)。接收数据则可以使用接收中断来实现数据接收(单片机实时性好)。实验参考代码如下:
3.1单片机→PC初始化设置函数(使用UART0口,异步通讯模式,波特率为57600)
void initUART01(void)
{ //片内外设引脚位置采用上电复位默认值,即PERCFG寄存器采用默认值
PERCFG = 0x00; //位置 1 P0 口
P0SEL = 0x3c; //定义P0 用作串口, P0.2、P0.3、P0.4、P0.5作为片内外设I/O
U0BAUD = 216; U0GCR = 10; //波特率为57600
U0CSR |= 0x80; // 模式选择UART模式
U0UCR |= 0x80; // 进行USART初始化清除
UTX0IF = 0; // 清零UART0 TX发送中断标志 }
3.2PC→单片机初始化设置函数(使用UART0口,异步通讯模式,波特率为57600)
void initUART02(void)
{ //片内外设引脚位置采用上电复位默认值,即PERCFG寄存器采用默认值
PERCFG = 0x00; //位置 1 P0 口
P0SEL = 0x3c; //定义P0 用作串口, P0.2、P0.3、P0.4、P0.5作为片内外设I/O
U0BAUD = 216; U0GCR = 10; //波特率为57600
U0CSR |= 0x80; // 模式选择UART模式
U0UCR |= 0x80; // 进行USART初始化清除
U0CSR |= 0x40; //允许UART0接收数据。特别强调必须在其他配置完成后才能配置,不能和模式选择一起配置
URX0IF = 0; // 清零UART0 RX接收中断标志 }
3.3发送功能代码参考(设计定时中断,在中断中定时发送,假设为:0.02s)
void UART0SendByte(unsigned char c) // 发送一字节
{ U0DBUF = c; // 将要发送的1字节数据写入U0DBUF(串口 0 收发缓冲器)
while (!UTX0IF); // 等待TX中断标志,即U0DBUF就绪
UTX0IF = 0; // 清零TX中断标志 }
void UART0SendString(unsigned char *str) // UART0发送一个字符串
{ while(1)
{ if(*str == ‘\0’)
break; // 遇到结束符,退出
UART0SendByte(*str++); // 发送一字节 } }
3.4接收功能代码参考
#pragma vector=URX0_VECTOR //中断向量表的设置 __interrupt void URX0_ISR(void)
{ URX0IF = 0;//清中断标志
receive_handler(); //调用接收数据后处理函数(略)}
3.5定时发送中断设计等其他相关辅助代码,参见教学研究二、三
4.无线局域网通讯设计
借助于TI公司提供基于CC2530的软件代码BasicRF包,实现ZigBee无线通讯十分简单。BasicRF是简单的无线点对点传输协议,可以用来进行无线设备数据传输的入门学习开发相对简单的无线控制与无线传感网络。这样无需深入了解无线通讯底层协议理论(这对于高职学生是非常困难的…),只要教会学生使用BasicRF包实现无限传输数据的方法即可。教师需要对BasicRF包的应用,合理做出功能上的划分,设计好实现程序的框架,教授学生将功能函数添加到框架的合适的部位,实现数据的传输。
4.1根据TI公司提供基于CC2530的软件代码BasicRF包的使用说明,进行编程环境的基本配置(略)
4.2初始化
//BasicRF地址设置:
#define RF_CHANNEL 20 // 频道 11~26
#define PAN_ID 0x1A5B //网络id 0x0000-0xFFFF
#define MY_ADDR 0x1015 //本机模块地址 id 0x0000-0xFFFF
#define SEND_ADDR 0xAC3A //发送地址 0x0000-0xFFFF
//提示:发送模块和接收模块MY_ADDR和SEND_ADDR相反。
//多组同时实验:RF_CHANNEL / PAN_ID 至少一个不一样
//模块相关资源初始化
void halBoardInit(void )
//无线收发参数的配置初始化
void ConfigRf_Init(void );
//检查结构变量配置端口是否成功,返回值成功为SUCCESS 0,失败为FAILED 1
uint8 basicRfInit(&basicRfConfig)
4.3发送与接收函数
//发送“ZIGBEE TEST \r\n”,13個字符,成功返回值为0:
uint8 basicRfSendPacket(SEND_ADDR,”ZIGBEE TEST\r\n”,13);
//判断有无收到zigbee信号,有为真返回值为1:
uint8 basicRfPacketIsReady();
//接收数据放缓存pRxData中,缓冲区最大长度为MAX_RECV_BUF_LEN ,返回值是数据串长度
uint8 basicRfReceive(pRxData, MAX_RECV_BUF_LEN, NULL);
4.4主程序框架(参见图1)
void main(void)
{ uint16 len = 0;
halBoardInit(); //模块相关资源的初始化
ConfigRf_Init(); //无线收发参数的配置初始化
//LED1(绿)、LED2(红)点亮,参见教学研究二、三
while(1)
{ len = RecvUartData(); // 接收串口数据
if(len > 0)
{
// 绿灯取反,无线发送指示(略)
basicRfSendPacket(SEND_ADDR,uRxData,len);
//把串口数据通过zigbee发送出去}
if(basicRfPacketIsReady()) //查询有没收到无线信号
{ // 红灯取反,无线接收指示(略)
len = basicRfReceive(pRxData, MAX_RECV_BUF_LEN, NULL); //接收无线数据
halUartWrite(pRxData,len); //接收到的无线发送到串口数
}}}
说明:
⑴根据需要选择框架中功能块,不需要的删去即可;
⑵收发模块使用相同的框架流程,注意收发地址的对应关系。
5.数据通讯教学总结
通过框架式教学设计的实践,学生基本上能够完成数据通讯功能的设计,并且能够自由拓展应用,设计6组及以上的单片机组网应用项目,并且结合其他课程知识点,实现人机互动的PC级C#平台监控界面设计,部分学生可以实现手机远程操作平台对单片机网应用的实时监控。
参考文献:
[1] 姜仲 刘丹 ZigBee技术与实训教程[M]北京 清华大学出版社2014.
[2] 物联网无线传感网实训教程[M]北京 新大陆时代教育科技有限公司2014.
[3] 本书编委 ZigBee技术开发-CC2530单片机原理及应用[M]北京 清华大学出版社2015.
[4] 杨玥 单片机与接口技术-基于CC2530的单片机应用[M]北京 清华大学出版社2017.