void main(void) { CLKCONCMD &= ~0x40; //晶振 while (CLKCONSTA & 0x40); //等待晶振稳定 CLKCONCMD &= ~0x47; //TICHSPD128分频,CLKSPD不分频 SLEEPCMD |= 0x04; //关闭不用的RC振荡器 P1DIR |= 0x01; initUARTSEND(); Delay(50000); while (1) { Read_DHT11();//调用温湿度读取子程序 Delay(60000);//循环采样的延时,读取模块数据周期不易小于2S sprintf(str, "%dC, %dH\n", T_data_H, RH_data_H); UartTX_Send_String(str, 16); P1_0 ^= 1; } }分析代码画出流程图并解释说明
时间: 2024-02-14 19:22:14 浏览: 77
基于C51单片机的DHT11温湿度传感器驱动程序源代码.zip
5星 · 资源好评率100%
以下是对该代码的分析:
1. 首先将CLKCONCMD寄存器的第6位清零,即使用外部晶振作为系统时钟。然后使用while循环等待晶振稳定。
2. 将CLKCONCMD寄存器的第0、1、6、7位清零,即选择TICHSPD128分频,CLKSPD不分频。这里TICHSPD128分频是指将高频振荡器的频率分频128倍作为系统时钟,CLKSPD不分频是指保持系统时钟的频率不变。
3. 将SLEEPCMD寄存器的第2位置1,即关闭不用的RC振荡器,以节省功耗。
4. 将P1DIR寄存器的第0位置1,即将P1.0引脚设置为输出模式。
5. 调用initUARTSEND函数,初始化串口发送。
6. 延时50000个机器周期(约为1秒),等待系统稳定。
7. 进入无限循环,不断读取温湿度传感器的数据,每次读取后延时60000个机器周期(约为2秒),然后将温湿度数据格式化为字符串并通过串口发送出去,最后将P1.0引脚的输出状态取反。
以下是对该代码的流程图解释:
![image-20211205181128406](https://i.loli.net/2021/12/05/YDvQkep7yWmzGjL.png)
该代码的流程图比较简单,主要分为四个部分:
1. 初始化部分:设置系统时钟、关闭不用的RC振荡器、初始化串口发送等。
2. 延时部分:延时50000个机器周期,等待系统稳定。
3. 读取温湿度数据部分:调用Read_DHT11函数读取温湿度传感器的数据,并将数据格式化为字符串通过串口发送出去。
4. 循环部分:将P1.0引脚的输出状态取反,然后进入下一轮循环。
阅读全文