在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 1827|回复: 2

[求助] 51单片机中断问题,

[复制链接]
发表于 2014-11-27 18:03:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
老师要求,1秒内按一次输出1KHz,按两次输出2KHz,按三次输出占空比25%的500HZ方波。
仿真无效果,怎么按都不会变。







  1. #include"reg51.h"
  2. sbit TOUT=P2^0;
  3. unsigned char cot1,cot2,k;

  4. void main()
  5. {
  6.    TMOD=0x11;
  7.    cot1=0;
  8.    cot2=0;
  9.    TOUT=0;
  10.    k=0;
  11.    TH0=(65536-10000)/256;           //百分之1秒
  12.    TL0=(65536-10000)%256;
  13.    EA=1;
  14.    ET1=1;
  15.    ET0=1;
  16.    TR0=1;
  17.    IT1=1;
  18.    EX1=1;
  19.    while(1){};
  20. }

  21. void Timer0(void) interrupt 1
  22. {  
  23.    if(cot1>=100)
  24.    {
  25.              if(cot2==1)
  26.                 {
  27.                         TH1=(65536-500)/256;
  28.                         TL1=(65536-500)%256;
  29.                         TR1=1;
  30.                 }
  31.                 else if(cot2==2)
  32.                 {
  33.                            TH1=(65536-1000)/256;
  34.                         TL1=(65536-1000)%256;
  35.                         TR1=1;
  36.                 }
  37.                      else if(cot2==3)
  38.                          {
  39.                              TH1=(65535-235)/256;
  40.                  TL1=(65535-235)%256;
  41.                                  TR1=1;
  42.                                  k=1;
  43.                          }
  44.                               else TOUT=0;
  45.      }
  46.    else
  47.    {  
  48.      cot1=0;
  49.          cot2=0;
  50.    }
  51.    cot1++;
  52. }                        



  53. void anjian(void) interrupt 2
  54. {
  55.          cot2++;  
  56. }

  57. void Timer1(void) interrupt 3
  58. {
  59.      if(k>=1)
  60.          {
  61.             k++;
  62.             if(k>=2) TOUT=0;
  63.              else TOUT=1;
  64.         if(k==4) k=0;
  65.          }
  66.          else TOUT=~TOUT;
  67. }


复制代码
 楼主| 发表于 2014-11-28 10:04:35 | 显示全部楼层
修改后



  1. #include"reg51.h"
  2. sbit TOUT=P2^0;
  3. unsigned char cot1,cot2,k,s;

  4. void main()
  5. {
  6.    TMOD=0x01;
  7.    cot1=0;
  8.    cot2=0;
  9.    TOUT=0;
  10.    k=0;
  11.    s=0;
  12.    TH0=(65536-50000)/256;           //百分之1秒
  13.    TL0=(65536-50000)%256;
  14.    EA=1;
  15.    ET1=1;
  16.    ET0=1;
  17.    TR0=1;
  18.    TR1=1;
  19.    IT1=1;
  20.    EX1=1;
  21.    while(1){};
  22. }


  23. void Timer0(void) interrupt 1
  24. {  
  25.    TH0=(65536-50000)/256;       
  26.    TL0=(65536-50000)%256;
  27.    if(cot1>=20)
  28.    {
  29.          cot1=0;
  30.              if(cot2==1)
  31.                 {
  32.                         TH1=(65536-500)/256;
  33.                         TL1=(65536-500)%256;
  34.                         s=1;
  35.                 }
  36.                 else if(cot2==2)
  37.                 {
  38.                            TH1=(65536-1000)/256;
  39.                         TL1=(65536-1000)%256;
  40.                         s=2;
  41.                 }
  42.                      else if(cot2==3)
  43.                          {
  44.                              TH1=(65535-235)/256;
  45.                  TL1=(65535-235)%256;
  46.                                  k=1;
  47.                                  s=3;
  48.                          }

  49.           cot2=0;
  50.      }
  51.    cot1++;
  52. }                        





  53. void anjian(void) interrupt 2
  54. {
  55.          cot2++;  
  56. }



  57. void Timer1(void) interrupt 3
  58. {
  59.      if(s==1)
  60.          {
  61.          TOUT=~TOUT;
  62.          TH1=(65536-500)/256;
  63.          TL1=(65536-500)%256;
  64.          }
  65.         else if(s==2)
  66.          {
  67.          TOUT=~TOUT;
  68.          TH1=(65536-1000)/256;
  69.          TL1=(65536-1000)%256;
  70.          }
  71.          else if(s==3)
  72.          {
  73.          TH1=(65535-235)/256;
  74.      TL1=(65535-235)%256;
  75.          }
  76.          
  77.          if(k>=1)
  78.          {          
  79.          TH1=(65535-235)/256;
  80.      TL1=(65535-235)%256;
  81.          k++;
  82.          if(k>=2) TOUT=0;
  83.      else TOUT=1;
  84.      if(k==4) k=0;
  85.          }       
  86. }



复制代码
 楼主| 发表于 2014-11-28 10:14:23 | 显示全部楼层




  1. #include"reg51.h"
  2. sbit TOUT=P2^0;
  3. unsigned char cot1,cot2,k,s;

  4. void main()
  5. {
  6.    TMOD=0x01;
  7.    cot1=0;
  8.    cot2=0;
  9.    TOUT=0;
  10.    k=0;
  11.    s=0;
  12.    TH0=(65536-50000)/256;           //百分之1秒
  13.    TL0=(65536-50000)%256;
  14.    EA=1;
  15.    ET1=1;
  16.    ET0=1;
  17.    TR0=1;
  18.    TR1=1;
  19.    IT1=1;
  20.    EX1=1;
  21.    while(1){};
  22. }


  23. void Timer0(void) interrupt 1
  24. {  
  25.    TH0=(65536-50000)/256;       
  26.    TL0=(65536-50000)%256;
  27.    if(cot1>=20)
  28.    {
  29.          cot1=0;
  30.              if(cot2==1)
  31.                 {
  32.                         TH1=(65536-500)/256;
  33.                         TL1=(65536-500)%256;
  34.                         s=1;
  35.                 }
  36.                 else if(cot2==2)
  37.                 {
  38.                            TH1=(65536-1000)/256;
  39.                         TL1=(65536-1000)%256;
  40.                         s=2;
  41.                 }
  42.                      else if(cot2==3)
  43.                          {
  44.                              TH1=(65535-235)/256;
  45.                  TL1=(65535-235)%256;
  46.                                  k=1;
  47.                                  s=3;
  48.                          }

  49.           cot2=0;
  50.      }
  51.    cot1++;
  52. }                        





  53. void anjian(void) interrupt 2
  54. {
  55.          cot2++;  
  56. }



  57. void Timer1(void) interrupt 3
  58. {
  59.      if(s==1)
  60.          {
  61.          TOUT=~TOUT;
  62.          TH1=(65536-500)/256;
  63.          TL1=(65536-500)%256;
  64.          }
  65.         else if(s==2)
  66.          {
  67.          TOUT=~TOUT;
  68.          TH1=(65536-1000)/256;
  69.          TL1=(65536-1000)%256;
  70.          }
  71.          else if(s==3)
  72.          {
  73.          TH1=(65535-235)/256;
  74.      TL1=(65535-235)%256;
  75.          }
  76.          
  77.          if(k>=1)
  78.          {          
  79.          TH1=(65535-235)/256;
  80.      TL1=(65535-235)%256;
  81.          k++;
  82.          if(k>=2) TOUT=0;
  83.      else TOUT=1;
  84.      if(k==4) k=0;
  85.          }       
  86. }


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

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-16 10:42 , Processed in 0.048665 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表