请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TM4C123GH6PM 大家好、我正在使用 DHT11湿度和温度传感器。 根据数据表、我维护了传感器在稳定模式下运行的所有协议。 但是、我的代码确实会通过我之前用于检查是否存在高数据的第4个 while 环路。 下面是无限运行的循环。
while (((GPIO_PORTC_DATA_R 和0x10)= High_OUT)//迭代直到数据线为高电平
{}
我粘贴了下面的代码、我知道如何逐位检索数据、但我无法浏览此部分。 感谢您的任何帮助。
数据表: https://akizukidenshi.com/download/ds/aosong/DHT11.pdf
#include
#include
#include
#define SYSCTL_RCGCGPIO_R (*(volatile unsigned long *) 0x400FE608)
#define GPIO_PORTC_DEN_R (*(volatile unsigned long *) 0x4000651C)
#define GPIO_PORTC_DIR_DIR_R
(*(volatile Binlong *) 0x40006400)#define GPIO_PORTC_long (0x63int)、unsigned Int INT_t (unsigned int_t)(*)(unsigned int_int_int_int_int_int_inth)(unsigned int_int_int_inth)、unsigned int_int_int_int_inth (
void int_int_int_inth)
void UartWrite (char *pstr);
unsigned char Receiver (void);
void transmitter (unsigned int data);
void
pll_Init (void);
#define Clock_GPIO_C 0x04
#define DIR_PIN4_IN ~0x10
#define DIR_PIN4_OUT 0x10
#define High_IN_OUT 0x10 #define High_LOW
;#define ~
0x40 IN_IN_OUT 0x10 #define #define 0x40 IN_IN_IN_IN_OUT = IN_IN_IN_IN_OUT 0x10 IN_IN_IN_IN_IN_IN_IN_IN_IN_IN_IN_IN_OUT
INT Temp_16、Temp_High、Temp_Low; //温度变量
int rH_16、rH_High、rH_Low;//相对湿度变量
int Check_sum、temp、sum;//对奇偶校验进行奇偶校验的变量
int x、y、z;
sysctl_RCGCGPIO_R |= Clock_GPIO_C;//端口 C
延迟(100)的时钟;//使能 PM_INTS0;
// Int1_C4_TSN;// Int1_IT (= Clock = PM_C4_TS_C4_TSN)
while (1){//再次获取并显示传感器值和增益(无限)
while (1)//迭代直到温度和湿度值为 true
{
GPIO_PORTC_DIR_R |= DIR_PIN4_OUT;//将引脚 C4设置为输出
GPIO_PORTC_DATA_R &= Low_IN;//将数据线设置为低唤醒
延迟1100ms;
GPIO_PORTC_DATA_R |= HIGH_IN;//将数据线设置为高电平以实现30us
延迟(100000);
GPIO_PORTC_DIR_R &= DIR_PIN4_IN; //将引脚 C4设置为输入
while ((GPIO_PORTC_DATA_R & 0x10)== Low_OUT)//迭代直到数据线为低
电平{}
while ((GPIO_PORTC_DATA_R & 0x10)=High_OUT)//迭代直到数据线为高电平
{}
void delay (long=0_int=0;i+
周期
)
int Binary2Decimal (int bit_L、int bit_H、unsigned int Binary[])
{
int temp=0、i;
~
integer i baud = bit_L (<Bit_H;i++) temp += Binary[i] * (1<<((Bit_H-1)-i)); return temp; } void UART0_Init(void) { SYSCTL->= bit _L | 0x00000001;//UART43 CUART | 0x00000001;//UART0 SYSCTL->RCGCGPIO |0x00000001;//Porta 时钟启用 UART0->CTL 和= UART0
;/UART0>UART0>UART0;/UART0>UART0 = 0x00000001;/UART0 //波特率浮动
UART0->LCRH = 0x00000070;//启用 FEN & WLEN
UART0->CTL |= 0x00000001;// UART 启用;
GPIOA->AFSEL |= 0x03;// Porta 0-1
GPIOA->DEN |= 0x03;// PTA0-1 GPIOA-0>GPIOA-0X0>GPIOA-0X0X0>GPIOA-1&GPIOA-0X0>GPIOA-0X0>GPIOA-0X0>GPIOA-0X0=GPIOA-0X0X+GPIOA-0X0=GPIOA-0X0X0X0X+GPIOA-0=GPIOA-
~ //模拟禁用
}
void UartWrite(char *pstr){while
(*pstr !=0 ){Transmitter1(*pstr++);
}
unsigned char Receiver (void){
while ((UART0->FR&0x10)!= 0;return
UART0->DR&0xFF;}(UART0}(UART0=)0}(UART0=0}(UART0}(UART0=0})
void
数据发送器(UART0}(UART0=0}(UART0});UART0=0=0}(UART0}(UART0}(UART0=0});UART0}(UART0=0}(UART0=0}(UART0=0}(UART0})
sysctl->RCC2 |= 0x00000800;
sysctl->RCC =(sysctl->RCC &~0x000007C0)+ 0x00000540;
sysctl->RCC2 &=~0x00000070;
sysctl->RCC2 &RCC2=0x000002 ~
;SYSCT2=<SYSC0002=<SYSCT2=0xCC0002+<SYSC0002=<SYSCTRS=0x0002+<SYSC0002=<SYSCTxRCC2<SYSCTx0002=<SYSCTxRCC2=0x0002+<SYSCTxRCC2<SYSCTL<SYSCTL<= 0x00002000;SYSC0002<SYSCTxRCC2<SYSCTL<SYSCTL<=~ 0x
~