10787|13

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

我的51唤醒不了? [复制链接]

想试试51的空闲和等待模式,可是我的程序让51进入了低功耗模式,但是却无法从这个模式返回,返回就是从进入模式的下一句开始执行,我的复位了之后总是从头开始,谁能帮看看是怎么一回事? 程序如下: org 0000h sjmp main org 30h main: mov p1,#0ffh mov sp,#60h clr p1.7 acall del1s ;顺序点亮1.7和1.5脚 clr p1.5 acall del1s ;进入低功耗模式 mov pcon,#02h mov p0,87h clr p1.1 ;若能推出模式则点亮p1.1一秒钟 acall del1s ajmp $ ;标准一秒延时子程序 del1s: mov r2,#0ah a2: mov r1,#0a8h a1: mov r0,#0f7h w1: djnz r0,w1 djnz r1,a1 djnz r2,a2 ;此循环定义为998030us,还差1970us mov r3,#5h ;产生1960us的延时 a4: mov r4,#0c3h a3: djnz r4,a3 djnz r3,a4 nop nop nop nop nop nop nop nop nop ret end 我在改变pcon的赋值,测量到ale和psen的确在两种状态的不同电平,因此确认单片机进入了掉电模式,
此帖出自51单片机论坛

最新回复

xwj
呵呵,给你一个上电检测的基本框架 /***************************************************************************/ void main() {     unsigned int i;     EA=0;     SFCF=0X01;     AUXR=0X01;     first_power_on=0;     if(soft_reset_flag!=0Xaa)       //是否上电复位,{}里面是上电复位的动作,你要不放心的话可以用多个标志     {         P0=0XFF;         P1=0XFF;         P2=0XFF;         P3=0XFF;         P4_RAM=0XFF;         WR_P4();         clean_pdata();         clean_idata();         for(i=0;i<0xffff;i++)           //上电延时         {             _nop_();             _nop_();             _nop_();             _nop_();             _nop_();             _nop_();         }        if(verify_byte(flag_addr,0x55)) //检查首次上电(EEPROM区标志)         {             first_power_on=1;             init_parameter();         }     }     soft_reset_flag=0X55;     init_watchdog();                    //启动看门狗     init_system();                      //系统初始化,关屏     init_touch_monitor();               //首次上电触摸屏设置,由first_power_on触发     while(1)     {         scan_work();         if (key_ok)         {             key_ok=0;             operation();  //打开主屏         }         else if(~key_time_flag)         //按键nn秒没操作后         {             soft_reset_flag=0Xaa;       //软复位,一复位就回复到光屏的待机状态了             SFCF|=0X02;                 //或者你要进待机、掉电模式随便你         }     } } void init_system(void)                  //系统初始化,关屏 {     TMOD=0X11;     //其他的....         video_power_ctrl=1; }  详情 回复 发表于 2007-12-12 14:10
点赞 关注
 

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

回复:我的51唤醒不了?

看你写的控制字,是进入了掉电模式,掉电模式被复位唤醒后就是要从头开始执行程序;如果需要判断是首次上电后执行还是掉电复位执行,你可以在片内RAM中设置标志来区分。 (注:这是标准51的行为模式,而其它一些如Philip或STC的51是可以实现外部中断将MCU从掉电模式中唤醒,中断例程返回后就会执行进入掉电模式语句后的紧接着的一条语句)。
此帖出自51单片机论坛
 
 
 

回复

24

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

回复:我的51唤醒不了?

中断退出空闲
此帖出自51单片机论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 

回复:我的51唤醒不了?

以我个人的经验,学习使用51,最全面的一个技术手册就是INTEL的MCS51 user manual,可以从网上找一份看一下,好多国内的教材内容都是copy的这个手册,并且copy得不全面,组织得不合理,让人看后容易糊涂。
此帖出自51单片机论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 

回复:我的51唤醒不了?

谢谢infree的帮助,我在同学的帮助下,用外部中断唤醒了空闲的模式,但是掉电模式退出的唯一办法就是硬件复位,可是硬件复位我同学的理解是对于进入掉电模式,无法唤醒的原因是只有硬件复位,而硬件复位按键时间远大于2ms,可能早就唤醒,以至于刚刚复位,就又重新复位,所以程序会对从头开始执行
此帖出自51单片机论坛
 
 
 

回复

43

帖子

0

TA的资源

一粒金砂(初级)

6
 

回复:我的51唤醒不了?

51下不管你是什么复位,程序都会从头开始执行 所以你的理解根本就是错的
此帖出自51单片机论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

7
 

回复:我的51唤醒不了?

其它的单片机复位应该也是从头开始执行
此帖出自51单片机论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

8
 

回复:我的51唤醒不了?

只要你在Reset管脚加上了有效的复位信号,程序就会从头开始执行。
此帖出自51单片机论坛
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(初级)

9
 

回复:我的51唤醒不了?

更准确地说 是从 0000H 开始吧
此帖出自51单片机论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

10
 

回复:我的51唤醒不了?

掉电乎?空闲乎?闲得没事测测乎?2楼的:“这是标准51的行为模式,而其它一些如Philip或STC的51是可以实现外部中断将MCU从掉电模式中唤醒” “如果需要判断是首次上电后执行还是掉电复位执行,你可以在片内RAM中设置标志来区分。” 把二楼的回帖次序变一下,楼主再加上一段掉电复位判断程序,大概就能实现楼主的意图了。
此帖出自51单片机论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

11
 

回复:我的51唤醒不了?

那硬件复位使单片机退出空闲和掉电模式该怎么理解? 是不是这样: 程序是肯定从头开始,而不过需要加上一段掉电复位判断程序在主程序最开头对吧,这样就可以判断如果是为唤醒而复的位,可以跳转到使单片机进入掉电模或空闲式之后的下条语句继续执行
此帖出自51单片机论坛
 
 
 

回复

43

帖子

0

TA的资源

一粒金砂(初级)

12
 

回复:我的51唤醒不了?

是的
此帖出自51单片机论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

13
 

回复:我的51唤醒不了?

只是我没有测过,也没有这么使用过。因为没有遇到那么严格的场合,所以…… 就看楼主的了
此帖出自51单片机论坛
 
 
 

回复

43

帖子

0

TA的资源

一粒金砂(初级)

14
 

回复: 我的51唤醒不了?

呵呵,给你一个上电检测的基本框架 /***************************************************************************/ void main() { unsigned int i; EA=0; SFCF=0X01; AUXR=0X01; first_power_on=0; if(soft_reset_flag!=0Xaa) //是否上电复位,{}里面是上电复位的动作,你要不放心的话可以用多个标志 { P0=0XFF; P1=0XFF; P2=0XFF; P3=0XFF; P4_RAM=0XFF; WR_P4(); clean_pdata(); clean_idata(); for(i=0;i<0xffff;i++) //上电延时 { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } if(verify_byte(flag_addr,0x55)) //检查首次上电(EEPROM区标志) { first_power_on=1; init_parameter(); } } soft_reset_flag=0X55; init_watchdog(); //启动看门狗 init_system(); //系统初始化,关屏 init_touch_monitor(); //首次上电触摸屏设置,由first_power_on触发 while(1) { scan_work(); if (key_ok) { key_ok=0; operation(); //打开主屏 } else if(~key_time_flag) //按键nn秒没操作后 { soft_reset_flag=0Xaa; //软复位,一复位就回复到光屏的待机状态了 SFCF|=0X02; //或者你要进待机、掉电模式随便你 } } } void init_system(void) //系统初始化,关屏 { TMOD=0X11; //其他的.... video_power_ctrl=1; }
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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