想法是使用兩個外部中斷嵌套,外部中斷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);
}
}
|