找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 949|回复: 0
打印 上一主题 下一主题
收起左侧

MXL96014与单片机温度测量程序理解,求助三个问题

[复制链接]
跳转到指定楼层
楼主
ID:894870 发表于 2021-3-31 14:37 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
以下是问题三个问题
问题一. 知道 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();



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表