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

📄 timer0.lst

📁 复件 F020集成以太网接口核心模块定时器例程源代码
💻 LST
字号:
C51 COMPILER V7.05   TIMER0                                                                08/18/2007 19:56:59 PAGE 1   


C51 COMPILER V7.05, COMPILATION OF MODULE TIMER0
OBJECT MODULE PLACED IN timer0.OBJ
COMPILER INVOKED BY: C:\SiLabs\MCU\IDEfiles\C51\BIN\C51.exe timer0.c DB OE

stmt level    source

*** WARNING C500 IN LINE 1 OF TIMER0.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
   1          
   2          //----------------------------------------------------------------
   3          // C8051F020实验核心模块测试程序
   4          // 定时器0及IO口输出实验
   5          // 
   6          // 实现功能:在定时器0的驱动下,实现:
   7          // 1.底板上发光二极管LED2以1秒为单位闪烁
   8          //
   9          // 实验条件:
  10          // 1.底板上拨码开关JP1的4位设置为ON状态
  11          //
  12          // 说明:
  13          // 本模块中配套的测试程序都是以消息驱动的.
  14          //---------------------------------------------------------------
  15          // 修改记录
  16          // 版本      时间         人员          内容
  17          // 1.0       2007/4/30    scj          建立文件,实现基本功能
  18          //
  19          //
  20          //---------------------------------------------------------------
  21          
  22          #include "F020.h"
  23          
  24          
  25          //--------------------------------------------
  26          // 数据类型定义
  27          //--------------------------------------------
  28          
  29          // 基本数据类型
  30          typedef unsigned char BYTE;       // 8位无符号数
  31          typedef unsigned int  WORD;       // 16位无符号数
  32          typedef unsigned long DWORD;      // 32位无符号数
  33          
  34          // 结构体
  35          typedef struct
  36          {
  37                  BYTE base;          // DIDA次数
  38                  BYTE second;        // 秒
  39                  BYTE minute;        // 分
  40                  
  41          }S_TIME;
  42          
  43          
  44          //--------------------------------------------
  45          // 引脚定义
  46          //--------------------------------------------
  47          #define P_LED2  P31
  48          
  49          //--------------------------------------------
  50          // 宏定义
  51          //--------------------------------------------
  52          
  53          // 系统消息定义
  54          #define SECD_SIGNAL 0x01
C51 COMPILER V7.05   TIMER0                                                                08/18/2007 19:56:59 PAGE 2   

  55          #define MINU_SIGNAL 0x02
  56          
  57          // 常量定义
  58          
  59          //定时器0定时,使用SYSCLK/12作为时钟源
  60          //定时计算方法,TH0:TL0= 65536-t*SYSCLK/12
  61          // 定时25ms,TH0:TL0=0x4C 00
  62          #define TMR0H 0x4C
  63          #define TMR0L 0x00
  64          
  65          // 每个节拍为25ms
  66          #define TICKS_PER_SEC 40
  67          //--------------------------------------------
  68          // 全局变量定义
  69          // 全局变量以g_开头
  70          // 位变量:              g_b
  71          // 无符号字节变量:      g_c
  72          // 无符号双字节变量:   g_w
  73          // 无符号4字节变量:    g_dw
  74          // 有符号数在类型前加s,比如char型位g_sc
  75          // 结构体为g_s后为大写
  76          //--------------------------------------------
  77          data BYTE   g_cMainSignal;           // 主消息变量
  78          
  79          data S_TIME g_sTime;                 // 主时钟
  80          //-----------------------------------------------
  81          // 初始化函数
  82          //
  83          //-----------------------------------------------
  84          void Timer_Init()
  85          {
  86   1              
  87   1              //.......................................
  88   1              // 设置定时器的时钟信号
  89   1              // - T4M T2M T1M T0M  -  -  -
  90   1          // 0  1   1   1   0   0  0  0
  91   1              // 1:使用SYSCLK;0:使用SYSCLK/12
  92   1              // 定时器1,2,4均使用SYSCLK
  93   1              // 定时器0使用SYSCLK/12
  94   1              //.......................................
  95   1              CKCON = 0x70;
  96   1              
  97   1              
  98   1              //......................................
  99   1              // 定时0工作在16位定时器模式
 100   1              // 定时器1工作在8位重载模式
 101   1              //......................................
 102   1      
 103   1              TMOD = 0x21;                                            
 104   1                                              
 105   1              //....................................
 106   1              // T0作为系统节拍时钟
 107   1              // 定时计算方法= 65536-t*SYSCLK/12
 108   1              //.....................................
 109   1              TH0 = TMR0H;            
 110   1              TL0 = TMR0L;            
 111   1              
 112   1                      
 113   1              TCON = 0x00;    
 114   1                                              
 115   1              
 116   1              T2CON  = 0x00;  // Timer 2 Control Register
C51 COMPILER V7.05   TIMER0                                                                08/18/2007 19:56:59 PAGE 3   

 117   1                      
 118   1              TMR3CN  = 0x00; // Timer 3 Control Register
 119   1      
 120   1          
 121   1          T4CON  = 0x30;  // Timer 4 Control Register
 122   1          
 123   1          // 定时器0启动
 124   1          TR0  = 1;
 125   1      
 126   1      
 127   1      
 128   1      }
 129          
 130          void Port_IO_Init()
 131          {
 132   1          // P0.0  -  TX0 (UART0), Open-Drain, Digital
 133   1          // P0.1  -  RX0 (UART0), Open-Drain, Digital
 134   1          // P0.2  -  SCK  (SPI0), Open-Drain, Digital
 135   1          // P0.3  -  MISO (SPI0), Open-Drain, Digital
 136   1          // P0.4  -  MOSI (SPI0), Open-Drain, Digital
 137   1          // P0.5  -  NSS  (SPI0), Open-Drain, Digital
 138   1          // P0.6  -  SDA (SMBus), Open-Drain, Digital
 139   1          // P0.7  -  SCL (SMBus), Open-Drain, Digital
 140   1      
 141   1          // P1.0  -  TX1 (UART1), Open-Drain, Digital
 142   1          // P1.1  -  RX1 (UART1), Open-Drain, Digital
 143   1          // P1.2  -  Unassigned,  Open-Drain, Digital
 144   1          // P1.3  -  Unassigned,  Open-Drain, Digital
 145   1          // P1.4  -  Unassigned,  Open-Drain, Digital
 146   1          // P1.5  -  Unassigned,  Open-Drain, Digital
 147   1          // P1.6  -  Unassigned,  Open-Drain, Digital
 148   1          // P1.7  -  Unassigned,  Open-Drain, Digital
 149   1      
 150   1          // P2.0  -  Unassigned,  Open-Drain, Digital
 151   1          // P2.1  -  Unassigned,  Open-Drain, Digital
 152   1          // P2.2  -  Unassigned,  Open-Drain, Digital
 153   1          // P2.3  -  Unassigned,  Open-Drain, Digital
 154   1          // P2.4  -  Unassigned,  Open-Drain, Digital
 155   1          // P2.5  -  Unassigned,  Open-Drain, Digital
 156   1          // P2.6  -  Unassigned,  Open-Drain, Digital
 157   1          // P2.7  -  Unassigned,  Open-Drain, Digital
 158   1      
 159   1          // P3.0  -  Unassigned,  Open-Drain, Digital
 160   1          // P3.1  -  Unassigned,  Open-Drain, Digital
 161   1          // P3.2  -  Unassigned,  Open-Drain, Digital
 162   1          // P3.3  -  Unassigned,  Open-Drain, Digital
 163   1          // P3.4  -  Unassigned,  Open-Drain, Digital
 164   1          // P3.5  -  Unassigned,  Open-Drain, Digital
 165   1          // P3.6  -  Unassigned,  Open-Drain, Digital
 166   1          // P3.7  -  Unassigned,  Open-Drain, Digital
 167   1      
 168   1          XBR0      = 0x07;
 169   1          XBR2      = 0x44;
 170   1      
 171   1      
 172   1              // 设置端口输出方式
 173   1              // 设置端口P31为输出,驱动LED
 174   1              P3MDOUT   = 0x02;
 175   1      }
 176          
 177          void Oscillator_Init()
 178          {
C51 COMPILER V7.05   TIMER0                                                                08/18/2007 19:56:59 PAGE 4   

 179   1          int i = 0;
 180   1          OSCXCN    = 0x67;
 181   1          for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
 182   1          while ((OSCXCN & 0x80) == 0);
 183   1          OSCICN    = 0x08;
 184   1      }
 185          
 186          void Interrupts_Init()
 187          {
 188   1              //..................................
 189   1              // 初始化中断
 190   1              // EA IEGF0 ET2 ES0 ET1 EX1 ET0 EX0
 191   1          //..................................
 192   1          IE  = 0;
 193   1      
 194   1              ET0 = 1;        // 打开定时器0中断
 195   1      
 196   1      }
 197          
 198          //-------------------------------
 199          // 功能:    初始化单片机内部资源
 200          // 输入参数:无
 201          // 输出参数:无
 202          //-------------------------------
 203          void Init_Device(void)
 204          {
 205   1          Timer_Init();
 206   1      
 207   1          Port_IO_Init();
 208   1      
 209   1          Oscillator_Init();
 210   1      
 211   1          Interrupts_Init();
 212   1      }
 213          
 214          //------------------------------------------------
 215          // 函数名称:InitVariable()
 216          // 函数功能:初始化系统全局变量
 217          //------------------------------------------------
 218          void InitVariable()
 219          {
 220   1              g_cMainSignal = 0;
 221   1      
 222   1              g_sTime.base  = 0;
 223   1              g_sTime.second= 0;
 224   1              g_sTime.minute= 0;
 225   1      
 226   1      }
 227          
 228          //-------------------------------------------------------------
 229          // 函数名称:定时器0中断入口函数,完成计时功能,定时时间为25ms
 230          // 输入参数: 无
 231          // 输出参数: 无
 232          //-------------------------------------------------------------
 233          
 234          void timer0() interrupt 1
 235          {
 236   1              TH0=TMR0H;
 237   1              TL0=TMR0L;
 238   1      
 239   1              // 程序时基信号
 240   1              if(++g_sTime.base>=TICKS_PER_SEC)
C51 COMPILER V7.05   TIMER0                                                                08/18/2007 19:56:59 PAGE 5   

 241   1              {// 1s到
 242   2                      g_sTime.base = 0;
 243   2      
 244   2                      g_cMainSignal|=SECD_SIGNAL;      // 产生秒信号
 245   2      
 246   2                      if(++g_sTime.second>59)
 247   2                      {// 1分钟到
 248   3                              g_sTime.second = 0;
 249   3      
 250   3                              g_cMainSignal|=MINU_SIGNAL;  // 产生分信号
 251   3      
 252   3                              if(++g_sTime.minute>59) g_sTime.minute=0;
 253   3                      }
 254   2              }
 255   1      
 256   1      }
 257          
 258          //------------------------------------------------------------------
 259          // 主函数开始
 260          //-------------------------------------------------------------------
 261          void main()
 262          {
 263   1              Init_Device();        // 初始化系统
 264   1              InitVariable();       // 初始化变量
 265   1              
 266   1              EA=0;                             // 禁止看门狗
 267   1              WDTCN = 0xDE;         // 实验中不使用看门狗
 268   1              WDTCN = 0xAD;   
 269   1      
 270   1              EA = 1;               // 启动系统调度
 271   1      
 272   1      
 273   1              P_LED2 = 1;           // 
 274   1      
 275   1      
 276   1              while(1)
 277   1              {
 278   2                      if(g_cMainSignal&SECD_SIGNAL)
 279   2                      {
 280   3                              g_cMainSignal&=~SECD_SIGNAL;
 281   3      
 282   3                              P_LED2 = !P_LED2;
 283   3      
 284   3                      }
 285   2      
 286   2                      if(g_cMainSignal&MINU_SIGNAL)
 287   2                      {
 288   3                              g_cMainSignal&=~MINU_SIGNAL;
 289   3      
 290   3                      }
 291   2      
 292   2      
 293   2              }
 294   1      
 295   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    183    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V7.05   TIMER0                                                                08/18/2007 19:56:59 PAGE 6   

   DATA SIZE        =      4    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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