標(biāo)題: 關(guān)于51單片機(jī)電源寄存器的學(xué)習(xí)疑問 [打印本頁(yè)]

作者: s26250    時(shí)間: 2019-3-10 20:03
標(biāo)題: 關(guān)于51單片機(jī)電源寄存器的學(xué)習(xí)疑問
學(xué)了51的掉電與空閑模式 寫了一段代碼 使用仿真 現(xiàn)象沒有如預(yù)期 預(yù)期實(shí)驗(yàn)現(xiàn)象:5s后掉電/空閑,外部中斷喚醒單片機(jī);
實(shí)際實(shí)驗(yàn)現(xiàn)象:按下外部中斷,沒有喚醒。
代碼如下:
  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. }
復(fù)制代碼

仿真圖如下:


無標(biāo)題.png (113.33 KB, 下載次數(shù): 36)

無標(biāo)題.png





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1