标题: 求助,练习独立写了个51单片机的中断程序,但是没有实现预期硬件上的效果 [打印本页]

作者: Pikachu233    时间: 2024-1-31 19:25
标题: 求助,练习独立写了个51单片机的中断程序,但是没有实现预期硬件上的效果
,如图所示,我想用定时器0的方式1实现第一个二极管以200ms间隔闪烁,用定时器1的方式1实现第二个二极管以1s间隔闪烁,但是实验结果只有第一个灯亮。而且不闪烁。诚信程序如图,想让大佬看看是哪里编程有问题

IMG_20240131_191820.jpg (1.33 MB, 下载次数: 97)

IMG_20240131_191820.jpg

IMG_20240131_191835.jpg (1.23 MB, 下载次数: 104)

IMG_20240131_191835.jpg

IMG_20240131_191844.jpg (1.34 MB, 下载次数: 100)

IMG_20240131_191844.jpg

IMG_20240131_191851.jpg (1.3 MB, 下载次数: 105)

IMG_20240131_191851.jpg

作者: Pikachu233    时间: 2024-1-31 19:26
效果如图所示

IMG_20240131_192602.jpg (703.94 KB, 下载次数: 102)

IMG_20240131_192602.jpg

作者: hhh402    时间: 2024-1-31 21:15
呵呵,楼主的中断一点意义都没有,num=0~19,当num=4时,led0会翻转,但是速度太快,人眼看到的是长亮,num最大是19不会=20,所以led1不会亮。
作者: wulin    时间: 2024-1-31 21:18
Pikachu233 发表于 2024-1-31 19:26
效果如图所示

定时器中断不是你这样玩的,一个定时器能完成的任务就不要开两个定时器。给你改了。
#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;
}

作者: lkc8210    时间: 2024-1-31 22:00
找个定时器中断的例程对比一下吧
作者: joyb    时间: 2024-2-1 09:09
自己能解决问题,进步更快
作者: 小荷探头    时间: 2024-2-1 10:29
中断一般做定时标志,主循环读取标记并取消标志。
作者: Pikachu233    时间: 2024-2-1 10:29
我找到问题了,我对硬件TMod的理解不对,打开两个定时器的方式1是是0x11
作者: Pikachu233    时间: 2024-2-1 10:32
悬赏解决了,黑币怎么发啊




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1