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

📄 wpcacapture.lst

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


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

stmt level    source

   1          //参考程序B:WPCACAPTURE.C  用PCA模块0负边沿触发的捕捉方式测量方波的频
   2          //率.测量固定频率方波的100个周期的时间宽度,再求平均,可得方波的频率和
   3          //周期.测量结果用LCD显示. 打开VIEW/DEBUG WINDOW/SFR'S/PCA窗口,
   4          // 可直接从PCA0CPH0和PCA0CPL0中看到十六进制表达的测量结果.
   5          
   6          #include <c8051f020.h>                    // SFR declarations
   7          #include <intrins.h>
   8          #define uchar unsigned char
   9          #define uint  unsigned int
  10          sbit  BELL=P3^5;
  11          unsigned char *lcdpoint;         /*指向 lcddata数组的指针*/
  12          void SYSCLK_Init (void);         /*时钟初始化*/
  13          void LCD_Init(void);             /*LCD初始化*/
  14          void LCD_disp_line1(void);       /*显示第一行数据*/
  15          void LCD_disp_line2(void);       /*显示第二行数据*/
  16          void  handle(void);   /*处理数据*/
  17          void delay(uchar time);//延时
  18          void PORT_Init (void); //I/O口初始化
  19          void PCA_Init (void);  //PCA初始化
  20          void PCA_ISR (void);   //PCA中断服务子程序
  21          float freq,data0;
  22          unsigned int i,j,data2;
  23          unsigned char FRE[8]={" FREQ:  "},KHZ[10]={0x0,0x00,0x0,0x0,"Khz"};
  24          signed char T[8]={" TIME:  "},TIME0[10]={0x0,0x00,0x0,0x0,0x0,"us"};    
  25          unsigned char aa,bb,cc,ee;
  26          void main (void) {
  27   1         BELL=1;
  28   1         /*关看门狗*/
  29   1         WDTCN = 0xde;
  30   1         WDTCN = 0xad;
  31   1         LCD_Init();             /*LCD初始化*/  
  32   1         SYSCLK_Init ();         /*时钟初始化*/
  33   1         PORT_Init ();                        /*IO口初始化*/
  34   1         BELL = 0;              /*响蜂鸣器*/   
  35   1         delay(100);            /* 延时*/
  36   1         BELL  =1;               /*关闭蜂鸣器*/   
  37   1      while (1) {    
  38   2         j=0; 
  39   2         EA = 1;                          /*开中断*/
  40   2         PCA_Init ();             /*PCA初始化*/   
  41   2         while (j<0x64) ;       /*PCA发生中断100次 到否?;*/
  42   2         PCA0CN=0x0;                /*禁止PCA定时器/计数器*/
  43   2         EIE1 = 0x0;                /*禁止PCA0中断*/
  44   2          handle();              /*处理数据*/
  45   2         LCD_disp_line1();
  46   2          LCD_disp_line2();
  47   2               delay(65000);            /* 延时*/
  48   2                delay(65000);            /* 延时*/
  49   2                 delay(65000);            /* 延时*/
  50   2                  delay(65000);            /* 延时*/
  51   2                       delay(65000);            /* 延时*/
  52   2                        delay(65000);            /* 延时*/
  53   2                         delay(65000);            /* 延时*/
  54   2          }
  55   1      }
C51 COMPILER V7.05   WPCACAPTURE                                                           02/14/2006 10:38:24 PAGE 2   

  56          void  handle(void)/*处理数据*/
  57          {
  58   1      data0=(PCA0CPH0*256+PCA0CPL0);/*处理来自PCA0CPH0,CA0CPL0的数据*/
  59   1      data0=(PCA0CPH0*256+PCA0CPL0)/11.0592;
  60   1         freq=(100000)/data0;        /*计算被测波形的频率*/
  61   1         aa=data0/1000;  //计算周期(TIME)
  62   1         bb=(data0-aa*1000)/100;
  63   1         cc=(data0-aa*1000-bb*100)/10;
  64   1         ee=(data0-aa*1000-bb*100-cc*10);
  65   1         TIME0[0]=aa;   //存放万位数
  66   1         TIME0[1]=bb;   //存放千位数
  67   1         TIME0[2]=0x2e;  //"."
  68   1         TIME0[3]=cc;   //存放百位数
  69   1         TIME0[4]=ee;   //存放十位数
  70   1         aa=freq/1000;  //计算频率(FREQ)
  71   1         bb=(freq-aa*1000)/100;
  72   1         cc=(freq-aa*1000-bb*100)/10;
  73   1         ee=(freq-aa*1000-bb*100-cc*10);
  74   1         KHZ[0]=aa;    //存放千位数
  75   1         KHZ[1]=bb;    //存放百位数
  76   1         KHZ[2]=cc;    //存放十位数
  77   1         KHZ[3]=ee;    //存放个位数
  78   1         }
  79          void PORT_Init (void)    //I/O口初始化
  80          {
  81   1         XBR0 = 0x08;                 //CEX0-->P0.0
  82   1         XBR2    = 0x40;      // Enable crossbar and weak pull-ups
  83   1         P74OUT  = 0xf0;          /*P6,P7为推挽输出*/
  84   1      }
  85          void PCA_Init (void)   //PCA初始化
  86          {
  87   1              EIE1 = 0x08;            /*使能PCA0中断*/         
  88   1              PCA0MD = 0x09;      /*PCA定时器时钟源SYSCLK选择:01(1/12),03(1/4),09(1)*/
  89   1              PCA0L    = 0x00;
  90   1              PCA0H    = 0x00;
  91   1      PCA0CPM0 = 0x11;/*PCA0负边沿捕捉方式,CCF0=1,允许辅捉/比较标志的中断申请*/
  92   1              PCA0CPL0 = 0x00;
  93   1              PCA0CPH0 = 0x00;
  94   1          PCA0CN=0x40;                /*允许PCA定时器/计数器*/
  95   1      }
  96          /*PCA中断服务子程序*/
  97          void PCA_ISR (void) interrupt 9
  98          {
  99   1              j++;                            /*计中断次数*/
 100   1              CCF0 = 0;                       /*清匹配中断标志*/
 101   1      }
 102          void delay(uint time)    //延时
 103          {
*** WARNING C235 IN LINE 103 OF WPCACAPTURE.C: parameter 1: different types
 104   1              uint k,h;
 105   1              for(h=0;h<time;h++)
 106   1              for(k=0;k<0x900;k++);
 107   1      }
 108          void LCD_disp_line1(void)
 109           {      uint x;
 110   1       unsigned data1,count;
 111   1                  P7=0x80;   // 显示第一行,DDRAM地址为00
 112   1                          P6 = 0x1;
 113   1                      P6 = 0x0;     
 114   1                 for(x=0;x<1000;x++);
 115   1                  lcdpoint=&T;
 116   1                  for(count=8;count>0;count--)     //显示文字"TIME :"
C51 COMPILER V7.05   WPCACAPTURE                                                           02/14/2006 10:38:24 PAGE 3   

 117   1                  {  
 118   2                          data1=*lcdpoint;
 119   2                      P7 = data1;             /*送字符数据*/
 120   2                              P6 = 0x04;
 121   2                      P6 = 0x05;
 122   2                      lcdpoint++;
 123   2                              for(x=0;x<1000;x++);
 124   2                      }                        //准备送数据
 125   1                  lcdpoint=&TIME0;
 126   1      for(count=7;count>0;count--) //显示数字"XXXXXns"
 127   1               {                  
 128   2                  data1=*lcdpoint;
 129   2                              if(data1<0x40)
 130   2                  if(data1 !=0x2e)
 131   2                              data1 += 0x30;          /*转化成ASCII码*/
 132   2                          P7 = data1;                 /*送字符数据*/
 133   2                              P6 = 0x04;
 134   2                      P6 = 0x05;
 135   2                      lcdpoint++;
 136   2                              for(x=0;x<100;x++);
 137   2                      }
 138   1          }
 139           void LCD_disp_line2(void)// 显示第二行
 140           {      uint x;
 141   1       unsigned data1,count;
 142   1                  P7=0xc0;       // 显示第二行,DDRAM地址为40H
 143   1                          P6 = 0x1;
 144   1                      P6 = 0x0;    
 145   1                 for(x=0;x<1000;x++);
 146   1                  lcdpoint=&FRE;     //显示文字"FREQUENCE :"
 147   1                  for(count=8;count>0;count--)    
 148   1                  { 
 149   2                          data1=*lcdpoint;
 150   2                      P7 = data1;             /*送字符数据*/
 151   2                              P6 = 0x04;
 152   2                      P6 = 0x05;
 153   2                      lcdpoint++;
 154   2                              for(x=0;x<1000;x++);
 155   2                      }                        //准备送数据
 156   1                  lcdpoint=&KHZ;
 157   1      for(count=7;count>0;count--) //显示数字"XXXXKhz"
 158   1               {                  data1=*lcdpoint;
 159   2                              if(data1<0x40)
 160   2                              data1 += 0x30;          /*转化成ASCII码*/
 161   2                          P7 = data1;                 /*送字符数据*/
 162   2                              P6 = 0x04;
 163   2                      P6 = 0x05;
 164   2                      lcdpoint++;
 165   2                              for(x=0;x<100;x++);
 166   2                      }
 167   1          }
 168          void LCD_Init(void)   /*LCD初始化*/
 169          {       uint x;
 170   1         P6 = 0x09;
 171   1         for(x=0;x<50000;x++);
 172   1        //P7 = 0x30;                          /*设定一行显示*/
 173   1         P7 = 0x38;                           /*设定两行显示*/
 174   1         P6 = 0x08;
 175   1         P6 = 0x09; 
 176   1         for(x=0;x<1000;x++);
 177   1         P7 = 0x0e;                           /*显示开,光标显示,光标不闪烁*/
 178   1         P6 = 0x08;
C51 COMPILER V7.05   WPCACAPTURE                                                           02/14/2006 10:38:24 PAGE 4   

 179   1         P6 = 0x09;
 180   1         for(x=0;x<1000;x++);
 181   1         P7= 0x06;                            /*显示增加,不平移*/
 182   1         P6 = 0x08;
 183   1         P6 = 0x09;
 184   1         for(x=0;x<5000;x++);
 185   1         P7 = 0x01;                           /*清屏*/
 186   1         P6 = 0x08;
 187   1         P6 = 0x09; 
 188   1         for(x=0;x<5000;x++);
 189   1      }
 190          void SYSCLK_Init (void)  /*时钟初始化*/
 191          {
 192   1       int k;                              /*延时计数器*/
 193   1        OSCXCN = 0x67;                      /*启动外部晶振*/
 194   1      for (k=0; k < 255; k++) ;           /*等待外部晶体起振*/
 195   1        while ((OSCXCN & 0x80)==0x00) ;     /*查询标志位*/
 196   1      OSCICN=0x88 ;                        /* 选择外部时钟为11.0592MHZ*/                                        
             -          
 197   1      }
 198           


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