原创 【博客大赛】手把手教你写电子打奶器软件程序(二)-定时器和AD模块

2016-4-25 23:18 541 0 分类: MCU/ 嵌入式

一、定时器模块程序:

由于中颖单片机也是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位。

20160425231053715.jpg

如上图所示,根据AD转换原理,有如下公式:

(AD/1024)*Ref = 5*10/(10 + Rntc),由于中颖单片机采用内部参考电压VDD,因此Ref = 5,所以根据上式可以算出单片机所采集到的AD值,公式中Rntc可以根据NTC规格书的阻值表查询到。因此我们可以根据每个温度值对应的阻值计算出该温度所对应的AD值,将所有的温度AD值计算出来,然后建立一个表到单片机里面,从而可以得知此时的奶温。下面贴出源代码:

  1. AD初始化代码:

/******************************************************************************

名    称:init_ADC

功    能:初始化ADC

参    数:无

返    回:无                                                                          

*********************************************************************************/

void init_ADC(void)

{

       ADCH |= (1 << 6 | 1 <<6);//规格书Datasheet有说明,请大家查阅//附件规格书的AD部分相关寄存器,此基础器是将相关IO口配置为AD功能

       ADT = 0x0f|0xe0;//设置ADC的时钟周期和采样时间

       ADCON |= 0x80;//使能ADC功能

}

  1. 、获取AD值函数:

/******************************************************************************

名    称: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条评论)

登录后参与讨论
相关推荐阅读
liuyongliuyong1 2018-04-15 16:24
【博客大赛】1 使用机智云APP远程控制STM32战舰V2开发板
1.1、    在机智云官网下载中心下载ESP8266对应的GAgent固件: 下载网址:https://download.gizwits.com/zh-cn/p...
liuyongliuyong1 2017-11-14 20:30
【博客大赛】STM32F0-FreeRTOS移植2-使用STM32 CubeMX快速体验FreeRTOS
1.1、准备工作:(1)、首先到如下两个网址下载相关文件STM32CubeF0:http://www.stmcu.org/document/detail/index/id-215449STM32Cub...
liuyongliuyong1 2017-05-05 08:14
【博客大赛】嵌入式网络LwIP学习宝典-热门书籍分享
嵌入式网络LwIP学习宝典-热门书籍分享 学习如逆水行舟,不进则退。无论你是即将毕业的职场小白,还是已经成为奋战在职场一线的攻城狮、程序猿,都是需要时刻给自己充电的。有句话说的好,如果当你的知识不足以...
liuyongliuyong1 2017-04-13 17:20
【博客大赛】基于STM32的LED16X32点阵万年历-带阴历阳历节气生肖天干
基于STM32的LED16X32点阵万年历-带阴历阳历节气生肖天干 首先在开篇之前介绍下本项目所参考引用的公历转农历算法。本项目所采用的公历转农历算法都来自于赖皮网友,他本人的邮箱为:E-MAIL:L...
liuyongliuyong1 2016-04-27 16:17
【博客大赛】手把手教你写电子打奶器软件程序(三)-温度转换处理模块
一、温度处理模块程序: 我们采用模块化编程风格,有利于管理项目工程,也更容易查找BUG,大家千万要形成一个好的代码风格,不要一个main.c文件从头写到尾,各种函数都在main.c里面,这样让...
广告
我要评论
0
0
广告
关闭 热点推荐上一条 /5 下一条