想法是使用两个外部中断嵌套,外部中断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);
}
}
|