标题:
51单片机外部中断0和1控制流水灯的状态保存和进行
[打印本页]
作者:
yuki·kiko
时间:
2022-5-5 22:09
标题:
51单片机外部中断0和1控制流水灯的状态保存和进行
想法是使用两个外部中断嵌套,外部中断0使流水灯先向左滚动,当外部中断1触发的时候储存此时流水灯的状态,然后外部中断1向右滚动。
但是对于状态的保存有些迷茫,在外部中断0保存的状态不能被外部中断1读取。
单片机源程序如下:
#include "reg52.h"
#include <intrins.h>
#define led P1
typedef unsigned int u16;
typedef unsigned char u8;
void delayms(u8 ms)
{
u8 i;
while(ms--)
for(i=0;i<123;i++);
}
void Int()
{
PX1 = 1;
}
void Int0() interrupt 0
{
u16 i;
u8 saveled;
led=0xfe;
for(i=0;i<16;i++)
{
delayms(100);
led=_cror_(led,1);
saveled=led;
}
}
void Int1() interrupt 2
{
u16 i;
u8 saveled;
led=saveled;
for(i=0;i<16;i++)
{
delayms(200);
led=_crol_(led,1);
}
}
void main()
{
Int();
Int0Init();
Int1Init();
while(1)
{
led=0x00;
delayms(200);
led=~led;
delayms(200);
}
}
作者:
雪玉寐影
时间:
2022-5-6 01:32
saveled在主程序里定义
作者:
wulin
时间:
2022-5-6 08:51
1.这个程序只能完成LED闪烁,不能左右流水,因为外部中断0、1都没有开启。
2.这种外部中断用法也不是嵌套。
3.LED当前状态无需另外保存,P1本身就是存储器。
4.Int0Init();Int1Init();缺少函数体。
5.中断优先等级设置在此无意义。
#include "reg52.h"
#include <intrins.h>
#define led P1
typedef unsigned int u16;
typedef unsigned char u8;
u8 t=0;
void delayms(u8 ms)
{
u8 i;
while(ms--)
for(i=0;i<123;i++);
}
void main()
{
IT0 = 1;
EX0 = 1;
IT1 = 1;
EX1 = 1;
EA = 1;
while(1)
{
if(t==0)
led=~led;
if(t==1)
led=_cror_(led,1);
if(t==2)
led=_crol_(led,1);
delayms(200);
}
}
void Int0() interrupt 0
{
if(led==0x00||led==0xff)
led=0xfe;
t=1;
}
void Int1() interrupt 2
{
if(led==0x00||led==0xff)
led=0xfe;
t=2;
}
复制代码
作者:
1255230
时间:
2022-5-6 16:51
看样子好像只调用了中断程序,但是没有开启中断
作者:
yuki·kiko
时间:
2022-5-7 00:04
wulin 发表于 2022-5-6 08:51
1.这个程序只能完成LED闪烁,不能左右流水,因为外部中断0、1都没有开启。
2.这种外部中断用法也不是嵌套 ...
理解了! 谢谢
作者:
liucan2020
时间:
2022-8-17 10:34
要多看看寄存器的手册。要复用成别的外设,要自己设置,EX0 外部中断0的使能 ,IT0 外部中断0的触发方式
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1