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

📄 t2timer.lst

📁 51ct2Timer
💻 LST
字号:
C51 COMPILER V7.20   T2TIMER                                                               11/02/2004 17:32:34 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE T2TIMER
OBJECT MODULE PLACED IN t2Timer.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE t2Timer.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //////////////////////////////////////////////////////////////////
   2          //  T2用作计数/定时器或波特率发生器时的编程方法                                 //
   3          //                                                                                      -- xiaoqi                       //
   4          // t2conSet的定义如下,不包括通信波特率发生器方式                               //
   5          // 0x04......   TR2 = 1,开始计时,CP/RL2=0,自动重装                              //
   6          //                              EXEN2 = 0,忽略外部T2EX(P1.1)                                   //
   7          // 0x05......   TR2 = 1,开始计时;CP/RL2=1,不自动重装                    //
   8          //                              EXEN2 = 0,忽略外部T2EX(P1.1)                                   //
   9          // 0x07......   TR2 = 1,开始计数;CP/RL2=1,不自动重装                    //
  10          //                              EXEN2 = 0,忽略外部T2EX(P1.1)                                   //
  11          //                              C/T2 = 1,使用外部时钟线T2                                               //
  12          // 0x0F......   TR2 = 1,开始计数;CP/RL2=1,不自动重装                    //
  13          //                              C/T2 = 1,使用外部时钟线T2                                               //
  14          //                              EXEN2 = 1,EXF2受控于捕获允许EXEN2的状态,EXEN2 //
  15          //                              置1时一个外部T2EX的负脉冲将引发T2中断,同时用当 //
  16          //                              前计数寄存器中的数值去刷新备用寄存器,备用寄存器//
  17          //                              原设定值被更新,捕获模式                                                 //
  18          //--------------------------------------------------------------//
  19          // 用作波特率发生器                                                                                             //
  20          // 0x35......   TR2 = 1,开始计数;CP/RL2=1,不自动重装,但被CRLK和//
  21          //                              CTLK/CRLK的设立而忽略                                                   //
  22          //                              C/T2 = 0,使用内部时钟                                                   //
  23          //                              EXEN2 = 0,忽略外部T2EX(P1.1)                                   //
  24          //                              EXF2受控于EXEN2的状态,置1时一个外部T2EX的负脉冲//
  25          //                              将引发T2中断。不刷新备用寄存器                                  //
  26          //                              CTLK = 1,引用为发送时钟源(波特率发生器)               //
  27          //                              CRLK = 1,引用为接收时钟源,强制自动重装初值。   //
  28          //                              当计数器溢出时并不设立标志TF2,所以不引发中断    //
  29          //                              如果设定了允许CT2中断视作无效                                   //
  30          //--------------------------------------------------------------//
  31          // 附加说明:                                                                                                   //
  32          // 定时器的使用时可以随时切换的,在不通信的时候可以换回来又用作 //
  33          // 定时器或计数器,定时或计数器之间也可以来回切换,发挥最大效益 //
  34          //////////////////////////////////////////////////////////////////
  35          #include <reg52.h>
  36          
  37          // 定义定时计数器的工作模式
  38          #define t2conSet        0x04
  39          #define Bodrate 0xFFDC          // FFDC相对于11.0592M晶振下9600波特率,
  40                                                                  // 通信实际9600
  41          
  42          unsigned char timerForDelay;
  43          
  44          void init();
  45          void uart_init(void);
  46          
  47          void main()
  48          {
  49   1              init();
  50   1              timerForDelay = 10;
  51   1              while(timerForDelay);                           // 延时等待观察效果
  52   1      
  53   1              uart_init();                                            // 该做波特率发生器定时中断暂停
  54   1              SBUF = 0xaa;                                            // 发送一字节
  55   1              while(!TI);
C51 COMPILER V7.20   T2TIMER                                                               11/02/2004 17:32:34 PAGE 2   

  56   1              TI = 0;
  57   1      
  58   1              while(1);
  59   1      }
  60          
  61          //////////////////////////////////////////////////////////////////
  62          // 初始化开启定时器2                                                                                    //
  63          //////////////////////////////////////////////////////////////////
  64          void init()
  65          {
  66   1              RCAP2H  = 0xff;
  67   1              RCAP2L  = 0xE0;
  68   1              TH2     = 0xff;                                 // 定时器初值
  69   1              TL2     = 0xE0; 
  70   1              ES      = 0;                                    // 关闭通信中断
  71   1              ET2 = 1;                                        // 允许T2中断
  72   1              T2CON   = t2conSet;
  73   1              EA      = 1;
  74   1      //      DCEN = 1;                                       // at89s52才有的计数方向选择
  75   1      }
  76          
  77          //////////////////////////////////////////////////////////////////
  78          // 定时器CT2中断服务程序                                                                                //
  79          //////////////////////////////////////////////////////////////////
  80          void timer2Int(void) interrupt 5
  81          {
  82   1              TF2 = 0;                                                        // 溢出标志必须由软件清零
  83   1              EXF2 = 0;                                                       // 捕获标志必须由软件清零
  84   1              if(timerForDelay)timerForDelay--;
  85   1      }
  86          
  87          //////////////////////////////////////////////////////////////////
  88          // 定时器CT2用于串行通信波特率发生器                                                    //
  89          // 定义为波特率发生器以后,ET2自动失效                                                  //
  90          //////////////////////////////////////////////////////////////////
  91          
  92          void uart_init(void) 
  93          {
  94   1              T2CON   = 0x35;                                 // 0b0011 0101 16位串行波特率
  95   1                                                                              // 发生器,自动重装
  96   1              TH2             = (unsigned char )(Bodrate>>8) ;
  97   1              TL2             = (unsigned char )(Bodrate & 0xff);
  98   1              RCAP2H  = (unsigned char )(Bodrate>>8) ;
  99   1              RCAP2L  = (unsigned char )(Bodrate & 0xff);
 100   1              TR2             = 1;                                    // 启动时钟
 101   1              SCON    = 0x7A;                                 // 0b0111 1010 第一种工作方式
 102   1                                                                              // 8位单机通信
 103   1              ES      = 1;                                            // 允许通信中断
 104   1              EA = 1;                                                 // 中断打开
 105   1      }
 106          
 107          //////////////////////////////////////////////////////////////////
 108          // 串口中断服务程序                                                                                             //
 109          //////////////////////////////////////////////////////////////////
 110          void receive() interrupt 4 
 111          {    
 112   1              if(RI)                                                          //判断接收中断状态
 113   1              {
 114   2                      timerForDelay = SBUF;
 115   2                      RI = 0;
 116   2              }
 117   1      }
C51 COMPILER V7.20   T2TIMER                                                               11/02/2004 17:32:34 PAGE 3   



MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =     94    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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