找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1171|回复: 0
打印 上一主题 下一主题
收起左侧

关于51单片机电源寄存器的学习疑问

[复制链接]
跳转到指定楼层
楼主
学了51的掉电与空闲模式 写了一段代码 使用仿真 现象没有如预期 预期实验现象:5s后掉电/空闲,外部中断唤醒单片机;
实际实验现象:按下外部中断,没有唤醒。
代码如下:
  1. #include <reg52.h>

  2. #define uint  unsigned int
  3. #define uchar unsigned char
  4. #define digTube P0
  5. unsigned char code table[]=
  6. {0x3f,0x06,0x5b,0x4f,
  7. 0x66,0x6d,0x7d,0x07,
  8. 0x7f,0x6f,0x77,0x7c,
  9. 0x39,0x5e,0x79,0x71};

  10. sbit DULA = P2^0;
  11. sbit WELA = P2^1;
  12. uchar time = 0;
  13. uchar tube = 0;

  14. void Init();
  15. void DelayMs(uint xms);
  16. void Display(uint num);

  17. void main()
  18. {
  19.         Init();
  20.         
  21.         while (1)
  22.         {
  23.                 Display(tube);
  24.         }
  25. }

  26. void T0time() interrupt 1
  27. {
  28.         TH0=(65536-45872)/256;
  29.         TL0=(65536-45872)%256;
  30.         
  31.         time++;
  32.         if (time == 20)
  33.         {
  34.                 time = 0;
  35.                 tube++;
  36.                 if (tube == 6)
  37.                 {
  38.                         ET0 = 0;
  39.                         PCON = 0x01;
  40.                 }
  41.         }
  42. }

  43. void EXIT0() interrupt 0
  44. {
  45.         DelayMs(10);
  46.         
  47.         if (INT0 == 0)
  48.         {
  49.                 PCON = 0;
  50.                 ET0 = 1;
  51.         }
  52. }

  53. void EXIT1() interrupt 2
  54. {
  55.         DelayMs(10);
  56.         
  57.         if (INT1 == 0)
  58.         {
  59.                 PCON = 0;
  60.                 ET0 = 1;
  61.         }
  62. }

  63. void Init()
  64. {
  65.         TMOD = 0x01;
  66.         TH0 = (65536-45872)/256;
  67.         TL0 = (65536-45872)%256;
  68.         TR0 = 1;
  69.         ET0 = 1;
  70.         EX0 = 1;
  71.         EX1 = 1;
  72.         EA = 1;
  73. }

  74. void DelayMs(uint xms)
  75. {
  76.         uint i,j;
  77.         for(i=xms;i>0;i--)
  78.                 for(j=114;j>0;j--);
  79. }

  80. void Display(uint num)
  81. {
  82.         uint shi, ge;
  83.         
  84.         shi = num/10;
  85.         ge  = num%10;

  86.         DULA = 0;
  87.         digTube = table[shi];
  88.         DelayMs(1);
  89.         DULA = 1;
  90.         
  91.         WELA = 0;
  92.         digTube = table[ge];
  93.         DelayMs(1);
  94.         WELA = 1;
  95. }
复制代码

仿真图如下:


无标题.png (113.33 KB, 下载次数: 35)

无标题.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表