找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机代码报错 求教大神

[复制链接]
跳转到指定楼层
#
请求大神们解答一下下面的报错是怎么回事,我是初学者,所以一直不知道怎么调试,谢谢大神们
#include<reg52.h>
void Seg7_Display(u16 val,u8 Dec_Hex);
bit DS18B20_Reset();
void DS18B20_WriteData(u8 dat);
u8 DS18B20_ReadData();
sbit DSI18B20_DQ = P3^7;
u8 tempL;
u16 tempH;
u16 temp;
void main()
{
        while(1)
        {
                DS18B20_Reset();
                DS18B20_WriteData(0xcc);  //跳过rom检测
                DS18B20_WriteData(0x44);         //启动温度转换
                DS18B20_Reset();
                DS18B20_WriteData(0xcc);  //跳过rom检测
                DS18B20_WriteData(0xBE);         //读暂存器命令
                tempL = DS18B20_ReadData(); //读温度低位
                tempH = DS18B20_ReadData();        //读温度高位
                tempH = (temp<<8) | tempL;
                if((tempH&0xF800) == 0xF800) //如果为负值按位取反加1
                        tempH =        ~tempH + 1;
                temp = tempH * 0.0625 *10;
                Seg7_Display(temp,10);               
        }
}

bit DS18B20_Reset()
{
        bit flag;
        u8 i;
        DS18B20_DQ = 0;
        for(i=240;i>0;i--);        //每执行一次,是俩个机械周期 240x2=480us
        DS18B20_DQ = i;
        for(i=30;i>0;i--);  //延时约80us
        flag = DS18B20_DQ;
        for(i=200;i>0;i--); //延时约400us
        return flag;
}

void DS18B20_WriteData(u8 dat)
{
        u8 i,j;
        for (j=0;j<8;j++);
        {
                DS18B20_DQ = 0;
                for(i=2;i>0;i--);
                DS18B20_DQ = dat & 0x01;  //取出最低位
                for(i=30;i>0;i--);                  //延时约60us
                DS18B20_DQ = 1;                          //释放总线
                dat = dat >> 1;
        }
}

u8 DS18B20_ReadData()
{
        u8 i,j,rdata;
        for(j=0;j<8;j++);
        {
                rdata >>=1;
                 DS18B20_DQ = 0;
                for(i=2;i>0;i--);
                DS18B20_DQ = 1;
                for(i=3;i>0;i--);                   //延时
                if(DS18B20_DQ==1)
                        rdat=rdata | 0x80;
                for(i=30;i>0;i--);                  //延时约60us
                DS18B20_DQ = 1;                          //释放总线
        }
        return rdata;
}


1.png (34.73 KB, 下载次数: 34)

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

使用道具 举报

10#
ID:1081825 发表于 2023-6-5 14:25 | 只看该作者
xuyaqi 发表于 2023-6-3 19:54
rdat=rdata | 0x80;rdat应该是rdata。

谢谢大神指导
回复

使用道具 举报

9#
ID:1081825 发表于 2023-6-5 14:24 | 只看该作者
xuyaqi 发表于 2023-6-3 19:51
sbit DSI18B20_DQ = P3^7;多了一个I。

谢谢大神指导
回复

使用道具 举报

8#
ID:1081825 发表于 2023-6-5 14:24 | 只看该作者
xuyaqi 发表于 2023-6-3 19:43
u16,u8没有定义,前面应加上
#define u16 unsigned int
#define u8 unsigned char

谢谢大神指导
回复

使用道具 举报

7#
ID:123289 发表于 2023-6-5 11:10 | 只看该作者
将英文译一下,就知道了。
回复

使用道具 举报

6#
ID:213173 发表于 2023-6-4 10:44 | 只看该作者
除了楼上指出的问题外还缺少void Seg7_Display(u16 val,u8 Dec_Hex)函数体。
回复

使用道具 举报

5#
ID:116103 发表于 2023-6-3 20:28 | 只看该作者
语法错误
回复

使用道具 举报

地板
ID:94031 发表于 2023-6-3 19:54 | 只看该作者
rdat=rdata | 0x80;rdat应该是rdata。
回复

使用道具 举报

板凳
ID:883242 发表于 2023-6-3 19:53 | 只看该作者
xuyaqi 发表于 2023-6-3 19:43
u16,u8没有定义,前面应加上
#define u16 unsigned int
#define u8 unsigned char

#define没有typedef正规。
回复

使用道具 举报

沙发
ID:94031 发表于 2023-6-3 19:51 | 只看该作者
sbit DSI18B20_DQ = P3^7;多了一个I。
回复

使用道具 举报

楼主
ID:94031 发表于 2023-6-3 19:43 | 只看该作者
u16,u8没有定义,前面应加上
#define u16 unsigned int
#define u8 unsigned char
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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