⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text1.c

📁 RS485通讯代码,主机从机都有,调试通过绝对可以用
💻 C
字号:
#include<reg51.h>
#include <string.h>
#include <intrins.h>
sbit P15=P1^5;
sbit DQ=P1^0;
#define COUNT 10
#define NODE_ADDR 64
#define uchar unsigned char
uchar data shidu1,shidu2;
uchar data temp_data[2]={0x00,0x00};
uchar data display[5]={0x00,0x00,0x00,0x00,0x00};
uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};

unsigned char buffer[COUNT];
int pointer;

/********************************************************/
void DelayM(unsigned int a);
void DelayM(unsigned int a){//延时函数 1MS/次	
		unsigned char i;
		while( --a != 0){		
			for(i = 0; i < 125; i++);  //一个 ; 表示空语句,CPU空转。
		}   				   //i 从0加到125,CPU大概就耗时1毫秒
}

/**********************************************************************/
//延迟函数 11us
void delay(int t)
{
for(;t>0;t--);
}



//18B20复位函数
ow_reset(void)
{
	char presence=1;
	while(presence)
	{
		while(presence)
			{
				DQ=1;_nop_();_nop_();
				DQ=0;
				delay(50);
				DQ=1;
				delay(6);
				presence=DQ;
			}
			delay(45);
			presence= ~DQ;
	 }
	 DQ=1;

}


 
//18B20写命令函数 向总线上写一个比特
void write_byte(uchar val)
{
	uchar i;
	for(i=8;i>0;i--)
	{
		DQ=1;_nop_();_nop_();
		DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();
		DQ=val&0x01;
		delay(6);
		val=val/2;
	}
	DQ=1;
	delay(1);
}

//18B20读1比特函数,从总线上读取一个字节
uchar read_byte(void)
{
	uchar i;
	uchar value=0;
	for (i=8;i>0;i--)
	{
		DQ=1;_nop_();_nop_();
		value>>=1;
		DQ=0;
		_nop_();_nop_();_nop_();_nop_();
		DQ=1;_nop_();_nop_();_nop_();_nop_();
		if(DQ)value|=0x80;
		delay(6);
	}
	DQ=1;
	return(value);
}


//读取温度函数
read_temp()
{
	ow_reset();
	write_byte(0xCC);
	write_byte(0xBE);
	temp_data[0]=read_byte();
	temp_data[1]=read_byte();
	ow_reset();
	write_byte(0xCC);
	write_byte(0x44);
}
work_temp()
{
	uchar n=0;
	if (temp_data[1]>127)
	{
		temp_data[1]=(256-temp_data[1]);
		temp_data[0]=(256-temp_data[0]);
		n=1;
	}

	display[4]=temp_data[0]&0x0f;
	display[0]=ditab[display[4]];//xiao
	display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
	display[3]=display[4]/100;//+-
	display[1]=display[4]%100;//
	display[2]=display[1]/10;//shi
	display[1]=display[1]%10;//ge
	if(!display[3])
	{
		display[3]=0x00;
		if(!display[2])
			{
				display[2]=0x00;
			}
	}		  
	if(n)
	{
		display[3]=0x0a;
	}



}


main()
{	
	P15=1;
	ow_reset();
	write_byte(0xcc);
	write_byte(0x44);
while(1)
{
	read_temp();
	work_temp();
	
//	buffer[0]=(0x30);
//	buffer[1]=(0x31);
//	buffer[2]=(0x32);
//	buffer[3]=(0x33);

while(pointer<COUNT)
{
	buffer[pointer]='A'+pointer;
	pointer++;
}
//	buffer[0]='S';
	buffer[0]=(0x30+display[2]);
	buffer[1]=(0x30+display[1]);
	buffer[2]=('.');
	buffer[3]=(0x30+display[0]);
	SCON=0xc0;
	TMOD=0x20;
	TH1=0xfd;
	TR1=1;
	ET1=0;
	ES=1;
	EA=1;
	pointer=-1;
	TB8=1;
	SBUF=NODE_ADDR;
	while(pointer<COUNT);
}
}
void send(void) interrupt 4 using 3
{
	TI=0;
	pointer++;
	if(pointer>=COUNT)
	return;
	else
	{
		TB8=0;
		SBUF=buffer[pointer];
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -