找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 975|回復(fù): 0
收起左側(cè)

MXL96014與單片機溫度測量程序理解,求助三個問題

[復(fù)制鏈接]
ID:894870 發(fā)表于 2021-3-31 14:37 | 顯示全部樓層 |閱讀模式
以下是問題三個問題
問題一. 知道 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();



回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表