以下是問題三個問題
問題一. 知道 sbit bit_out=flag1^7;是可以位尋址了,但是不是很清楚bit_out=1;是大概什么的意思,所以先請教?
問題二,這里面的void SendByte(uchar number);uchar ReadByte(void),兩個函數(shù)的具體是指什么呀?
按照我的理解SendByte()是 MXL96014發(fā)出的命令給單片機請求轉(zhuǎn)換如SendByte(0x07),
但是一般情況都是叫這個為寫程序,
所以就是不是很清楚是從單片機外面寫給MXL96014,還是MXL96014寫出命令給單片機呀?
問題三:void SendByte(uchar number);里面不知道這么理解是否正確,請指點一下?
單片機源程序如下:
/************數(shù)據(jù)定義*******************************************/
bdata uchar flag1;//可以位尋址數(shù)據(jù)
sbit bit_out=flag1^7;
sbit bit_in=flag1^0;
void star();//MXL96014起始條件程序
void stop();//MXL96014停止條件程序
uchar ReadByte(void);//字節(jié)讀子程序
void send_bit(void);//位寫子程序
void SendByte(uchar number);//字節(jié)寫子程序
void read_bit(void);//位讀子程序
/************************字節(jié)寫子程序*********************/
void SendByte(uchar number)//得多看一下才行,就是發(fā)送一個字節(jié)
{
uchar i,n,dat;
n=NACK_number;//用來計數(shù)
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則發(fā)送
{
bit_out=1; //移位之后就是1,發(fā)送1
}
else
{
bit_out=0; //不移位情況之下還是0,發(fā)送0
}
send_bit(); //發(fā)送一個位
dat=dat<<1; //表示向左移動一位
}
read_bit(); / /就是讀取模塊的一個位,發(fā)出來就讀取一個
if(bit_in == 1) //就是讀取進一個位,bit_in==1的情況下,
{
stop(); //若是停止讀取進一個位
if(n!=0) //在計數(shù)不為0的情況之下
{
n--; //可以重發(fā)NACK_number=10次,就是沒有收到確認之前還繼續(xù)發(fā)送
goto Repeat; //然后繼續(xù)可以讀取
}
else
{
goto exit; //若是已經(jīng)是重發(fā)了10次還是不行,則退出
}
}
else
{
goto exit; //退出,這里是判斷是否是bit_in==1的情況,不是則直接退出
}
Repeat: //就是繼續(xù)發(fā)送,而且位數(shù)也都是繼續(xù)的向左移一位了
star(); //重新開始
goto Send_again; //重發(fā)
exit:; //退出
}
/************************字節(jié)讀子程序*********************************/
uchar ReadByte(void)//一個字節(jié)等于8位,接收一個字節(jié)
{
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);
}
/*****************************溫度轉(zhuǎn)化與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();//字節(jié)讀程序,就是讀取模塊給的溫度讀取,低八位
bit_out=0;
th_temp=ReadByte();//字節(jié)讀程序,就是讀取模塊給的溫度讀取,讀高八位
bit_out=1;
err=ReadByte();
stop();
|