我自己设计、制作、编程开发的温湿度无线模块正式调试完成了。
整个模块由STC89C52RC单片机+DS18B20温度传感器+DHT11湿度传感器+24L01P无线模块组成。
其功能可以将温湿度采样后通过2.4G无线信号传送到主机上。
另外,这个模块也在92频道上监听来自主机的命令:
命令 80:查询命令。一旦接收到这个命令,模块马上进行一次温湿度采样,并将结果立即返回主机;
命令 90:设置模块工作模式命令。模块一共有28个工作模式,设置不同的采样间隔时间,最小5秒,最大18个小时。0模式设置模块不自主发送温湿度给主机,仅在主机发送查询命令时返回温湿度值。主机对模块的设置将被存入STC的片内EEPROM中。这样,下次开机时,模块就自动按照上次的设置开始工作了。
目前的问题是定时有误差。我还没有找到原因,我是用定时器0做的定时,应该很准的,但实际却有误差。下面是定时、中断相关的代码,如果您看出为何会出现误差,请回复这个帖子告诉我您的想法,谢谢先。
首先是定义了2个全局变量:
//中断计数器,每50ms加一
byte timerMSCounter = 0;
//中断计数器,每1秒加一
uint timerSecCounter = 0;
然后是对Timer0的初始化:
void initTimer0(void)
{
TMOD &= 0xf0; //清除定时器0模式位
TMOD |= 0x01; //设定定时器0为方式1:16位