首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

【Smart-M051】基础实验2 Timer(定时器/计数器)

2012-08-02 
【Smart-M051】基础实验二 Timer(定时器/计数器)一、硬件部分:MCU(M052LAN)--74LS164--LCD1602二、软件部分:

【Smart-M051】基础实验二 Timer(定时器/计数器)

【Smart-M051】基础实验2 Timer(定时器/计数器)

一、硬件部分:MCU(M052LAN)-->74LS164-->LCD1602

二、软件部分:Just code it.

三、结论:

通过定时器实现准确延时目的;

认识中断服务函数TMR1_IRQHandler()和main()函数的关系;

通过设置断点掌握基本的调试技巧。

 

/* ------------------------------------ *作    者:SmartM-AX *官    网:www.smartmcu.com *淘    宝:http://smartmcu.taobao.com/ * Q  Q   :1771744839 *功 能 描 述:通过定时器TMR1周期模式实现1s计数,并延迟3秒将文字显示到LCD1602上. ------------------------------------ */#include "SmartM_M0.h"/*************************************************** *             定义全局变量 ***************************************************/UINT8       __g_bTime1SecCnt     = 0;     //1s事件计数器VOLATILE BOOL        __g_Timer1IRQEvent   = FALSE;//中断事件发生标志位VOLATILE BOOL        __g_bTime1SecEvent   = FALSE;//1s事件发生标志位/***************************************************** 函数名称: itoa* 输    入: val,*str* 输    出: 无* 功能描述: 整型数据转化成字符型*****************************************************/VOID itoa(UINT16 val,UINT8 *str)  {     str[0] = 'C'; str[1] = 'N'; str[2] = 'T'; str[3] = ':'; str[4] = '0'+val/1000;     str[5] = '0'+val%100/10;     str[6] = '0'+val/10%10;     str[7] = '0'+val%10; str[8] = '\0';}/***************************************************** 函数名称: TMR1Init* 输    入: 无* 输    出: 无* 功能描述: 定时器1初始化*****************************************************/VOID TMR1Init(VOID){    PROTECT_REG(/* 使能TMR1时钟源 */    APBCLK |= TMR1_CLKEN;/* 选择TMR1时钟源为外部晶振12MHz */  CLKSEL1 = (CLKSEL1 & (~TM1_CLK)) | TM1_12M; /* 复位TMR1 */IPRSTC2 |= TMR1_RST;IPRSTC2 &= ~TMR1_RST;/* 选择TMR1的工作模式为周期模式*/TCSR1 &= ~TMR_MODE;TCSR1 |= MODE_PERIOD;/* 溢出周期 = (Period of timer clock input) * (8-bit Prescale + 1) * (24-bit TCMP)*//* 溢出周期 = (1/12MHz) * (0 + 1) * (12000*5)=5ms */TCSR1 = TCSR1 & 0xFFFFFF00;// 设置预分频值 [0~255]TCMPR1 = 60000;    // 设置比较值 [0~16777215]/* 使能TMR1中断 */TCSR1 |= TMR_IE;NVIC_ISER |= TMR1_INT;/* 复位TMR1计数器 */TCSR1 |= CRST;/* 使能TMR1 */TCSR1 |= CEN;)}INT32 main(VOID){     UINT8 buf[10]={0}; UINT16 TimeCnt=0;     PROTECT_REG ( PWRCON |= XTL12M_EN;//默认时钟源为外部晶振 while((CLKSTATUS & XTL12M_STB) == 0); //等待12MHz时钟稳定 CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M;//设置外部晶振为系统时钟   )      LS164Init();  //74LS164初始化     LCD1602Init(); //LCD1602初始化     TMR1Init();  //定时器初始化     while(1)   {                if(__g_bTime1SecEvent) //1s事件发生     {    __g_bTime1SecEvent=FALSE;   TimeCnt++;   itoa(TimeCnt,buf);   LCD1602PrintfString(0,LCD1602_LINE1,buf);//LCD1602第1行显示内容    if(__g_bTime1SecCnt==3) //3s事件发生  {   __g_bTime1SecCnt=0;   LCD1602PrintfString(0,LCD1602_LINE2,"I am SmartM-AX.");//LCD1602第2行显示内容         }      }   }}/*****************************************函数名称:TMR1_IRQHandler*输    入:无*输    出:无*功    能:定时器1中断服务函数******************************************/VOID TMR1_IRQHandler(VOID){STATIC UINT8 cnt=0;/* 清除TMR1中断标志位 */TISR1 |= TMR_TIF;    __g_Timer1IRQEvent=TRUE;//中断事件发生if(++cnt>=200)    { cnt=0;            //中断计数器清零         __g_bTime1SecEvent=TRUE;  //1s事件发生标志位 __g_bTime1SecCnt++;   //1s事件计数器     }         }


 

热点排行