标题: 关于单片机中断里闪灯的代码 [打印本页]

作者: jianuli    时间: 2021-4-4 01:49
标题: 关于单片机中断里闪灯的代码
大家好呀,是这样的,如图中,我写P1=0xfe能一个灯闪烁,但写P1<<=1就不能1个灯闪烁了,而是全部灯闪烁,这是为什么呢?

IMG_20210404_013754.jpg (1.77 MB, 下载次数: 64)

IMG_20210404_013754.jpg

作者: wulin    时间: 2021-4-4 06:42
void InterruptTimer0(void) interrupt 1
{
        static unsigned int  sec;
        static unsigned char a=0xfe,b=0;
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;
        sec++;
        if(sec%100==0)//闪烁周期0.2秒
        {
                b=~b;
                P1=a|b;
        }
        if(sec>=1000)//移动周期1秒
        {
                sec=0;
                a=a<<1|1;
                if(a==0xff)
                        a=0xfe;
        }
}
作者: 花心的刘备    时间: 2021-4-4 07:19
你的sec能加上数吗?
作者: jianuli    时间: 2021-4-4 11:08
wulin 发表于 2021-4-4 06:42
void InterruptTimer0(void) interrupt 1
{
        static unsigned int  sec;

多谢,每次都能看到你帮我解决问题~
我图中的程序这样写为何全闪呢,
作者: ANT1987    时间: 2021-4-5 08:59
1 P1=0xfe;代表八个IO的高低电平状态 即 P1.7-P1.0: 1111 1110  sec>=200时只改变了P1.0的电平状态
2 P1<<=1;执行一次 P1向左移位一次(sec=200开始进入执行),低位补0;进入第八次的时候 sec=207 P1= 0000 0000  所以改变了八个IO的状态.
所以才会全闪啊.
作者: jianuli    时间: 2021-4-5 14:17
ANT1987 发表于 2021-4-5 08:59
1 P1=0xfe;代表八个IO的高低电平状态 即 P1.7-P1.0: 1111 1110  sec>=200时只改变了P1.0的电平状态
2 P1

谢谢你
作者: jianuli    时间: 2021-4-5 14:22
ANT1987 发表于 2021-4-5 08:59
1 P1=0xfe;代表八个IO的高低电平状态 即 P1.7-P1.0: 1111 1110  sec>=200时只改变了P1.0的电平状态
2 P1

看完你的分析,一下子顿悟啊,自己忘记分析sec在大于200之后的P1后几次移位的状态了,谢谢啊




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