找回密码
 立即注册

QQ登录

只需一步,快速开始

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

同样的程序stc90c516rd上测得的温度值正常,移植到STC12C5A60s发生溢出

[复制链接]
跳转到指定楼层
楼主
ID:82231 发表于 2016-8-1 19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int

#define jump_ROM 0xCC
#define start 0x44
#define read_EEROM 0xBE

sbit DQ = P3^5;            //DS18B20数据口

unsigned char TMPH,TMPL;

uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/********************************************************************
* 名称 : delay()
* 功能 : 延时函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void delay(uint N)
{
        int i;
        for(i=0; i<N; i++)
        ;
}

/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
        uchar x,j;
        for(j=0;j<i;j++)
        for(x=0;x<=148;x++);       
}
/********************************************************************
* 名称 : Reset()
* 功能 : 复位DS18B20
* 输入 : 无
* 输出 : 无
***********************************************************************/
uchar Reset(void)
{
        uchar deceive_ready;
        DQ = 0;
        delay(29);
        DQ = 1;
        delay(3);
        deceive_ready = DQ;
        delay(25);
        return(deceive_ready);
}

/********************************************************************
* 名称 : read_bit()
* 功能 : 从DS18B20读一个位值
* 输入 : 无
* 输出 : 从DS18B20读出的一个位值
***********************************************************************/
uchar read_bit(void)
{
        uchar i;
        DQ = 0;
        DQ = 1;
        for(i=0; i<3; i++);
        return(DQ);
}

/********************************************************************
* 名称 : write_bit()
* 功能 : 向DS18B20写一位
* 输入 : bitval(要对DS18B20写入的位值)
* 输出 : 无
***********************************************************************/
void write_bit(uchar bitval)
{
DQ=0;if(bitval==1)
DQ=1;
delay(5);
DQ=1;
}

/********************************************************************
* 名称 : read_byte()
* 功能 : 从DS18B20读一个字节
* 输入 : 无
* 输出 : 从DS18B20读到的值
***********************************************************************/
uchar read_byte(void)
{
        uchar i,m,receive_data;
        m = 1;
        receive_data = 0;
        for(i=0; i<8; i++)
        {
                if(read_bit())
                {
                        receive_data = receive_data + (m << i);
                }
                delay(6);
        }
        return(receive_data);
}

/********************************************************************
* 名称 : write_byte()
* 功能 : 向DS18B20写一个字节
* 输入 : val(要对DS18B20写入的命令值)
* 输出 : 无
***********************************************************************/
void write_byte(uchar val)
{
        uchar i,temp;
        for(i=0; i<8; i++)
        {
                temp = val >> i;
                temp = temp & 0x01;
                write_bit(temp);
                delay(5);
        }
}
void InitTimer0(void)                 //2ms
{
    TMOD = 0x21;
    TH0 = 0x0FC;
    TL0 = 0x066;

        TH1 = 0xFD;
    TL1 = TH1;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
//        ET1 = 1;
    SCON = 0x40;
        PCON = 0x00;
    TR1 = 1;
        EX0=1;
        IT0=0;
}
void SendOneByte(unsigned char c)
{
    SBUF = c;
    while(!TI);
    TI = 0;
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{       
        uint temp;
        P2 = 0x00;
        InitTimer0( );
        while(1)
        {
                Reset();
                write_byte(jump_ROM);
                write_byte(start);
                Reset();
                write_byte(jump_ROM);
                write_byte(read_EEROM);
                TMPL = read_byte();
                TMPH = read_byte();
                temp = TMPL / 16 + TMPH * 16;
                P0 = table[temp/10%10];
                P2 = 0xfd;
                Delay_1ms(5);
                P0 = table[temp%10];
                P2 = 0xfe;
                Delay_1ms(5);
                SendOneByte(TMPL);
                SendOneByte(TMPH);
        }
}


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

使用道具 举报

沙发
ID:135510 发表于 2016-8-1 22:31 | 只看该作者
因为12比51快,所以你那延时要改
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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