#include<reg51.h>
unsigned char flag=0;
sbit p33=P3^3;
unsigned char code port3[4][4]=
{
0x28,0x28,0x28,0x28,
0x29,0x29,0x29,0x29,
0x29,0x29,0x29,0x29,
0x29,0x29,0x29,0x29,
};
unsigned char code port1[4][4]=
{
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x20,0x20,0x20,0x20,
0x24,0x24,0x24,0x24,
};
main()
{
unsigned char i;
unsigned int j,count=0;
EA=1; //总中断允许
IT0=1; //脉冲触发方式,下降沿有效
EX0=1; //外中断0允许
while(1)
{
while(1)
{
if(flag==1) break;
}
flag=0;
for(i=0;i<4;i++)
{
while(1)
{
for(j=0;j<4;j++)
{
P3=port3[j];
P1=port1[j];
}
if(++count==8000) {count=0;break;}
}
}
p33=0; //本单片机效果走完,改变p33,使下一单片机,外部中断0下降沿触发
}
}
void int0(void) interrupt 0
{
flag=1;
}
对程序稍加修改,昨天的程序,灯有点乱亮。
上电马上中断:由于单片机复位后,各IO口为高电平。我给发中断信号的单片机,程序起始就给下一个中断入口置低电平,所以上电后,下一个单片机进入中断了。
渐变:本程序为四个亮度等级。第一行不断轮流循环执行了8000次。
break跳出整个循环。continue跳出本次循环,重新执行下一循环。goto语句应尽量少用,通常与if连用,跳到对应标号处执行
以下为发送中断单片机的程序,没有完成想要的效果。
#include<reg51.h>
sbit p33=P3^3;
unsigned int count=0;
main()
{
p33=0;
EA=1; //总中断允许
IT0=1; //脉冲触发方式,下降沿有效
EX0=1;
while(1)
{;}
}
void int0(void) interrupt 0
{
p33=1;
p33=0;
}
前一个单片机输出p33,接后一单片机外部中断0输入p32
单片机为2051
