打印

咨询些问题

[复制链接]
1059|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhuww|  楼主 | 2022-5-6 20:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一个外部中断按一下之后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;        
                     
                  

          }
  }                  

}

使用特权

评论回复
沙发
wyjie| | 2022-5-6 20:21 | 只看该作者
你中段函数里面用了while无限循环语句,第一次中断进来后就出不去了啊。

使用特权

评论回复
板凳
zhuww|  楼主 | 2022-5-6 20:23 | 只看该作者
还有,怎么让定时器高电平输出1s,低电平输出2s?

使用特权

评论回复
地板
supernan| | 2022-5-6 20:25 | 只看该作者

每进一次外部中断

使用特权

评论回复
5
supernan| | 2022-5-6 20:28 | 只看该作者
灯取反。

使用特权

评论回复
6
zhuww|  楼主 | 2022-5-6 20:30 | 只看该作者
大神,那您看看怎么延时1S呢?

使用特权

评论回复
7
juventus9554| | 2022-5-6 20:35 | 只看该作者
比如中断10ms,设个计数器,100次不就1S了吗。

使用特权

评论回复
8
zhuww|  楼主 | 2022-5-6 20:38 | 只看该作者
怎么设计数器啊,就是我上边这个程序,延时没用中断~~

使用特权

评论回复
9
chenho| | 2022-5-6 20:44 | 只看该作者

为什么中断服务函数里面会有个 while(1)

这样还怎么整

使用特权

评论回复
10
shimx| | 2022-5-6 20:47 | 只看该作者
你在中断里面写了个死循环,停在中断里面就跳不出去,如何继续啊!!

使用特权

评论回复
11
zhuww|  楼主 | 2022-5-6 20:49 | 只看该作者
哦,明白了~~,那您看定时器怎么延时到1s?

使用特权

评论回复
12
zhuww|  楼主 | 2022-5-6 20:53 | 只看该作者
嗯,大神,您看我这个定时器怎么能延时1s,定时器不用中断的情况下延时~~谢谢大神!

使用特权

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

使用特权

评论回复
14
zhuww|  楼主 | 2022-5-6 20:58 | 只看该作者
嗯,谢谢大神~~

使用特权

评论回复
15
jiajs| | 2022-5-6 21:00 | 只看该作者
这个究竟咋回事,没有看明白代码。

使用特权

评论回复
16
zhenykun| | 2022-5-6 21:02 | 只看该作者
你中断里面是死循环啊!

使用特权

评论回复
17
dingy| | 2022-5-6 21:05 | 只看该作者
你这个中断有问题啊

使用特权

评论回复
18
zhuww|  楼主 | 2022-5-6 21:07 | 只看该作者

其实还是不大明白,我再琢磨琢磨吧,多谢了哈先

使用特权

评论回复
19
tpgf| | 2022-6-2 21:12 | 只看该作者
精简一下程序吧

使用特权

评论回复
20
aoyi| | 2022-6-2 21:21 | 只看该作者
使用的是轮询 还是中断啊

使用特权

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

本版积分规则

893

主题

8252

帖子

1

粉丝