以下是问题三个问题
问题一. 知道 sbit bit_out=flag1^7;是可以位寻址了,但是不是很清楚bit_out=1;是大概什么的意思,所以先请教?
问题二,这里面的void SendByte(uchar number);uchar ReadByte(void),两个函数的具体是指什么呀?
按照我的理解SendByte()是 MXL96014发出的命令给单片机请求转换如SendByte(0x07),
但是一般情况都是叫这个为写程序,
所以就是不是很清楚是从单片机外面写给MXL96014,还是MXL96014写出命令给单片机呀?
问题三:void SendByte(uchar number);里面不知道这么理解是否正确,请指点一下?
单片机源程序如下:
/************数据定义*******************************************/
bdata uchar flag1;//可以位寻址数据
sbit bit_out=flag1^7;
sbit bit_in=flag1^0;
void star();//MXL96014起始条件程序
void stop();//MXL96014停止条件程序
uchar ReadByte(void);//字节读子程序
void send_bit(void);//位写子程序
void SendByte(uchar number);//字节写子程序
void read_bit(void);//位读子程序
/************************字节写子程序*********************/
void SendByte(uchar number)//得多看一下才行,就是发送一个字节
{
uchar i,n,dat;
n=NACK_number;//用来计数
Send_again:
dat=number;//这个就是dat_byte
for(i=0;i<8;i++)
{
f(dat&0x80) //0x70=0111 0000&1000 0000则就是只有0000 0000同时为1则为1,这里就是为0的话不,1则发送
{
bit_out=1; //移位之后就是1,发送1
}
else
{
bit_out=0; //不移位情况之下还是0,发送0
}
send_bit(); //发送一个位
dat=dat<<1; //表示向左移动一位
}
read_bit(); / /就是读取模块的一个位,发出来就读取一个
if(bit_in == 1) //就是读取进一个位,bit_in==1的情况下,
{
stop(); //若是停止读取进一个位
if(n!=0) //在计数不为0的情况之下
{
n--; //可以重发NACK_number=10次,就是没有收到确认之前还继续发送
goto Repeat; //然后继续可以读取
}
else
{
goto exit; //若是已经是重发了10次还是不行,则退出
}
}
else
{
goto exit; //退出,这里是判断是否是bit_in==1的情况,不是则直接退出
}
Repeat: //就是继续发送,而且位数也都是继续的向左移一位了
star(); //重新开始
goto Send_again; //重发
exit:; //退出
}
/************************字节读子程序*********************************/
uchar ReadByte(void)//一个字节等于8位,接收一个字节
{
uchar i,dat;
dat=0;
for(i=0;i<8;i++)
{
dat=dat<<1;//移位
read_bit();
if(bit_in==1)
{
dat=dat+1;
}
}
SDA=0;
send_bit();
return dat;
}
/***********************位读子程序************************************/
void read_bit(void)//接收一个位
{
SDA=1;
bit_in=1;
SCK=1;
delay(4);delay(4);
bit_in=SDA;
_nop_();
SCK=0;
delay(4);delay(4);
}
/*****************************温度转化与LCD显示部分****************************/
uchar convert_temp()
{
uint temp_zhen;
uchar temp_fu;
SCK=0;
star();
SendByte(0x00);
SendByte(0x07);
star();
SendByte(0x01);
bit_out=0;
tl_temp=ReadByte();//字节读程序,就是读取模块给的温度读取,低八位
bit_out=0;
th_temp=ReadByte();//字节读程序,就是读取模块给的温度读取,读高八位
bit_out=1;
err=ReadByte();
stop();
|