Chinaunix首页 | 论坛 | 博客
  • 博客访问: 233718
  • 博文数量: 27
  • 博客积分: 270
  • 博客等级: 二等列兵
  • 技术积分: 444
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-21 19:55
个人简介

Enjoy yourself!

文章分类

分类: 嵌入式

2013-05-08 14:32:19

本文转自


本人玩单片机只是娱乐,并无工程应用,所以手中的单片机芯片很少,只有几片AT89S51/52及AT89C2052和一片STC12C5A60S2及一片STC12C4052AD,由于不会使用软件仿真,所以只是用单片机最小系统进行仿真实验,为了达成一个想法、实现一种控制用途,往往需要反复调试程序,也就需要反复下载程序到单片机芯片中;以前,用89S51/52单片机时,应用倒也得心应手,只要芯片不被刷“爆”,改一条语句刷一次程序也无妨。

自从使用STC单片机后,情形不同了,STC单片机要求每刷一次程序都要求电源断电一次,而当装置制作完成后(如12864LCD电子日历),由于没有设计安装电源开关,调试程序就更加麻烦了,只能频繁的拔插电源插头。为此纠结了好长时间;百度一下后发现了一段支持STC单片机免断电下载的程序,可是由于菜鸟的原因,那段被转载了无数次的C源代码读来读去不知所云,貌似要先设置中断、串口等而后再延时等等;既然程序都读不懂,应用就更甭提了;就这样边琢磨着边一遍一遍的拔插插头继续调试着我的那段网来的电子日历程序。

一次偶然,改变了一切,一次调试程序时由于没有关闭电脑的外挂音箱,在下载程序点击软件的下载按钮时,音箱里传出了“咚咚”两声声响,起初并未在意,后来发现这真是软件在执行下载指令时的必要动作;这才引起注意,于是,马上打开示波器,把电路中串口RXD脚引出导线来进行检测,发现不操作软件时只有一条1V左右的直流电平线显示,用指针万用表测量约1.2V,当点击下载按钮时,示波器瞬间显示有两个稍近一个稍远的3个下跳脉冲,(由于示波器功能简单未能捕捉到稳定的图像)而万用表指针微幅度回摆了2次;在下载软件中换了几个型号的器件进行操作,观察到的现象大致相同;一个想法瞬间萦绕脑海,看来这两款STC单片机不断电下载程序是可以的,并且好像用不着很麻烦的设置和程序。

带着这个想法,下载了这两款STC单片机的数据手册,一读之下,豁然开朗,原来STC单片机的软件复位功能中包含了软件控制从ISP监控程序区开始复位启动,而且清楚的表明,只要用户向STC12C2052AD的ISP_CONTR(STC12C5A60S2为IAP_CONTR)控制寄存器中写入06H即可;经过几次试验终于搞定,而且方法及程序及其简单,兴奋之余,存录于此以资备忘。

//*******************************************************//

C51语言程序题头的应用声明区;//或

加入一条:sbit  IN_OFF=P3^0;//——1

底层或被调用函数(应用程序);

main(){

 IN_OFF=1;//——2

while(1)//主循环

{

if (IN_OFF==0){ISP_CONTR=0x60;}//STC12C5A60S2应改为 {IAP_CONTR=0x60;}//——3

else//——4

{

主函数程序;

}

}

}

改完程序后,记得第一次下载时还需要拔插插头,以后就再也不用了。

菜鸟原创,非常简单。如感兴趣,尽可试验。

 

 注 :IN_OFF=1;既RXD口置1,其原因就是在未进行端口操作时,该端口电平为1.2V相当于低电平,只有将其设置为1后才能进行软件的低电平检测;若将P3.0端口置1的语句放在主循环内,则P3.0口将不能用于其它控制而将P3.0端口置1的语句放在主循环外,则可以保留该I/O口用于其它用途。

再注:使用STC12C4052AD单片机时,因为其默认是内部RC振荡器时钟源,如果下载时改变设定为外部晶体振荡器,则每次设定后要先进行一次断电下载,如果实验时发现闪灯速度较慢、输出波形频率较低等等,基本就是这个问题了。

阅读(2726) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~