打印
[51单片机]

新人求教:关于定时器中断的运用,不知道哪里错了

[复制链接]
463|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hellocross|  楼主 | 2020-4-11 21:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
sbit D1=P1^0;
unsigned char tt=0;
void main()
{
        EA=1;
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        ET0=1;
        TR0=1;                  
        while(1)
        {
        if(tt==20)
        D1=0;
        if(tt==40)
        D1=1;
        tt=0;                           // 为什么此处加上tt=0以后,灯不亮了呢?
        }
}
void exter0() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        tt++;
}

如上,程序中去掉tt=0语句后,P1^0脚输出动作正常,但是为什么加上tt=0以后P1^0没有了输出,不能实现P1^0脚循环通断呢?

使用特权

评论回复

相关帖子

沙发
叶春勇| | 2020-4-12 08:51 | 只看该作者
本帖最后由 叶春勇 于 2020-4-12 08:53 编辑

中断里要修改的变量加volatile

使用特权

评论回复
板凳
ayb_ice| | 2020-4-13 10:18 | 只看该作者
每个循环都清零了,当然不会亮了,因为中断又要从零开始计时,没计几个又被你清零了

改为这样才是合理的

while(1)
{
        if (tt <= 20)
        {
                D1=0;
        }
        else
        {
                D1=1;
        }
        if (tt >= 40)
        {
                tt = 0;
        }
}

使用特权

评论回复
地板
叶春勇| | 2020-4-13 11:29 | 只看该作者
顶楼上,正解

使用特权

评论回复
5
jyzhzn| | 2020-4-13 20:35 | 只看该作者
本帖最后由 jyzhzn 于 2020-4-13 20:42 编辑

if(tt==40)
        D1=1;
        tt=0;                           // 为什么此处加上tt=0以后,灯不亮了呢?
      

你这个if(tt==40)只对D1=1起作用
改成
while(1)
        {
        if(tt==20)
        D1=0;
        if(tt==40)                           {                            //加花括号
                D1=1;
                tt=0;                           // 为什么此处加上tt=0以后,灯不亮了呢?
         }                           //加花括号
        }
应该就没问题了


使用特权

评论回复
6
hellocross|  楼主 | 2020-4-24 20:57 | 只看该作者
jyzhzn 发表于 2020-4-13 20:35
if(tt==40)
        D1=1;
        tt=0;                           // 为什么此处加上tt=0以后,灯不亮了 ...

好!谢谢!受教了!

使用特权

评论回复
7
干掉9527| | 2020-4-24 23:35 | 只看该作者
编程规范需要好好练练

使用特权

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

本版积分规则

1

主题

10

帖子

0

粉丝