找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

求助,练习独立写了个51单片机的中断程序,但是没有实现预期硬件上的效果

查看数: 2361 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2024-1-31 19:25

正文摘要:

,如图所示,我想用定时器0的方式1实现第一个二极管以200ms间隔闪烁,用定时器1的方式1实现第二个二极管以1s间隔闪烁,但是实验结果只有第一个灯亮。而且不闪烁。诚信程序如图,想让大佬看看是哪里编程有问题

回复

ID:1101371 发表于 2024-2-1 10:32
悬赏解决了,黑币怎么发啊
ID:1101371 发表于 2024-2-1 10:29
我找到问题了,我对硬件TMod的理解不对,打开两个定时器的方式1是是0x11
ID:1110492 发表于 2024-2-1 10:29
中断一般做定时标志,主循环读取标记并取消标志。
ID:1064915 发表于 2024-2-1 09:09
自己能解决问题,进步更快
ID:161164 发表于 2024-1-31 22:00
找个定时器中断的例程对比一下吧
ID:213173 发表于 2024-1-31 21:18

定时器中断不是你这样玩的,一个定时器能完成的任务就不要开两个定时器。给你改了。
#include <reg52.h>

sbit led0=P2^0;
sbit led1=P2^1;

typedef unsigned char u8;
typedef unsigned int u16;

u8 num;
u8 flag;

void main()
{
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        TR0=1;
        ET0=1;
        EA =1;
        while (1)
        {
                if(flag==1)
                {
                        flag=0;
                        num++;
                        if(num%2==0)//100ms
                        {
                                led0=~led0;
                        }
                        if(num>=10)//500ms
                        {
                                num=0;
                                led1=~led1;
                        }
                }
        }
}

void shine() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        flag=1;
}
ID:491577 发表于 2024-1-31 21:15
呵呵,楼主的中断一点意义都没有,num=0~19,当num=4时,led0会翻转,但是速度太快,人眼看到的是长亮,num最大是19不会=20,所以led1不会亮。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表