⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.lst

📁 51单片机C语言常用模块与综合系统设计实例精讲
💻 LST
字号:
C51 COMPILER V7.06   TIMER                                                                 10/13/2006 09:21:10 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE TIMER
OBJECT MODULE PLACED IN timer.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE timer.c LARGE BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <./Atmel/at89x52.h>
   2          #include <stdio.h>
   3          #include <absacc.h>
   4          #include <intrins.h>
   5          #include "source.h"
   6          void start_t2imer(void)//初始化定时器2,每10毫秒中断一次
   7          {
   8   1        T2CON=0X00;
   9   1              RCAP2L=TIMER2L; //10ms
  10   1              TL2=TIMER2L;
  11   1              RCAP2H=TIMER2H;
  12   1              TH2=TIMER2H;
  13   1              ET2=1;//enable timer2 interrupt
  14   1              TR2=1;//start timer
  15   1      }
  16          void stop_t2imer(void)//停止定时器2
  17          {
  18   1              ET2=0; //disable timer2 interrupt
  19   1              TR2=0; //stop timer2 counter;
  20   1      }
  21          void reset_timer(unsigned char i)//停止软定时器i
  22          {
  23   1              extern  struct my_timer TT[TIMER_NUM];
  24   1              TT[i].enable=0;
  25   1              TT[i].count=0;
  26   1      }
  27          void set_timer(unsigned char i,unsigned int count) //设置软定时器i的超时时间为count*10毫秒 
  28          {
  29   1              TT[i].count=count;
  30   1              TT[i].enable=1;
  31   1      }
  32          bit detect_timeout(void){//检测定时器是否超时间
  33   1              unsigned char temp;
  34   1              bit ret;
  35   1              ret=0;
  36   1              if(timerout&TIMOUT_MOVE_ARROW){//箭头移动定时器超时,箭头可以移动一个步进
  37   2                      timerout &=~TIMOUT_MOVE_ARROW;
  38   2                      send_status_msg(MSG_STATUS_MOVE);
  39   2              }
  40   1              if(timerout&TIMOUT_ADV_CHANGE){//信息转换定时器超时,发送一个信息转换消息
  41   2                      timerout &=~TIMOUT_ADV_CHANGE;
  42   2                      send_hbs_msg(MSG_HBS_INFO_CHANGE);
  43   2              }
  44   1              if(timerout&TIMOUT_RTC){//1秒的实时时钟换定时器超时
  45   2                      timerout &=~TIMOUT_RTC;
  46   2                      rtc_update();//更新读出的RTC时间
  47   2                      show_time();//在屏幕上显示时间。
  48   2              }
  49   1              if(timerout&TIMOUT_TEMPERATURE){//温度转化定时器超时
  50   2                      timerout &=~TIMOUT_TEMPERATURE;
  51   2                      switch(others.tem_fsm){
  52   3                              case 0x00://等待300毫秒后开始温度转化
  53   3                                      others.tem_fsm=0X01;
  54   3                                      set_timer(TMPERA_TIMER,30);//power on 300 ms.
  55   3                                      break;
C51 COMPILER V7.06   TIMER                                                                 10/13/2006 09:21:10 PAGE 2   

  56   3                              case 0x01://开始温度转换
  57   3                                      others.tem_fsm=0X02;
  58   3                                      tmstart();//温度转换开始
  59   3                                      set_timer(TMPERA_TIMER,150);//必须到1.5秒后才能读到温度值
  60   3                                      break;
  61   3                              case 0x02://温度传感器温度转换完毕,可以读取温度值了。
  62   3                                      others.tem_fsm=0X00;
  63   3                                      temp=tmrtemp_all();//temp为返回的温度值,其值为最高位为‘1’表明位负的温度,为‘0’表明为正的温度,其

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -