STC51单片机实现蓝牙无线下载程序
2013-08-04 17:32
393 查看
STC51单片机一般是通过串口线下载程序到MCU。但是,有时候单片机放在作品上,串口线不够长,不方便下载,或者频繁拔插单片机,也不方便。
本方法,通过笔记本蓝牙,蓝牙串口模块HC-05,即可实现STC51单片机无线下载程序到MCU。
需要以下准备:
有蓝牙模块的笔记本。
蓝牙串口模块HC-05
STC51单片机
STC-ISP V6.53(只要能任意选择COM口的都行。)
USB转串口模块
第一步:
打开笔记本蓝牙模块。首先你要确定你有蓝牙模块和装好相应的驱动,这里我就不详细展开了。不同笔记本打开方式不同。我的联想Y笔记本如图1:
第二步:
将USB转串口和HC-05的VCC,GND,相连,TXD接RXD,RXD接TXD。将USB转串口模块插入笔记本。此时HC-05指示灯应该是快速闪烁。
如上图,点击添加设备,搜索到HC-05后连接,输入设备的配对码 1234 ,如图2,
然后就连接成功,在 控制面板\硬件和声音\设备和打印机 里便可以看到HC-05了。在HC-05上右键,属性,硬件,便可以看到COM口号,COM28,如图3。
第三步:
将HC-05模块的PIO11置高(我买的模块有个按键),上电,模块便进入AT命令响应模式。此时HC-05指示灯应该是慢速地闪烁。
此时可以打开任意串口助手软件,如STC-ISP的串口助手,设置波特率38400,数据位8位,停止位1位,无校验位,无流控制。
串口发送字符: AT(后面要加个回车键,我之前不知道,以为没进入AT模式),成功则返回OK。
接下来设置HC-05工作模式:波特率9600,数据位8位,停止位1位,偶校验,无流控制。串口发送字符:AT+UART=9600,0,2
然后就可以关闭串口了。
第四步:
将HC-05插到单片机上,还是一样,VCC,GND,相连,TXD接RXD,RXD接TXD。
硬件部分就完成了。
第五步:
在单片机程序中加入ISP.c,ISP.h,在程序开关调用函数 UARTInit(); 实现STC51单片机的ISP。
第六步:
先用普通的正常下载方式将包含有ISP功能的程序下载到STC51单片机上。
打开STC-ISP(V6.53),设置如图,点击发送自定义下载命令即可实现远程下载。
补充:最高,最低波特率要设置为9600
说明1:
ISP,即In-System Programming,在线编程。
具有ISP功能的单片机芯片,可以通过简单的下载线直接在电路板上给芯片写入或者擦除程序,并且支持在线调试。
说明2:
须先下载一次有ISP功能的程序到单片机,之后才能实现冷启动下载程序,即ISP功能。
本方法,通过笔记本蓝牙,蓝牙串口模块HC-05,即可实现STC51单片机无线下载程序到MCU。
需要以下准备:
有蓝牙模块的笔记本。
蓝牙串口模块HC-05
STC51单片机
STC-ISP V6.53(只要能任意选择COM口的都行。)
USB转串口模块
第一步:
打开笔记本蓝牙模块。首先你要确定你有蓝牙模块和装好相应的驱动,这里我就不详细展开了。不同笔记本打开方式不同。我的联想Y笔记本如图1:
第二步:
将USB转串口和HC-05的VCC,GND,相连,TXD接RXD,RXD接TXD。将USB转串口模块插入笔记本。此时HC-05指示灯应该是快速闪烁。
如上图,点击添加设备,搜索到HC-05后连接,输入设备的配对码 1234 ,如图2,
然后就连接成功,在 控制面板\硬件和声音\设备和打印机 里便可以看到HC-05了。在HC-05上右键,属性,硬件,便可以看到COM口号,COM28,如图3。
第三步:
将HC-05模块的PIO11置高(我买的模块有个按键),上电,模块便进入AT命令响应模式。此时HC-05指示灯应该是慢速地闪烁。
此时可以打开任意串口助手软件,如STC-ISP的串口助手,设置波特率38400,数据位8位,停止位1位,无校验位,无流控制。
串口发送字符: AT(后面要加个回车键,我之前不知道,以为没进入AT模式),成功则返回OK。
接下来设置HC-05工作模式:波特率9600,数据位8位,停止位1位,偶校验,无流控制。串口发送字符:AT+UART=9600,0,2
然后就可以关闭串口了。
第四步:
将HC-05插到单片机上,还是一样,VCC,GND,相连,TXD接RXD,RXD接TXD。
硬件部分就完成了。
第五步:
在单片机程序中加入ISP.c,ISP.h,在程序开关调用函数 UARTInit(); 实现STC51单片机的ISP。
/****************************************************************************** * 文 件: ISP.c * 原作者: 李锋源 * 修 改: ZhnJa * 创建日期: 2011-7-15 * 修改日期: 2013-8-01 * 说 明: 原文件为阿土开发板的Driver.c,提取出来的ISP下载程序。 ******************************************************************************/ #include "ISP.h" #include "STC12C5A60S2.h" #include <intrins.h> #ifdef Self_Define_ISP_Download //如果有自定义ISP下载功能 unsigned char bufptr; code unsigned char passward[]={ICPCODE}; unsigned char buf[sizeof(passward)*2]; //静态串口缓冲区 #endif /****************************************************************************** * UART初始化 *描 述:串口初始化函数, 通常是在使用串口前调用本函数来进行初始化, 通常是在 * main函数中调用。 *入口参数:无 *返 回:无 *注 意:串口使用的是中断模式 ******************************************************************************/ void UARTInit(void) { #define Fclk 11059200UL //晶振 11.059M 不可以写成11059200 #define BitRate 9600UL //9600b/s unsigned char i; unsigned int j; #ifdef Self_Define_ISP_Download //自定义下载使用到 bufptr = 0; for( i=0; i<sizeof(buf); i++) { buf[i] = 0; } #endif EA=0; //暂时关闭中断 TMOD &= 0x0F; TMOD |=0x20; //定时器1工作在模式2,自动重装模式 SCON=0x50; //串口工作在模式1 TH1=256-(Fclk/(BitRate*12*16)); //计算定时器重装值 TL1=256-(Fclk/(BitRate*12*16)); PCON|=0x80; //串口波特率加倍 // ES=1; //串行中断允许 TR1=1; //启动定时器1 REN=1; //允许接收 EA=1; //允许中断 for(i=0;i<8;i++) //短暂延时判断有无ISP下载命令 { for(j=0;j<40000;j++) { if(RI) { RI = 0; IAP_CONTR = 0x60; //复位到IAP } } } ES=1; //串行中断允许 } /****************************************************************************** * 延时1s函数 *描 述:延时1s函数,在UartInit()调用供ISP延时。 *入口参数:无 *返 回:无 *注 意: ******************************************************************************/ void delay1s(void) { unsigned char i,j,k; for(i=0;i<200;i++) { for(j=0;j<200;j++) { k = 10; while(k--); } } } /****************************************************************************** * 发送一个字符 *描 述:向串口发送一个字符。 *入口参数:要发送的字符 *返 回:无 *注 意: ******************************************************************************/ void SendByte(unsigned char c) { SBUF = c; while(!TI); TI = 0; } /****************************************************************************** * 发送一个字符串 *描 述:向串口发送一个字符串 *入口参数:*s要发送的字符串 *返 回:无 *注 意: ******************************************************************************/ void SendStr(char *s) { while(*s) { SendByte(*s++); } } /****************************************************************************** * 串口0中断 *描 述:串口0(UART0)中断。 *入口参数:无 *返 回:无 *注 意: ******************************************************************************/ void UartISR(void) interrupt 4 { #ifdef Self_Define_ISP_Download unsigned char ptScr,ptDst; if(RI) { RI = 0; //清标志位 buf[bufptr] = SBUF; ptScr = bufptr; if(bufptr==sizeof(buf)) { bufptr = 0; } else { bufptr++; } while(buf[ptScr] == passward[ptDst]) { if(ptScr == 0) { ptScr = sizeof(buf)-1; } else { ptScr--; } if(ptDst == 0) { // reset(); delay1s(); //复位前提示程序 IAP_CONTR = 0x60; //复位到IAP } else { ptDst--; } } //用户程序开始 //用户程序结束 }//End if(RI) if(TI) //发送完成 { TI = 0; //清标志位 } #else //如果不使用自定义ISP下载程序 if(RI) { RI = 0; } else { TI = 0; } #endif } /*======================End Of File====================*/
/****************************************************************************** * 文 件: ISP.h * 原作者: 李锋源 * 修 改: ZhnJa * 创建日期: 2011-7-15 * 修改日期: 2013-8-01 ******************************************************************************/ #ifndef __ISP_H__ #define __ISP_H__ #include "STC12C5A60S2.h" //系统配置 #define Self_Define_ISP_Download //ISP下载 #define ICPCODE 0x12,0x34,0x56,0x78,0x90,0xAB,0xCD,0xEF #define FOSC 11059000UL #define T100HZ (FOSC/12/100) //函数声明 //串口 void UARTInit(void); void UARTInit(void); void SendByte(unsigned char c); void SendStr(char *s); void delay1s(void); #endif
第六步:
先用普通的正常下载方式将包含有ISP功能的程序下载到STC51单片机上。
打开STC-ISP(V6.53),设置如图,点击发送自定义下载命令即可实现远程下载。
补充:最高,最低波特率要设置为9600
说明1:
ISP,即In-System Programming,在线编程。
具有ISP功能的单片机芯片,可以通过简单的下载线直接在电路板上给芯片写入或者擦除程序,并且支持在线调试。
说明2:
须先下载一次有ISP功能的程序到单片机,之后才能实现冷启动下载程序,即ISP功能。
相关文章推荐
- 【厉害了】台达PLC可以实现无线下载程序!
- 【厉害了】台达PLC可以实现无线下载程序!
- STC12单片机实现自动下载程序
- Windows 7 64位用STC ISP下载51单片机程序的方法
- STC 51单片机程序下载失败总结
- 版本自动更新程序及3种实现策略程序下载(附源码)
- AjaxPanel自定义控件实现页面无刷新数据交互(做了个示例程序, 效果确实比较Cool, 用法非常简单! )(示例代码下载)
- 使用STC-ISP下载程序
- 用asp实现文件浏览、上传、下载的程序
- Android之蓝牙 聊天程序的设计和实现 bluetooth chat
- C#实现在winfrom程序中下载文件
- 51单片机为什么无法下载程序?
- 微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
- stc单片机“全自动下载”(程序版)
- js页面(页面上无服务端控件,且页面不刷新)实现请求一般处理程序下载文件方法
- 一个java实现的简单文件下载程序
- 美国无线通信共同美分TeLexFREE多帐号批量贴广告助手程序下载
- STC单片机程序下载失败总结
- java awt实现小程序动态闪图源代码例子下载:I Iove You
- STC单片机程序下载问题汇总