資源簡介
基于MAX485兩個單片機半雙工通信,內(nèi)部附有C語言源代碼,采用KEIL進行程序仿真,內(nèi)部有PROTEUS硬件仿真圖。

代碼片段和文件信息
#include
#define?uint?unsigned?int
#define?uchar?unsigned?char
sbit?P0_0=P0^0;
uchar?idata?table[17]={0xfe0xfd0xfb0xf70xef0xdf0xbf0x7f0xaa0xbd0xee0xdd0x990xfd0xff0xff};
uchar?idata?table2[10];
uchar?numtemp;
uchar?num1=0flag;
void?delay(uint?z)
{
uint?xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar?keyscan();
?void?int0(void)?interrupt?0??????????????
????????{???int?m;
????P1=0xff;
?????????????for(m=0;m<5;m++)???????????
????????????{??P1=table2[m];
???????????????delay(500);
???????????????
?????????????????
?????????????????
????????????}
?????????}
????void?main()
??{???uchar?n=0;
?????uchar?m;
?uchar?i=0;
?????flag=1;
????
?TMOD=0x20;//設置定時器1為工作方式2
?????TH1=0xe8;
?TL1=0xe8;
?????TR1=1;
?????EA=1;???????????????????//總中斷開啟
?????EX0=1;??????????????????//外部中斷INT0開啟
?????IT0=1;
REN=1;
SM0=0;
SM1=1;
?while(flag)?i=keyscan();
?flag=1;
while(1)
{?
??if(num1==0)
???????????{
???RI=0;
???P0_0=0;
???while(!RI);
???delay(500);
???????????P1=SBUF;
???m=SBUF;
???????????table2[n]=m;
???????????n++;
???RI=0;
??}
??else?if(num1==1)
??{
???while(flag)?i=keyscan();
???flag=1;
???? ??
???P0_0=1;
???SBUF=table[i-1];
? ???while?(!TI);
????????????P1=table[i-1];
???TI=0;
??}
???
}
}
uchar?keyscan()
{
P2=0xfe;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case?0xee:{num=1;flag=0;}
break;
case?0xde:{num=2;?flag=0;}
break;
case?0xbe:{num=3;?flag=0;}
break;
case?0x7e:{num=4;??flag=0;}
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
P2=0xfd;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case?0xed:{num=5;flag=0;}
break;
case?0xdd:{num=6;flag=0;}
break;
case?0xbd:{num=7;flag=0;}
break;
case?0x7d:{num=8;flag=0;}
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
P2=0xfb;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case?0xeb:{num=9;??flag=0;}
break;
case?0xdb:{num=10;?flag=0;}
break;
case?0xbb:{num=11;flag=0;}
break;
case?0x7b:{num=12;?flag=0;}
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
????? P2=0xf7;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????122161??2010-07-15?01:39??MAX485\123.DSN
?????文件???????5115??2002-04-16?15:32??MAX485\STARTUP.A51
?????文件??????11768??2010-07-13?17:49??MAX485\STARTUP.lst
?????文件????????854??2010-07-13?17:49??MAX485\STARTUP.obj
?????文件???????8256??2010-07-13?17:49??MAX485\test1
?????文件???????3519??2010-07-13?19:57??MAX485\test1.c
?????文件???????2236??2010-07-13?17:49??MAX485\test1.hex
?????文件??????12648??2010-07-13?17:49??MAX485\test1.LST
?????文件??????13025??2010-07-13?17:49??MAX485\test1.M51
?????文件???????8712??2010-07-13?17:49??MAX485\test1.OBJ
?????文件???????1081??2010-07-15?01:39??MAX485\test1.Opt
?????文件????????164??2010-07-15?10:59??MAX485\test1.plg
?????文件???????2058??2010-07-12?23:33??MAX485\test1.Uv2
?????文件???????1081??2010-07-13?19:28??MAX485\test1_Opt.Bak
?????文件??????????0??2010-07-12?21:07??MAX485\test1_Uv2.Bak
?????目錄??????????0??2010-07-15?11:11??MAX485
-----------?---------??----------?-----??----
???????????????192678????????????????????16
評論
共有 條評論