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

📄 freqtestpro.lst

📁 80C52参考频率计程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.08   FREQTESTPRO                                                           07/25/2008 09:13:03 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE FREQTESTPRO
OBJECT MODULE PLACED IN freqtestpro.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE freqtestpro.c WARNINGLEVEL(0) OPTIMIZE(SIZE) REGFILE(.\freqteatpro.ORC) BRO
                    -WSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>
   2          #include <stdio.h>
   3          #include <ctype.h>
   4          #include <intrins.h>
   5          
   6          /***************************************************************
   7          * Local Variables
   8          ****************************************************************/
   9          sbit led1Ctl = P3^7;
  10          sbit led2Ctl = P3^6;
  11          sbit led3Ctl = P3^5;
  12          
  13          #define LED_ON   1
  14          #define LED_OFF  0
  15          
  16          #define LED_N1   1
  17          #define LED_N2   2
  18          #define LED_N3   3
  19          
  20          /***************************************************************
  21          * Time Delay Functions
  22          ****************************************************************/
  23          /* delay time is (2*n+1)*Ts(1us)+2Ts */ 
  24          static void udelay(unsigned int i)              
  25          {
  26   1          while(--i);             // 0: delay 3Ts 1: delay 5Ts 2: delay 7Ts
  27   1      }
  28          
  29          #ifdef SYS_NOP
              /* Delay 20Ts */
              static void nop(void) 
              {
                  _nop_();_nop_();_nop_();_nop_();
                        _nop_();_nop_();_nop_();_nop_();
                        _nop_();_nop_();_nop_();_nop_();
                        _nop_();_nop_();_nop_();_nop_();
                        _nop_();_nop_();_nop_();_nop_();
              }
              #endif /* SYS_NOP */
  40          
  41          /***************************************************************
  42          * Led Contorl Function
  43          ****************************************************************/
  44          void Led_Ctl_Api(unsigned int lednum, unsigned int ledctl)
  45          {
  46   1         switch(lednum)
  47   1         {
  48   2             case LED_N1:
  49   2                 if(ledctl == LED_ON)
  50   2                 {
  51   3                     P3 = P3|(1<<7);
  52   3                 }
  53   2                 else
  54   2                 {
C51 COMPILER V8.08   FREQTESTPRO                                                           07/25/2008 09:13:03 PAGE 2   

  55   3                        P3 = P3&(~(1<<7));
  56   3                 }
  57   2              break;
  58   2             case LED_N2:
  59   2                 if(ledctl == LED_ON)
  60   2                 {
  61   3                     P3 = P3|(1<<6);
  62   3                 }
  63   2                 else
  64   2                 {
  65   3                         P3 = P3&(~(1<<6));
  66   3                 }
  67   2              break;
  68   2             case LED_N3:
  69   2                 if(ledctl == LED_ON)
  70   2                 {
  71   3                     P3 = P3|(1<<5);
  72   3                 }
  73   2                 else
  74   2                 {
  75   3                        P3 = P3&(~(1<<5));
  76   3                 }
  77   2              break;
  78   2             default:
  79   2                      printf("LED_Ctl_Api Error:: lednum not in range of 1~3 \n");
  80   2                      break;                                                  
  81   2          }
  82   1          return;
  83   1      }
  84          
  85          /***************************************************************
  86          * Uart Contorl Function
  87          * --------------------------------------------------------------
  88          * 模式1:8位串行数据传送,波特率由计时器1来控制。计时器工作
  89          * 于模式2(自动重新载入模式),此时使用的计数器为TL1,而TH1
  90          * 则用做自动载入及时制计时值的设定。波特率的计算关系如下:
  91          * TH1=256-(2@SMOD*(工作频率))/(384*波特率)
  92          * SCON:  B7   B6   B5   B4   B3   B2   B1   B0
  93          *       SM0  SM1  SM2  REN  TB8  RB8   TI   RI
  94          * --------------------------------------------------------------
  95          * TOMD:  B7   B6   B5   B4   B3   B2   B1   B0
  96          * T1&T0 GATE  C/T  M1   M0  GATE  C/T  M1   M0
  97          * --------------------------------------------------------------
  98          * 串口RS232初始化,传输协议 9600bps 8位 没有校验 1个停止位
  99          * --------------------------------------------------------------
 100          ****************************************************************/
 101          /* Uart 1 Init */
 102          void Uart_Init_Api(void)
 103          {
 104   1          PCON = 0x80;        //SMOD=1
 105   1          //PCO N= 0x00;      //SMOD=0
 106   1          SCON = 0x52;        //Smod1 enable REN=1
 107   1          TMOD = 0x20;        //Timer 1 Tmod2 
 108   1                //TH1 = 0xfd;       //253  SMOD=0 9600
 109   1          TH1 = 0xf4;         //253  SMOD=1 4800
 110   1          TL1 = 0xf4;
 111   1                TCON = TCON|0x40;   //TR1=1 启动定时/计数器1
 112   1                
 113   1                return;
 114   1      }
 115          
 116          /* Uart 1 Rx */
C51 COMPILER V8.08   FREQTESTPRO                                                           07/25/2008 09:13:03 PAGE 3   

 117          unsigned char Uart_Rx_Api(void)
 118          {
 119   1          unsigned char tmpval;
 120   1                
 121   1          if(RI == 1)
 122   1          {
 123   2              tmpval = SBUF&0xff;
 124   2                    udelay(2);
 125   2                    RI = 0;
 126   2          }
 127   1          else
 128   1          {
 129   2              //printf("Uart_Rx_Api Error:: no data be received \n");
 130   2              return(0);
 131   2          }
 132   1          
 133   1          return(tmpval);
 134   1      }
 135          
 136          /* Uart 1 Tx */
 137          void Uart_Tx_Api(unsigned char sendval)
 138          {
 139   1                unsigned int iloop = 0;
 140   1                
 141   1          SBUF = sendval;
 142   1          
 143   1          udelay(2);
 144   1          
 145   1          for(iloop=0; iloop<32; iloop++)
 146   1          {
 147   2              if(TI == 1)
 148   2              {
 149   3                  break;      
 150   3              }
 151   2          }
 152   1                
 153   1          TI = 0;
 154   1                
 155   1          return;
 156   1      }
 157          
 158          /*  Uart 1 Int Process */
 159          unsigned char getdata[32];
 160          unsigned int loopHi = 0;
 161          unsigned int loopLi = 0;
 162          void Uart_Rx_ints(void)     //interrupt 4  using 2
 163          {
 164   1                EA = 0;      // Int Lock
 165   1          
 166   1          if(RI == 0)
 167   1          {
 168   2              return;
 169   2          }
 170   1          getdata[loopHi] = SBUF;
 171   1          loopHi++;
 172   1          loopHi = loopHi%32;
 173   1          RI = 0;
 174   1          
 175   1                EA = 1;      // Int Unlock
 176   1          
 177   1          return;
 178   1      }
C51 COMPILER V8.08   FREQTESTPRO                                                           07/25/2008 09:13:03 PAGE 4   

 179          
 180          #undef UART_CMD
 181          #ifdef UART_CMD
              /***************************************************************
              * Uart Command Parse
              ****************************************************************/
              void Cmd_Parse_Api(unsigned char command)
              {
                  unsigned char temp;
                  
                        if(loopLi == loopHi)
                        {
                            return;
                        }
                        loopLi++;
                  loopLi = loopLi%32;
                        temp = getdata[loopLi];
                        

⌨️ 快捷键说明

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