AM2305的测试程序Word文档下载推荐.docx

上传人:b****5 文档编号:20370137 上传时间:2023-01-22 格式:DOCX 页数:11 大小:17.42KB
下载 相关 举报
AM2305的测试程序Word文档下载推荐.docx_第1页
第1页 / 共11页
AM2305的测试程序Word文档下载推荐.docx_第2页
第2页 / 共11页
AM2305的测试程序Word文档下载推荐.docx_第3页
第3页 / 共11页
AM2305的测试程序Word文档下载推荐.docx_第4页
第4页 / 共11页
AM2305的测试程序Word文档下载推荐.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

AM2305的测试程序Word文档下载推荐.docx

《AM2305的测试程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《AM2305的测试程序Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。

AM2305的测试程序Word文档下载推荐.docx

//收到起始标志位

unsignedcharSensor_ErrorFlag;

//读取传感器错误标志

unsignedintSys_CNT;

unsignedintTmp;

unsignedchar*String;

//字符串定义

#defineS_Temp"

Temp:

"

#defineS_RH"

RH:

#defineS_CRCT"

Check:

True"

#defineS_CRCF"

Wrong"

#defineS_Data"

Data:

"

#defineS_NotS"

SensorNotConnected"

/********************************************\

|*功能:

延时晶振为12M时*|

|*t=1为20us然后成倍增加10us左右*|

\********************************************/

voidDelay_N10us(unsignedchart)

{

while(t--)

{

_nop_();

}

}

延时晶振为12M时*|

|*延时大约1ms*|

\********************************************/

voidDelay_N1ms(unsignedintt)

unsignedinti;

unsignedintj;

for(j=t;

j>

0;

j--)

for(i=124;

i>

i--);

//延时大约1ms

初始化串口*|

voidInitUART(void)

unsignedintiTmpBaud;

unsignedlonglTmpBaud;

iTmpBaud=0;

//首先选定定时器2作为波特率发生器,16位定时器,自动装载

SCON=0x50;

//SM0SM1SM2RENTB8RB8TIRI//01010000

PCON=0x00;

//PCON的地址是87H,这里SMOD=0

T2CON=0x30;

//TF2EXF2RCLKTCLKEXEN2TR2C(/T2)CP(/RL2)//00110000

T2MOD=0x00;

////////T2OEDCEN//00000000

lTmpBaud=FOSC/BAUD;

lTmpBaud/=32;

//12T-mode

iTmpBaud=lTmpBaud&

0xFFFF;

iTmpBaud=65536-iTmpBaud;

RCAP2H=(iTmpBaud>

>

8)&

0x0FF;

RCAP2L=iTmpBaud&

RI=0;

//清除接收中断标志

REN=1;

//允许串行接收

ES=1;

//允许串行中断

TR2=1;

//启动定时器1

EA=1;

//开总中断

}

串口发送函数*|

voidUARTSend(charUCHAR)

SBUF=UCHAR;

while(TI==0);

TI=0;

串口中断函数*|

voidUARTRead(void)interrupt4

chartemp;

if(RI)

RI=0;

temp=SBUF;

/********************************************\

串口发送子函数*|

voidUART_PutString(unsignedchar*buf)

while(*buf)

UARTSend(*buf++);

voidUART_PutStringAndNum(unsignedchar*buf,unsignedintnum)

unsignedchara[3],i;

a[3]='

0'

+num%10;

a[2]='

.'

;

a[1]='

+num/10%10;

a[0]='

+num/100%10;

UARTSend('

'

);

for(i=0;

i<

4;

i++)

UARTSend(a[i]);

voidUART_PutStringAnd_Data(unsignedchar*buf,unsignedchar*bufdata)

unsignedchara[2],i,j;

5;

a[0]=bufdata[i]/16;

a[1]=bufdata[i]%16;

for(j=0;

j<

2;

j++)

{

if(a[j]>

9)

a[j]=(a[j]-10)+'

A'

}

else

a[j]=a[j]+'

UARTSend(a[j]);

UARTSend('

串口发送传感器数据函数*|

voidUARTSend_Nbyte(void)

if(Sensor_AnswerFlag==1)

Sensor_Check=Sensor_Data[0]+Sensor_Data[1]+Sensor_Data[2]+Sensor_Data[3];

//校验成功

if(Sensor_Check==Sensor_Data[4])

String=S_RH;

//"

Tmp=Sensor_Data[0]*256+Sensor_Data[1];

UART_PutStringAndNum(String,Tmp);

UARTSend('

String=S_Temp;

//"

Tmp=Sensor_Data[2]*256+Sensor_Data[3];

String=S_CRCT;

UART_PutString(String);

}else//校验失败送上读到数据

String=S_Data;

UART_PutStringAnd_Data(String,Sensor_Data);

String=S_CRCF;

}//传感器未连接

String=S_NotS;

//"

UART_PutString(String);

}

UARTSend(0x0A);

voidClear_Data(void)

inti;

Sensor_Data[i]=0x00;

}//接收数据清零

读传感器发送的单个字节*|

unsignedcharRead_SensorData(void)

unsignedchari,cnt;

unsignedcharbuffer,tmp;

buffer=0;

8;

cnt=0;

while(!

Sensor_SDA)//检测上次低电平是否结束

if(++cnt>

=300)

break;

//延时Min=26usMax50us跳过数据"

0"

的高电平

Delay_N10us

(2);

//延时30us

//判断传感器发送数据位

tmp=0;

if(Sensor_SDA)

tmp=1;

cnt=0;

while(Sensor_SDA)//等待高电平结束

if(++cnt>

=200)

{

}

buffer<

<

=1;

buffer|=tmp;

returnbuffer;

读传感器*|

unsignedcharRead_Sensor(void)

unsignedchari;

//主机拉低(Min=800USMax=20Ms)

Sensor_SDA=0;

Delay_N1ms

(2);

//延时2Ms

//释放总线延时(Min=30usMax=50us)

Sensor_SDA=1;

Delay_N10us

(1);

//延时30us

//主机设为输入判断传感器响应信号

Sensor_AnswerFlag=0;

//传感器响应标志

//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行

if(Sensor_SDA==0)

Sensor_AnswerFlag=1;

//收到起始信号

Sys_CNT=0;

//判断从机是否发出80us的低电平响应信号是否结束

while((!

Sensor_SDA))

if(++Sys_CNT>

300)//防止进入死循环

Sensor_ErrorFlag=1;

return0;

//判断从机是否发出80us的高电平,如发出则进入数据接收状态

while((Sensor_SDA))

}

//数据接收传感器共发送40位数据

//即5个字节高位先送5个字节分别为湿度高位湿度低位温度高位温度低位校验和

//校验和为:

湿度高位+湿度低位+温度高位+温度低位

Sensor_Data[i]=Read_SensorData();

else

//未收到传感器响应

return1;

voidmain(void)

Sensor_SCL=0;

InitUART();

//初始串口发送函数

while

(1)

Clear_Data();

//清除收到数据

Read_Sensor();

//读取传感器数据

UARTSend_Nbyte();

//串口发送读到传感器数据

Delay_N1ms(2000);

//延时2S(两次读取间隔至少2S)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1