一、定时器模块程序:
由于中颖单片机也是51内核的单片机,因此对于学校学习过中颖单片机的小伙伴来说,用起来是毫无压力的。所以,datasheet上的东西就不细说了,直接贴上初始化代码吧。
/**********************************************************************
名 称:init_timer1
功 能:初始化定时器
参 数:无
返 回:无
说 明:中颖SH79F084A系统时钟16.6MHz,2ms定时中断初值
为0XF531。
*****************************************************************************/
void init_timer1(void)
{
TMOD |= 0x10;//定时器1工作在方式1
TL1 = 0x31;
TH1 = 0xf5;
TF1 = 0;//清楚定时中断
ET1 = 1;//使能定时器1中断
TR1 = 1;//开启定时器1
}
定时器中断函数源代码如下:
/******************************************************************************
名 称:timer1_isr
功 能:定时器1中断处理
参 数:无
返 回:无
*********************************************************************************/
void timer1_isr(void) interrupt 3
{
TL1 = 0x31;
TH1 = 0xf5;
}
以上完成了定时器模块的程序编写,有了2ms的定时最小时基,那么接下来的所有定时工作,都可以在这个基础上完成了,很简单吧!( ^_^ )
二、NTC温度采集模块软件程序:
整个系统的温度控制是通过单片机AD口采集NTC热敏电阻和10K精密电阻的分压值转化成温度的,进而控制所需的奶温,中颖单片机的AD为10位。
如上图所示,根据AD转换原理,有如下公式:
(AD/1024)*Ref = 5*10/(10 + Rntc),由于中颖单片机采用内部参考电压VDD,因此Ref = 5,所以根据上式可以算出单片机所采集到的AD值,公式中Rntc可以根据NTC规格书的阻值表查询到。因此我们可以根据每个温度值对应的阻值计算出该温度所对应的AD值,将所有的温度AD值计算出来,然后建立一个表到单片机里面,从而可以得知此时的奶温。下面贴出源代码:
/******************************************************************************
名 称:init_ADC
功 能:初始化ADC
参 数:无
返 回:无
*********************************************************************************/
void init_ADC(void)
{
ADCH |= (1 << 6 | 1 <<6);//规格书Datasheet有说明,请大家查阅//附件规格书的AD部分相关寄存器,此基础器是将相关IO口配置为AD功能
ADT = 0x0f|0xe0;//设置ADC的时钟周期和采样时间
ADCON |= 0x80;//使能ADC功能
}
/******************************************************************************
名 称:get_ADC_val
功 能:获得ADC 转换结果
参 数:需要采集的ADC通道
返 回:返回获取到的AD值
*********************************************************************************/
u16 get_ADC_val(u8 ADC_channel)
{
u16 ADC_val = 0;
ADCON &= ~(7 << 1);//清楚ADC通道
ADCON |= ADC_channel << 1;//将需要采集的ADC通道通过参数传入
ADCON |= 0x01;//开始ADC转换
while (ADCON & 0x01);//等待ADC转换完成
ADC_val = ((ADDH << 2) | (ADDL & 0x03));//获取转换的AD值
return ADC_val;//返回采集到的AD值
}
好了,今天就先写到这里了,有了定时器模块和AD模块,再把按键框架程序写好后,基本的程序框架就已经完成了,上层的应用功能就是通过调用这些底层的函数来实现了。下一讲我们会讲怎样通过转换出的AD值来得到实际的温度,并且根据定时器的最小时基2ms来进行一些滤波处理,有什么问题,欢迎来信探讨,兄弟们晚安!
文章评论(0条评论)
登录后参与讨论