資源簡介
單片機單總線的通信,是自己編寫的例子,還有很多不好的地方,沒有完美。希望對需要的人有幫助。

代碼片段和文件信息
#include
#define?uchar?unsigned?char
#define?uint?unsigned?int
sbit?dq?=?P1^0;
sbit?flag?=?P3^0;
sbit?flag1=?P3^1;
sbit?flag2=?P3^2;
uchar?Temp[3]={0xad0xe10xf1}; ???//要發送的數據?
uchar?ID[3]={0x000x010xef};?//???要通信的從機ID號?
void??????????_nop_?????(void);
void?TempDelay?(uchar?us) ???//軟件延時?
{
? while(us--);
}
void?Delay?() ??//定時器0延時?800
{
?TMOD=0x01;
?TH0=0xfe;
?TL0=0x70;
?//ET0=1;
//?EA=1;
?TR0=1;
}
/*
void?Delay0() ?//定時器0延時?500uS
{
?TMOD=0x01;
?TH0=0xff;
?TL0=0x06;
?TR0=1;
} */
void?Delay1() ???//定時器1延時300?
{
TMOD=0x10;
TH1=0xff;
TL1=0x6a;
TR1=1;
} ?
/*
void?Delay2() ???//定時器1延時400?
{
TMOD=0x10;
TH1=0xff;
TL1=0x38;
TR1=1;
}??*/
void?WriteByte?(uchar?wr)??
{
uchar?i;
for?(i=0;i<8;i++)
{
dq?=?0;
_nop_?();
dq=wr&0x01;
TempDelay(30);?
dq=1;?
_nop_();?
wr?>>=?1;
}
}
/*
uchar?ReadByte?()?????
{
uchar?iu=0;
for(i=0;i<8;i++)
{
u?>>=?1;
TempDelay?(5);
if(dq==1)
u?|=?0x80;
TempDelay?(25);
// _nop_();
}
return(u);
}
*/
//發送J個字節?當一個字節發送結束延時300uS低電平當全部發送結束延時500uS高電平?
void?Write_Mbyte(uchar?*?puchar?j)
{
uchar?i=0;
while(i {
?dq=1;
?nop_();
?WriteByte(p[i]);?
?dq=0;
?Delay1(); ???//延時300uS
?while(1)
{
? if(TF1)
? {
? TR1=0;
TF1=0;
? break; ??
? }
}
i++;
}
dq=1;
Delay();???//delay?800
while(1)
{
? if(TF0)
? {
? TR0=0;
TF0=0;
? break; ??
? }
}
}
void?Init?() ??//初始復位脈沖?
{
dq=0;
Delay();???//delay800uS?
while(1)
{
?if(TF0)
?{
? TR0=0;
TF0=0;
? break; ??
?}
}
}??
Match()
{
Write_Mbyte(ID3);
? //flag1=dq;
}
void?main()
{
flag=0;
flag1=0;
flag2=0;
Init();
Match();?
while(1)?;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????79295??2009-06-25?22:11??moni.DSN
?????文件??????25088??2009-06-28?11:38??過程描述.doc
?????文件???????2218??2009-06-28?11:03??U3.c
?????文件???????1912??2009-06-28?11:06??U1.c
-----------?---------??----------?-----??----
???????????????108513????????????????????4
評論
共有 條評論