找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2292|回复: 6
收起左侧

关于单片机中断里闪灯的代码

[复制链接]
ID:777834 发表于 2021-4-4 01:49 来自手机 | 显示全部楼层 |阅读模式
大家好呀,是这样的,如图中,我写P1=0xfe能一个灯闪烁,但写P1<<=1就不能1个灯闪烁了,而是全部灯闪烁,这是为什么呢?
IMG_20210404_013754.jpg
回复

使用道具 举报

ID:213173 发表于 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;
        }
}
回复

使用道具 举报

ID:684049 发表于 2021-4-4 07:19 | 显示全部楼层
你的sec能加上数吗?
回复

使用道具 举报

ID:777834 发表于 2021-4-4 11:08 来自手机 | 显示全部楼层
wulin 发表于 2021-4-4 06:42
void InterruptTimer0(void) interrupt 1
{
        static unsigned int  sec;

多谢,每次都能看到你帮我解决问题~
我图中的程序这样写为何全闪呢,
回复

使用道具 举报

ID:894154 发表于 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的状态.
所以才会全闪啊.
回复

使用道具 举报

ID:777834 发表于 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

谢谢你
回复

使用道具 举报

ID:777834 发表于 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后几次移位的状态了,谢谢啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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