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

📄 wfrequence.lst

📁 C8051F系列单片机外围电路功能模块程序
💻 LST
字号:
C51 COMPILER V7.05   WFREQUENCE                                                            02/14/2006 09:27:39 PAGE 1   


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

stmt level    source

   1          //参考程序A:WFREQUENCE.C 程序运行前将S3的第2和第4拨码开关拨到ON,用跳线将T0和P0.0短接,拨码开关S1打开任一方
             -波信号通道(2000KHZ,1000KHZ,500KHZ,250KHZ);T0作为外部计数器,T1作为定时器,T1定时在1ms范围内察看计数器T0所计的数。计算出
             -被测信号的频率并显示在LCD上.                  
   2          #include <c8051f020.h>                 // SFR declarations
   3          #include <intrins.h>
   4          unsigned long x;
   5          unsigned char *lcdpoint;         /*指向 lcddata数组的指针*/
   6          unsigned char lcd_data_count;    /*要显示的数据个数 */
   7          unsigned char temp,data1;
   8          unsigned char HMS[9]={"FREQUECE:"},YMD[10]={0x0,0x00,0X0,0X0,"Khz"};    
   9          #define SYSCLK       11059200          /*外部晶振频率*/
  10          sbit    P31 = P3^1;
  11          void SYSCLK_Init (void);            //系统时钟初始化
  12          void PORT_Init (void);              //端口初始化
  13          void Time01_Init(void);             //定时器0/1初始化
  14          void LCD_Init(void);
  15          unsigned int Frequence;             //外部脉冲数变量
  16          unsigned int   FF1,FF2,FF3,FF4,FF;      
  17          /*延时子程序*/
  18          void sleep_ms(unsigned int count)
  19          {
  20   1        unsigned char ii,jj;
  21   1        for(ii=0;ii<count;ii++)
  22   1          {
  23   2            for(jj=0;jj<250;jj++)
  24   2                _nop_();                      
  25   2          }   
  26   1      }
  27          void main (void) {
  28   1         WDTCN = 0xde;            /*无效看门狗*/
  29   1         WDTCN = 0xad;
  30   1         LCD_Init();
  31   1         SYSCLK_Init ();          /*初始化时钟*/
  32   1         PORT_Init ();            /*初始化交叉开关和IO口*/
  33   1         Time01_Init();                       /*初始化定时器0/1*/
  34   1         while (1) {
  35   2              P31=0;
  36   2              sleep_ms(250);
  37   2              EA=1;                                   // 开总中断
  38   2              TR1=1;                                  // 开定时器1
  39   2              TR0=1;                                  // 开定时器0
  40   2                 P6  = 0x0d;     
  41   2                 for(x=0;x<1000;x++);   //延时
  42   2                  lcdpoint=&HMS;
  43   2      for(lcd_data_count=9;lcd_data_count>0;lcd_data_count--)//显示"FREQUENCE:"
  44   2                  { 
  45   3                          data1=*lcdpoint;
  46   3                      P7 = data1;             /*送字符数据*/
  47   3                              P6 = 0x0c;
  48   3                      P6 = 0x0d;
  49   3                      lcdpoint++;
  50   3                              for(x=0;x<100;x++);
  51   3                      }                        //准备送数据
  52   2                  //for(x=0;x<5000;x++);
  53   2                  lcdpoint=&YMD;
C51 COMPILER V7.05   WFREQUENCE                                                            02/14/2006 09:27:39 PAGE 2   

  54   2      for(lcd_data_count=7;lcd_data_count>0;lcd_data_count--) //显示"XXXXKhz"
  55   2                  { 
  56   3                          data1=*lcdpoint;
  57   3                              if(data1<0x40)
  58   3                              data1 += 0x30;          /*转化成字符码*/
  59   3                          P7 = data1;                 /*送字符数据*/
  60   3                              P6 = 0x0c;
  61   3                      P6 = 0x0d;
  62   3                      lcdpoint++;
  63   3                              for(x=0;x<100;x++);
  64   3                      }
  65   2          }
  66   1      }
  67          void SYSCLK_Init (void)
  68          {
  69   1         int i;                              /*延时计数器*/
  70   1         OSCXCN = 0x67;                      /*启动外部11.0592MHz晶振*/
  71   1         for (i=0; i < 255; i++) ;           /*等待外部晶体起振*/
  72   1         while ((OSCXCN & 0x80)==0x00) ;     /*查询标志位*/
  73   1         OSCICN = 0x08;  /*选择外部晶体作为系统时钟并使能时钟丢失检测*/                                         
             -     
  74   1      }
  75          void PORT_Init (void)
  76          {
  77   1         XBR0    = 0x00;
  78   1         XBR1    = 0x02;                                              /*交叉开关使能T0*/
  79   1         XBR2    = 0x40;                      /*使能交叉开关和弱上拉*/
  80   1         P74OUT  = 0xf0;                              /*P6,P7为推挽输出*/
  81   1      }
  82          void Time01_Init(void)
  83          {
  84   1      EA=0;                   //关总中断
  85   1      TR0=0;                  //关定时器0
  86   1      TR1=0;                  //关定时器1
  87   1      IE=0x0A;                /*允许TF1/TF0标志位(TCON.7/TCON.5)的中断请求*/
  88   1                                          /*定时器1/0发生溢出*/
  89   1      TMOD=0x15; /*定时器1是16位定时器方式,定时器0是16为计数器(T0脚)方式*/
  90   1      IP=0x08;                /*定时器1是高优先级中断*/
  91   1      CKCON=0x10;             /*定时器1的时基是系统时钟*/
  92   1      TH1=(-SYSCLK/1000)>>8;  /*定时1ms,定时器1使用系统时钟*/
  93   1      TL1=-SYSCLK/1000;
  94   1      }
  95          void TIMER1_ISR (void) interrupt 3 using 1
  96          {        P31=1;          /*关闭被测信号源*/
  97   1                      TF1=0;                   /*清中断标志*/
  98   1                      TR1=0;                   /*关定时器1*/
  99   1                      Frequence=TH0*0x100+TL0;/*外部脉冲数 单位 KHz*/
 100   1                      TR0=0;  
 101   1                      FF4=Frequence/1000;     /*将频率数据转化单字节并存入数组中*/
 102   1                      YMD[0]=FF4;
 103   1                      FF=(Frequence-FF4*1000);
 104   1                      FF3=FF/100;
 105   1                      YMD[1]=FF3;
 106   1                      FF=(FF-FF3*100);
 107   1                      FF2=FF/10;
 108   1                      YMD[2]=FF2;
 109   1                      FF=(FF-FF2*10);
 110   1                      FF1=FF;
 111   1                      YMD[3]=FF1;
 112   1                      TH0=0;  /*清定时器0到零*/
 113   1                      TL0=0;
 114   1                      TH1=(-SYSCLK/1000)>>8;                  TL1=-SYSCLK/1000;
C51 COMPILER V7.05   WFREQUENCE                                                            02/14/2006 09:27:39 PAGE 3   

 115   1                      TR1=1;                                                  /*开定时器1*/
 116   1                      TR0=1;                                                  /*开定时器0*/
 117   1              P31=0;                          /*打开被测信号源*/
 118   1      }
 119          void LCD_Init(void)
 120          {
 121   1         P6 = 0x09;
 122   1         for(x=0;x<50000;x++);
 123   1        P7 = 0x30;                            /*一行显示*/
 124   1        // P7 = 0x38;                         /*两行显示*/
 125   1         P6 = 0x08;
 126   1         P6 = 0x09; 
 127   1         for(x=0;x<1000;x++);
 128   1         P7 = 0x0e;                           /*显示开,光标显示,光标不闪烁*/
 129   1         P6 = 0x08;
 130   1         P6 = 0x09;
 131   1         for(x=0;x<1000;x++);
 132   1         P7= 0x06;                            /*显示增加,不平移*/
 133   1         P6 = 0x08;
 134   1         P6 = 0x09;
 135   1         for(x=0;x<5000;x++);
 136   1         P7 = 0x01;                           /*清屏*/
 137   1         P6 = 0x08;
 138   1         P6 = 0x09; 
 139   1         for(x=0;x<5000;x++);
 140   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    863    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     41    ----
   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 + -