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

📄 pca.lst

📁 这个是做自动控制的小车的代码
💻 LST
字号:
C51 COMPILER V7.20   PCA                                                                   09/02/2007 21:16:40 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE PCA
OBJECT MODULE PLACED IN pca.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE pca.c DEBUG OBJECTEXTEND

line level    source

   1          #include "common.h"
   2          #include <stdlib.h>
   3          #include "pca.h"
   4          //bit  leftw_direct;
   5          //bit  rightw_direct;
   6          sbit P6_0=P6^0;          //en2
   7          sbit P6_1=P6^1;          //en1
   8          #define leftw_direct P6_1        //控制左轮方向
   9          #define rightw_direct P6_0       //控制右轮方向
  10          //uchar leftw_direct;
  11          //uchar rightw_direct;
  12          //sbit ECOM0=PCA0CPM0^6;
  13          
  14          /********/
  15          void pca0_ini()
  16          {
  17   1          temppage = SFRPAGE;
  18   1          SFRPAGE=0x00;
  19   1              PCA0MD=0x08;//PCA采用系统时钟,且PCA溢出中断禁止
  20   1              PCA0CN=0x40;//启动PCA计数器
  21   1              EIE1|=0x08;//PCA中断使能,EPCA
  22   1          SFRPAGE=temppage;
  23   1      }
  24          
  25          /*****CEX0,CEX1为PWM输出*/
  26          void pca0_cex0_ini()
  27          {
  28   1              temppage = SFRPAGE;
  29   1          SFRPAGE=0x00;
  30   1          PCA0CPM0=0X42; //CEX1为8bit PWM输出模式
  31   1          SFRPAGE=temppage;
  32   1      }
  33          void pca0_cex1_ini()
  34          {   
  35   1         temppage = SFRPAGE;
  36   1         SFRPAGE=0x00;
  37   1         PCA0CPM1=0X42; //CEX1为8bit PWM输出模式
  38   1         SFRPAGE=temppage;
  39   1      }
  40          
  41          /************************/
  42          void PWM_set(uchar vleft,uchar vright)
  43          {                                    //占空比设置,高电平占空比为(256-vleft)/256
  44   1                  temppage = SFRPAGE;
  45   1                      SFRPAGE = 0x00;
  46   1                  PCA0CPH0=vleft; 
  47   1                      PCA0CPH1=vright;
  48   1                  SFRPAGE=temppage;
  49   1      }
  50          
  51          /**********************/
  52          void drive_set(char vleft, char vright)//有符号字符型,取值范围-128~+127;
  53                                                  //0,-128为速度最大,STOP速度最小,正数正转,负数反转
  54          {      
  55   1             
C51 COMPILER V7.20   PCA                                                                   09/02/2007 21:16:40 PAGE 2   

  56   1                 uchar m_vleft,m_vright;
  57   1                 m_vleft=256-2*abs(vleft);
  58   1                 m_vright=256-2*abs(vright);
  59   1             temppage=SFRPAGE;
  60   1                 SFRPAGE=0x00;
  61   1             PCA0CPM0=0X42;
  62   1             PCA0CPM1=0X42;
  63   1                 SFRPAGE=temppage;
  64   1                 SFRPAGE = 0x0F;
  65   1                 if(vleft<0)
  66   1                  {
  67   2                      leftw_direct=0;
  68   2                  }
  69   1                 else
  70   1                  {
  71   2                      leftw_direct=1;
  72   2                  }
  73   1              
  74   1                 if(vright<0)
  75   1                 {
  76   2                      rightw_direct=0;
  77   2                 }
  78   1                 else
  79   1                 {
  80   2                      rightw_direct=1;
  81   2                 }
  82   1              
  83   1                 PWM_set(m_vleft,m_vright);  
  84   1      }
  85          
  86          void go_forward()
  87          {
  88   1                 drive_set(110,0);
  89   1      }
  90          
  91          void go_back()
  92          {
  93   1                 drive_set(-110,-110);
  94   1      }
  95          
  96          void turn_left()
  97          {
  98   1                 drive_set(-110,110);
  99   1      }
 100          
 101          void turn_right()
 102          {
 103   1                  drive_set(110,-110);
 104   1      }
 105          void turnright90()
 106          {
 107   1           drive_set(127,-127);
 108   1              delay1ms(2000);
 109   1      }
 110          void turnleft90()
 111          {
 112   1       drive_set(-110,110);
 113   1              delay1ms(2000);
 114   1      }
 115          void go_fast()
 116          {
 117   1                      drive_set(0,0);
C51 COMPILER V7.20   PCA                                                                   09/02/2007 21:16:40 PAGE 3   

 118   1      }
 119          void stop()              //清零ECOMn来实现0%,即低电平输出 
 120          {       
 121   1              temppage=SFRPAGE;
 122   1                      SFRPAGE=0x00;
 123   1              PCA0CPM0=0X02;
 124   1              PCA0CPM1=0X02;
 125   1                      SFRPAGE=temppage;
 126   1              
 127   1      }
 128          
 129          /*********CEX2,CEX3崭罕哐卮シ⒛J烬

⌨️ 快捷键说明

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