打印

两个问题

[复制链接]
481|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenjunt|  楼主 | 2015-9-26 09:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一个外部中断按一下之后LED灯会暂停,按第二下时没反应。第二个,就是定时器怎么输出1s,我用for语句循环也不行。

#define uint unsigned int;
#define uchar unsigned char;

sbit key=P3^2;
sbit led=P2^7;

uchar num,flag;   //定义字符型变量num

void timer0() interrupt 0
{
flag=0;
while(1)
  {        
    EX0=1;                //开定时器中断
    EA=1;                //开总中断
    if(key==0)             //有键按下         
                        
         {
                   if(flag==0)            //flag记录上次定时器是开还是关
                {
                  flag=1;
                  TR0=0;      //关闭定时器T0
                }
            else
                {
                 flag=0;
                 TR0=1;                          //第一个问题:按一下正常暂停  再按不能正常运行
                }
          }

  }
}  

                  
main()
{                                                                 //第二个问题:不能延时1s

TMOD=0x01;      //开启定时器1  工作在定时方式1下
TH0=15536/256;
TL0=15536%256;
EX0=1;                //开定时器中断
EA=1;                //开总中断
TR0=1;                //开定时器
TF0=0;

while(1)
{
  
        if(TF0==1)                   //1s后关闭 开始闪光灯
          {        
            
            
                  num=0;
                  TH0=15536/256;
          TL0=15536%256;
                  TF0=0;
                  if(++num==20);
                  led=~led;        
                     
                  

          }
  }                  

}
沙发
chenjunt|  楼主 | 2015-9-26 09:53 | 只看该作者
还有,怎么让定时器高电平输出1s,低电平输出2s?

使用特权

评论回复
板凳
ousj| | 2015-9-26 09:54 | 只看该作者
每进一次外部中断,灯取反。

使用特权

评论回复
地板
chenjunt|  楼主 | 2015-9-26 09:54 | 只看该作者
大神,那您看看怎么延时1S呢?

使用特权

评论回复
5
ousj| | 2015-9-26 09:54 | 只看该作者
比如中断10ms,设个计数器,100次不就1S了吗。

使用特权

评论回复
6
chenjunt|  楼主 | 2015-9-26 09:54 | 只看该作者

怎么设计数器啊,就是我上边这个程序,延时没用中断~~

使用特权

评论回复
7
zyf部长| | 2015-9-26 09:55 | 只看该作者
为什么中断服务函数里面会有个 while(1)

这样还怎么整

使用特权

评论回复
8
kangzj| | 2015-9-26 09:55 | 只看该作者
你在中断里面写了个死循环,停在中断里面就跳不出去,如何继续啊!!

使用特权

评论回复
9
chenjunt|  楼主 | 2015-9-26 09:55 | 只看该作者
哦,明白了~~,那您看定时器怎么延时到1s?

使用特权

评论回复
10
chenjunt|  楼主 | 2015-9-26 09:55 | 只看该作者
kangzj 发表于 2015-9-26 09:55
你在中断里面写了个死循环,停在中断里面就跳不出去,如何继续啊!!

嗯,大神,您看我这个定时器怎么能延时1s,定时器不用中断的情况下延时~~谢谢大神!

使用特权

评论回复
11
小小猫咪| | 2015-9-26 09:55 | 只看该作者
那就用delay延时了,只不过这一般不是很准确
void delayms()        
// 延时子程序   对应12M晶振
{                                                
        unsigned int ms=1000;
        while(ms--)                                //每一次循环1ms
        {
           for(i = 0; i < 120; i++);
        }
}
哪里需要延时1S就调用这个函数就行了!

使用特权

评论回复
12
chenjunt|  楼主 | 2015-9-26 09:56 | 只看该作者
嗯,谢谢大神~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

718

主题

7868

帖子

5

粉丝