代码如下,用串口工具一看出来的值全是0
#include <ioCC2530.h>
//温湿度定义
char charFLAG,chartemp,charcount;
char charT_data_H,charT_data_L,charRH_data_H,charRH_data_L,charcheckdata;
char charT_data_H_temp,charT_data_L_temp,charRH_data_H_temp,charRH_data_L_temp,charcheckdata_temp;
char charcomdata;
char str[5];
char Txdata[25]="当前温度和湿度:";
void initUART(void)
{
CLKCONCMD &= ~0x40; // 设置系统时钟源为 32MHZ晶振
while(CLKCONSTA & 0x40); // 等待晶振稳定
CLKCONCMD &= ~0x47; // 设置系统主时钟频率为 32MHZ
PERCFG = 0x00; //位置1 P0口
P0SEL = 0x0c; //P0_2,P0_3用作串口,第二功能
P2DIR &= ~0xC0; //P0 优先作为UART0 ,优先级
U0CSR |= 0x80; //UART 方式
U0GCR |= 9; //U0GCR与U0BAUD配合
U0BAUD |= 59; // 波特率设为115200‘
UTX0IF = 0; //UART0 TX 中断标志初始置位0
}
void UartTX_Send_String(char *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U0DBUF=*Data++;
while(UTX0IF==0);
UTX0IF=0;
}
}
//延时函数
void Delay_us() //1 us延时
{
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
void Delay_10us() //10 us延时
{
Delay_us();
Delay_us();
Delay_us();
Delay_us();
Delay_us();
Delay_us();
Delay_us();
Delay_us();
Delay_us();
Delay_us();
}
void Delay_ms(uint Time)//n ms延时
{
unsigned char i;
while(Time--)
{
for(i=0;i<100;i++)
Delay_10us();
}
}
//温湿度传感
void COM(void) // 温湿写入
{
uchar i;
for(i=0;i<8;i++)
{
charFLAG=2;
while((!P0_7)&&charFLAG++);
Delay_10us();
Delay_10us();
Delay_10us();
chartemp=0;
if(P0_7)chartemp=1;
charFLAG=2;
while((P0_7)&&charFLAG++);
if(charFLAG==1)break;
charcomdata<<=1;
charcomdata|=chartemp;
}
}
void DHT11(void) //温湿传感启动
{
P0DIR |=0x80;
P0_7=0;
Delay_ms(18); //18MS
P0_7=1;
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
P0_7=1;
P0DIR &= ~0x80; //重新配置IO口方向
if(!P0_7)
{
charFLAG=2;
while((!P0_7)&&charFLAG++);
charFLAG=2;
while((P0_7)&&charFLAG++);
COM();
charRH_data_H_temp=charcomdata;
COM();
charRH_data_L_temp=charcomdata;
COM();
charT_data_H_temp=charcomdata;
COM();
charT_data_L_temp=charcomdata;
COM();
charcheckdata_temp=charcomdata;
P0DIR |=0x80;
P0_7=1;
chartemp=(charT_data_H_temp+charT_data_L_temp+charRH_data_H_temp+charRH_data_L_temp);
if(chartemp==charcheckdata_temp)
{
charRH_data_H=charRH_data_H_temp;
charRH_data_L=charRH_data_L_temp;
charT_data_H=charT_data_H_temp;
charT_data_L=charT_data_L_temp;
charcheckdata=charcheckdata_temp;
}
}
}
void main()
{
initUART();
Delay_ms(1);
while(1)
{
UartTX_Send_String(Txdata,25);
DHT11();
str[0]=charT_data_H/10+0x30;
str[1]=charT_data_H%10+0x30;
str[2]=charRH_data_H/10+0x30;
str[3]=charRH_data_H%10+0x30;
str[4]='\t';
UartTX_Send_String(str,5);
Delay_ms(2000);
}
}
|