求解释一下这段C语言的代码,急~~~尽可能的详细些,满意回答追加分数!!!!
include"ioCC2430.h"voiddelay_18B20(unsignedcharn){unsignedchari;for(i=0;i<n;i++);}voi...
include "ioCC2430.h"
void delay_18B20(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++);
}
void wrbyte(unsigned char Byte);
unsigned char rdbyte(void);
void init1820(void);
void main(void)
{ unsigned char xy[3]={0,0,0};
while(1)
{
init1820();
wrbyte(0XCC);
wrbyte(0X44);
//P1DIR|=0X03;
init1820();
wrbyte(0XCC);
wrbyte(0XBE);
xy[0]=rdbyte();
xy[1]=rdbyte();
P1DIR|=0x03;
if(xy[0]>0x28) P1_0=0;
P1_1=0;
xy[2]=((xy[0]>>4)|(xy[1]&0xf0));
delay_18B20(3);
}
}
void init1820(void)
{
unsigned char j;
P1DIR|=0X20;
P1_5 = 1;
delay_18B20(2);
P1_5= 0;
for(j=0;j<25;j++)
delay_18B20(30); //480us
P1_5 = 1;
for(j=0;j<25;j++)
delay_18B20(30); //480us
}
void wrbyte(unsigned char Byte)
{
unsigned char k,j;
for(k=0;k<8;k++)
{
P1DIR|=0X20;
P1_5=0;
// for(j=0;j<3;j++)
// delay_18B20(5); //18us
asm("nop");
asm("nop");
asm("nop");
asm("nop");//10
asm("nop");(延时很短的一段时间)
asm("nop");
;
asm("nop");
asm("nop");//20
asm("nop");
asm("nop");//30
asm("nop");
asm("nop");//*/
P1_5=Byte&0X01;
for(j=0;j<8;j++)
{
delay_18B20(8); //52us
}
P1_5=1;
delay_18B20(1);
Byte>>=1;
}
}
unsigned char rdbyte(void)
{
unsigned char i,j,ttt=0x00;
for(i=0;i<8;i++)
{
P1DIR|=0X20;
P1_5=0;
asm("nop");
asm("nop"
asm("nop");
asm("nop");//32
P1_5=1;
P1DIR&=0XDF;
for(j=0;j<3;j++)
delay_18B20(2);//35us
// P1DIR&=0XDF;
if(P1_5) ttt|=0x80;
for(j=0;j<8;j++)
{
delay_18B20(8);//56us
}
ttt>>=1;
P1DIR|=0X20;
P1_5=1;
delay_18B20(1);
}
delay_18B20(30);
return(ttt);
}
/*void main(void)
{unsigned char k=0x00;
P1DIR=0X20;
for(;;)
{
P1_5=0;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
P1_5=1;
asm("nop");
asm(
小弟有点急,请各位大侠能解释的详细一下,最好能详细告知每一行是什么意思,重复的就不用说了。谢谢各位了~~~ 展开
void delay_18B20(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++);
}
void wrbyte(unsigned char Byte);
unsigned char rdbyte(void);
void init1820(void);
void main(void)
{ unsigned char xy[3]={0,0,0};
while(1)
{
init1820();
wrbyte(0XCC);
wrbyte(0X44);
//P1DIR|=0X03;
init1820();
wrbyte(0XCC);
wrbyte(0XBE);
xy[0]=rdbyte();
xy[1]=rdbyte();
P1DIR|=0x03;
if(xy[0]>0x28) P1_0=0;
P1_1=0;
xy[2]=((xy[0]>>4)|(xy[1]&0xf0));
delay_18B20(3);
}
}
void init1820(void)
{
unsigned char j;
P1DIR|=0X20;
P1_5 = 1;
delay_18B20(2);
P1_5= 0;
for(j=0;j<25;j++)
delay_18B20(30); //480us
P1_5 = 1;
for(j=0;j<25;j++)
delay_18B20(30); //480us
}
void wrbyte(unsigned char Byte)
{
unsigned char k,j;
for(k=0;k<8;k++)
{
P1DIR|=0X20;
P1_5=0;
// for(j=0;j<3;j++)
// delay_18B20(5); //18us
asm("nop");
asm("nop");
asm("nop");
asm("nop");//10
asm("nop");(延时很短的一段时间)
asm("nop");
;
asm("nop");
asm("nop");//20
asm("nop");
asm("nop");//30
asm("nop");
asm("nop");//*/
P1_5=Byte&0X01;
for(j=0;j<8;j++)
{
delay_18B20(8); //52us
}
P1_5=1;
delay_18B20(1);
Byte>>=1;
}
}
unsigned char rdbyte(void)
{
unsigned char i,j,ttt=0x00;
for(i=0;i<8;i++)
{
P1DIR|=0X20;
P1_5=0;
asm("nop");
asm("nop"
asm("nop");
asm("nop");//32
P1_5=1;
P1DIR&=0XDF;
for(j=0;j<3;j++)
delay_18B20(2);//35us
// P1DIR&=0XDF;
if(P1_5) ttt|=0x80;
for(j=0;j<8;j++)
{
delay_18B20(8);//56us
}
ttt>>=1;
P1DIR|=0X20;
P1_5=1;
delay_18B20(1);
}
delay_18B20(30);
return(ttt);
}
/*void main(void)
{unsigned char k=0x00;
P1DIR=0X20;
for(;;)
{
P1_5=0;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
P1_5=1;
asm("nop");
asm(
小弟有点急,请各位大侠能解释的详细一下,最好能详细告知每一行是什么意思,重复的就不用说了。谢谢各位了~~~ 展开
2个回答
展开全部
我们只看主函数
void main(void)
{ unsigned char xy[3]={0,0,0};
while(1)//进入一个while循环,这个不会中断
{
init1820();//初始化1820,1820是个设备?
wrbyte(0XCC);//调用写函数,写入0xCC和0x44
wrbyte(0X44);
//P1DIR|=0X03;
init1820();//再次初始化
wrbyte(0XCC);//调用写函数,写入0xCC和0xBE
wrbyte(0XBE);
xy[0]=rdbyte();//调用读函数,读入两个数并存入xy[0]和xy[1]中
xy[1]=rdbyte();
P1DIR|=0x03;
if(xy[0]>0x28) P1_0=0;//判断第一次读入的数是否大于0x28,如果是则P1_0=0;否则P1_1=0;这两个应该是P1口的两个位
P1_1=0;
xy[2]=((xy[0]>>4)|(xy[1]&0xf0));//将xy[0]右移4位的结果和xy[1]位与0xf0的结果位或后
,赋给xy[2]
delay_18B20(3);//延时
}
}
void main(void)
{ unsigned char xy[3]={0,0,0};
while(1)//进入一个while循环,这个不会中断
{
init1820();//初始化1820,1820是个设备?
wrbyte(0XCC);//调用写函数,写入0xCC和0x44
wrbyte(0X44);
//P1DIR|=0X03;
init1820();//再次初始化
wrbyte(0XCC);//调用写函数,写入0xCC和0xBE
wrbyte(0XBE);
xy[0]=rdbyte();//调用读函数,读入两个数并存入xy[0]和xy[1]中
xy[1]=rdbyte();
P1DIR|=0x03;
if(xy[0]>0x28) P1_0=0;//判断第一次读入的数是否大于0x28,如果是则P1_0=0;否则P1_1=0;这两个应该是P1口的两个位
P1_1=0;
xy[2]=((xy[0]>>4)|(xy[1]&0xf0));//将xy[0]右移4位的结果和xy[1]位与0xf0的结果位或后
,赋给xy[2]
delay_18B20(3);//延时
}
}
追问
谢谢你的回答,主函数基本了解了,但能再解释一下这两段么:(1820是个温度传感器)
include "ioCC2430.h"
void delay_18B20(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++);
}
void wrbyte(unsigned char Byte);
unsigned char rdbyte(void);
void init1820(void);
追答
include "ioCC2430.h"//加的一个头文件
void delay_18B20(unsigned char n)//定义了一个1820的延时函数,用于设备的状态改变
{
unsigned char i;
for(i=0;i<n;i++);
}
void wrbyte(unsigned char Byte);//一下皆为函数声明
unsigned char rdbyte(void);
void init1820(void);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询