5009|10

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教大师单片机复位的问题 [复制链接]

请教几个问题:
1、单片机要完成复位,为什么复位信号必须至少持续2个机器周期啊。
2、复位期间单片机在做什么?主要是这2个机器周期内在做什么。(书上有说,但不具体)
3、单片机上电之后复位之前,单片机在做什么?

谢谢!

最新回复

单片机上电就复位,然后执行(以51 keil为例子)就会执行startup.s(记得是这个)这个函数,初始化一些寄存器,堆栈之后吧然后跳转到main吧,我觉得要了解单片机,看startup.s是不错的选择。------------唉!没有想到学了ARM9之后才理解单片机是怎么工作的。 ---------日微软,编译老是莫名错误。俺今天编译一天了,期间无事可做。在挖掘我以前写的一点东西上来吧。 =====================我几个月前做毕业设计写的一点菜鸟经验,估计对初学者有帮助吧。 最近一段时间,做了几个AT89S52单片机的东西,都是很基础的东西,什么问题都遇到了,今天刚好有点时间,想把一些经验和大家分享一下。 一、单片机不能下载程序的原因 1.硬件连接是否正确,电源,是否连接正常,在正确的基础上,板子是否有断线?注意P1.5,P1.6,P1.7,RST引脚和下载接口是否正确连接了,对了,如果P1.5,P1.6,P1.7用作其他用途也有可能下载不成功,俺就在P1.7上挂了个ds18b20,结果总是检测不到器件,并且在下载线插在板子上的时候,ds18b20无法测温,总是显示0000000. 2.电源波纹是否过大,过大别忘了加旁路电容,一个100uf的电解电容和一个104的磁片电容并联即可 3.单片机复位电路是否正确,是否能够保证复位电路在上电的时候能够复位一次单片机,如果复位电路是正确的,那么请检查一下复位电路的电阻阻值,这个千万不能忽视,因为我前几天就犯了这个错误,复位电阻不能小于1K因为,太小了电容放电太快,在单片机RST引脚上高电平持续的时间太短,造成单片机上电复位失败,从而导致无法下载程序,前几天我把120欧姆的电阻当成10K的(因为两者的色环没有区别)结果检查了N次才知道怎么回事,嘻嘻,别嘲笑我菜鸟 4、如果没有晶体能不能下载还没有试过,貌似CPLD没有晶体是可以下载程序的。 5、外部有大负载,比如电机驱动电路,即使不共电源,但是有时候也造成下载程序失败。 6.还有一个更加大意的东西,就是单片机没有插紧——我在做CAN调试的时候就做过这种事情,本来还是通信正常的,等我吃完夜宵回来的时候,居然总是通信出错,检查,唠叨半天,只能自叹倒霉,第二天回来觉得这么倒霉太可惜了,就去抚摸一下单片机,居然发现单片机有点松,我插上去SJA1000又能正常通信了。晕倒晕倒,如果答辩的时候出现的时候出现了这种问题不是死翘翘了!细节决定实力,深有体会。 7、电脑静电电压太高,导致单片机不工作,自然下载不了了,俺的电脑静电好猛,把俺电痛了 二、单片机可以下载程序,但是不能执行程序的原因 1.极有可能单片机的EA管脚没有接VCC,没有接是可以下载程序的,(并且ALE也会输出二分之一的晶体频率)——这是我写错了,估计是太累了,晕了,不好意思,下面有位大哥说了,一般情况下是六分之一的————为什么我总是粗心大意?!EA接VCC代表执行内部代码,不接执行外部ROM程序,我们现在很少用外部EEPROM,肯定要接EA到VCC的 三、单片机抗干扰设计 1.我们在用单片机定时器测一个方波的频率的时候,当单片机没有烧写程序的时候,方波很好,很标准,但是烧写程序之后,方波的形状就找不到了,多了很多噪声,很郁闷吧,建议你加个4.7K上拉排阻试试,并且注意前面的电源滤波旁路。要求不高的这两招都可以解决,要求高的那么就是这两个模块通过光电耦合器件隔离,使用独立的电源,不共同地就可以减小干扰了。对了P0口必须加上拉电阻。 2.驱动外部较大功率器件的时候一定要用光电耦合器件隔离,使用独立电源,否则单片机会死机。以前有个师兄参加广西电子设计竞赛做液位测量吧,不用光电耦合器件隔离,还使用同一个电源,结果,单片机不停的死机,数码管一亮一灭,结果没有出线。 以上都是很菜鸟的经验,希望批评指正。   详情 回复 发表于 2008-10-31 16:11
点赞 关注

回复
举报

63

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我也是瞎说

1)复位信号要持续一定的时期,因为检测复位信号状态首先需要一定的时间,其次是为了单片机状态的稳定。
2)不知道
3)复位之前如果VCC正常的话,单片机应该随机执行程序,跑飞。
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
1.如楼上所说。
2.主要做的就是初始化每个寄存器,包括最重要的PC指针,不包括RAM,然后单片机从复位地址开始执行程序。
3.复位期间,单片机的状态是不稳定的,程序有可能跑飞,很多存放在FLASH或者EEPROM的数据在复位的时候被改写就是这样造成的。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 
多谢大师们的回答了。
再问:程序跑飞为什么会使存放在FLASH或者EEPROM的数据被改写呢?这些数据不是固定的吗,只能通过专门的烧写器才能写入吗?
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 3 楼 ceny123 的回复:
多谢大师们的回答了。
再问:程序跑飞为什么会使存放在FLASH或者EEPROM的数据被改写呢?这些数据不是固定的吗,只能通过专门的烧写器才能写入吗?


一般主要是由于代码中有flash/eepromd的编程算法的例程引起的,PC意外指向这些函数就危险了。当然不排除电压异常直接导致存储器内容被改写。
 
 
 

回复

94

帖子

0

TA的资源

一粒金砂(初级)

6
 
高手很多啊 多谢多谢!

我已经有答案了。参看了《8051上电复位和复位延时时序分析》一文而知。

我来总结一下:
  前两问正确,但关于单片机在这两个机器周期内做什么,怎么执行操作,也就关系到为什么要两个机器周期不是很明确。现在我也不知。
  第三问有误,
  书中说到:单片机上电后,上电复位信号使单片机被锁定在复位状态直到复位信号撤销。复位信号一上电就有,但是这时单片机并不执行复位操作,首先要等Vcc稳定、然后晶振开始起振、振荡稳定后才执行两周期的复位操作(晶振没起振CPU怎么操作啊)。

  因此单片机上电之后复位之前单片机不操作,状态稳定。开始复位操作时(振荡稳定后,也就是2周期开始)RESET信号仍然使单片机锁定在复位状态,但CPU执行PC指针、SFR等的复位操作。

  所以从上电到复位信号撤销前,单片机的状态一直是稳定的,单片机程序跑飞是由于复位信号的保持时间小于这个过程所需的时间,也就是PC指针、SFR等还没复位,复位信号就撤销了而放任CPU执行,从而导致程序跑飞、单片机混乱等现象。复位信号的保持时间跟复位电路的设计有关。
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

7
 
3、单片机上电之后复位之前,单片机在做什么?

这个除了电流激活各个逻辑电路外,没有啥别的作用吧?

呵呵
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 4 楼 zyzhang365 的回复:
引用 3 楼 ceny123 的回复:
多谢大师们的回答了。
再问:程序跑飞为什么会使存放在FLASH或者EEPROM的数据被改写呢?这些数据不是固定的吗,只能通过专门的烧写器才能写入吗?


一般主要是由于代码中有flash/eepromd的编程算法的例程引起的,PC意外指向这些函数就危险了。当然不排除电压异常直接导致存储器内容被改写。


第一点可以理解,电压异常是指以外在Vpp上加载了电压吗?
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 6 楼 lbing7 的回复:
3、单片机上电之后复位之前,单片机在做什么?

这个除了电流激活各个逻辑电路外,没有啥别的作用吧?

呵呵


请问您所说的逻辑电路都包括哪些?谢谢
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
都是刨根问底的高手啊,向大家学习
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

11
 
单片机上电就复位,然后执行(以51 keil为例子)就会执行startup.s(记得是这个)这个函数,初始化一些寄存器,堆栈之后吧然后跳转到main吧,我觉得要了解单片机,看startup.s是不错的选择。------------唉!没有想到学了ARM9之后才理解单片机是怎么工作的。

---------日微软,编译老是莫名错误。俺今天编译一天了,期间无事可做。在挖掘我以前写的一点东西上来吧。

=====================我几个月前做毕业设计写的一点菜鸟经验,估计对初学者有帮助吧。

最近一段时间,做了几个AT89S52单片机的东西,都是很基础的东西,什么问题都遇到了,今天刚好有点时间,想把一些经验和大家分享一下。


一、单片机不能下载程序的原因


1.硬件连接是否正确,电源,是否连接正常,在正确的基础上,板子是否有断线?注意P1.5,P1.6,P1.7,RST引脚和下载接口是否正确连接了,对了,如果P1.5,P1.6,P1.7用作其他用途也有可能下载不成功,俺就在P1.7上挂了个ds18b20,结果总是检测不到器件,并且在下载线插在板子上的时候,ds18b20无法测温,总是显示0000000.


2.电源波纹是否过大,过大别忘了加旁路电容,一个100uf的电解电容和一个104的磁片电容并联即可


3.单片机复位电路是否正确,是否能够保证复位电路在上电的时候能够复位一次单片机,如果复位电路是正确的,那么请检查一下复位电路的电阻阻值,这个千万不能忽视,因为我前几天就犯了这个错误,复位电阻不能小于1K因为,太小了电容放电太快,在单片机RST引脚上高电平持续的时间太短,造成单片机上电复位失败,从而导致无法下载程序,前几天我把120欧姆的电阻当成10K的(因为两者的色环没有区别)结果检查了N次才知道怎么回事,嘻嘻,别嘲笑我菜鸟


4、如果没有晶体能不能下载还没有试过,貌似CPLD没有晶体是可以下载程序的。


5、外部有大负载,比如电机驱动电路,即使不共电源,但是有时候也造成下载程序失败。

6.还有一个更加大意的东西,就是单片机没有插紧——我在做CAN调试的时候就做过这种事情,本来还是通信正常的,等我吃完夜宵回来的时候,居然总是通信出错,检查,唠叨半天,只能自叹倒霉,第二天回来觉得这么倒霉太可惜了,就去抚摸一下单片机,居然发现单片机有点松,我插上去SJA1000又能正常通信了。晕倒晕倒,如果答辩的时候出现的时候出现了这种问题不是死翘翘了!细节决定实力,深有体会。

7、电脑静电电压太高,导致单片机不工作,自然下载不了了,俺的电脑静电好猛,把俺电痛了


二、单片机可以下载程序,但是不能执行程序的原因


1.极有可能单片机的EA管脚没有接VCC,没有接是可以下载程序的,(并且ALE也会输出二分之一的晶体频率)——这是我写错了,估计是太累了,晕了,不好意思,下面有位大哥说了,一般情况下是六分之一的————为什么我总是粗心大意?!EA接VCC代表执行内部代码,不接执行外部ROM程序,我们现在很少用外部EEPROM,肯定要接EA到VCC的


三、单片机抗干扰设计


1.我们在用单片机定时器测一个方波的频率的时候,当单片机没有烧写程序的时候,方波很好,很标准,但是烧写程序之后,方波的形状就找不到了,多了很多噪声,很郁闷吧,建议你加个4.7K上拉排阻试试,并且注意前面的电源滤波旁路。要求不高的这两招都可以解决,要求高的那么就是这两个模块通过光电耦合器件隔离,使用独立的电源,不共同地就可以减小干扰了。对了P0口必须加上拉电阻。


2.驱动外部较大功率器件的时候一定要用光电耦合器件隔离,使用独立电源,否则单片机会死机。以前有个师兄参加广西电子设计竞赛做液位测量吧,不用光电耦合器件隔离,还使用同一个电源,结果,单片机不停的死机,数码管一亮一灭,结果没有出线。






以上都是很菜鸟的经验,希望批评指正。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表