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

📄 main.lst

📁 这是一个对OSD芯片upd6464A操作的接口测试程序,使用KC51编译一个高速球键盘程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V8.01   MAIN                                                                  12/13/2008 17:52:30 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE main.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND CODE SYMBOLS

line level    source

   1          /*---------------------------------
   2          记住调整ID时键盘发的码和PELCO有点相同,程序要加识别处理的
   3          
   4          -----------------------------------*/
   5          /*-----------------------------------------------
   6          
   7             明景的键盘PELCO-P球机ID为实际球机ID少1,程序要进行处理
   8             PELCO-D上下两代码颠倒了,UP为000     DOWN 为00108 与公布的相反
   9          ------------------------------------------------*/
  10          #include <general.h>      //定义外部的函数
  11          struct structSwitchStatus
  12          {
  13          unsigned char    id;
  14          unsigned char    protocol;
  15          unsigned char    rxdBaud;
  16          unsigned char    cameraBaud;
  17          unsigned char    cameraType;
  18          };
  19          volatile unsigned char programFlyOff;
  20          volatile unsigned char flagTxd;
  21          volatile unsigned long comTxd;
  22          volatile unsigned char countTxd;
  23          volatile unsigned char bdata  bflag;                                               //通用位变量
  24          sbit bflag_0=bflag^0; sbit bflag_1=bflag^1;     sbit bflag_2=bflag^2; 
  25          sbit bflag_3=bflag^3; sbit bflag_4=bflag^4; sbit bflag_5=bflag^5;
  26          sbit bflag_6=bflag^6;sbit bflag_7=bflag^7;
  27          volatile unsigned char  cProtocol;
  28          volatile unsigned char id;
  29          volatile unsigned char cameraType;                                                 //通用位变量
  30          unsigned char idata sKeyCode[20]={""}; //目前只用一组来表示,并且为0值   接收键盘码用
  31          volatile unsigned char idata cKeyCodeReceiveState;      //初值处于无串口码接收到状态有值用1表示
  32          volatile unsigned char idata cKeyCodeReceive;
  33          volatile unsigned char idata  *pKeyCode;
  34          struct  structSwitchStatus  GetSwitchStatus();
  35          volatile struct structSwitchStatus struSwitchTemp;
  36          void TxdString(unsigned long com);
  37          void main()
  38          {       
  39   1      
  40   1      volatile    unsigned int x;
  41   1      volatile        unsigned long y;
  42   1              
  43   1               
  44   1      ERRor:    
  45   1              WdtCls();
  46   1              GlobalSet();
  47   1              IntDisable();
  48   1              T0Stop();
  49   1              T1Stop();
  50   1              T2Stop();
  51   1              IntSet();
  52   1              TimerSet();
  53   1              SciSet();
  54   1              IntEnable(); 
  55   1              for(x=0;y<0xffff;x++)
C51 COMPILER V8.01   MAIN                                                                  12/13/2008 17:52:30 PAGE 2   

  56   1              WdtCls();
  57   1              flagTxd=0xee;   //初始化发送器状态变量
  58   1              countTxd=0;
  59   1              T1Start();         //默认的发送
  60   1              if(programFlyOff)
  61   1              {
  62   2              TxdBaud9600();
  63   2              programFlyOff=1;        
  64   2              TxdString(0);  //接口传递
  65   2              }
  66   1          struSwitchTemp=GetSwitchStatus();
  67   1              switch(struSwitchTemp.rxdBaud)
  68   1              {
  69   2              case  0: TxdBaud2400();break;
  70   2              case  1: TxdBaud9600();break;
  71   2              case  2: TxdBaud4800();break;
  72   2              case  3: TxdBaud19200();break;
  73   2              }
  74   1              switch(struSwitchTemp.cameraBaud)
  75   1              {
  76   2              case  0: RxdBaud2400();break;
  77   2              case  1: RxdBaud9600();break;
  78   2              case  2: RxdBaud4800();break;
  79   2              case  3: RxdBaud19200();break;
  80   2              }
  81   1              T2Start();
  82   1              id=struSwitchTemp.id;
  83   1              cProtocol=struSwitchTemp.protocol;
  84   1              cameraType=struSwitchTemp.cameraType;
  85   1              cKeyCodeReceiveState=0;           //复位接收状态
  86   1              pKeyCode=sKeyCode;                               //接收码清零程序
  87   1                                       for(x=0;x<20;x++)                                       //预设20个字符
  88   1                                       {
  89   2                                               *pKeyCode =0;
  90   2                                           ++pKeyCode ;
  91   2                                       }
  92   1                                       pKeyCode=sKeyCode;        //重新指向代码
  93   1      
  94   1       
  95   1              switch(cProtocol)                                //与说明手册上控制位一致
  96   1              
  97   1              {
  98   2               default:  goto ERRor;
  99   2      
 100   2       case PELCOD:      
 101   2                      while(1)
 102   2                               {      
 103   3                      
 104   3                                       WdtCls();      
 105   3                              if(PELCOD!=cProtocol)   // 利用协议出错处理
 106   3                               goto ERRor;
 107   3                              if(!cKeyCodeReceiveState)       continue;
 108   3                      
 109   3                              if(0xff!=cKeyCodeReceive)
 110   3                              {
 111   4                                       cKeyCodeReceiveState=0;
 112   4                                       continue;                                      //首码错则结束  进  入  循  环
 113   4                                       }
 114   3                      
 115   3                                 cKeyCodeReceiveState=0; 
 116   3                                                       while(!cKeyCodeReceiveState)  
 117   3                                                       {
C51 COMPILER V8.01   MAIN                                                                  12/13/2008 17:52:30 PAGE 3   

 118   4                                                               WdtCls();      
 119   4      
 120   4                                                       }
 121   3                                                                                       
 122   3       
 123   3                                                       if( cKeyCodeReceive!=id)       //说明是正确的键盘码转入处理程序
 124   3      
 125   3                                                       {                                                         //不是本球机的接收码ID不正确或者是一误码都必须会结束
 126   4                                                               cKeyCodeReceiveState=0;
 127   4                                                               continue;                                         //处理并且清除接收标志
 128   4                                                       }
 129   3       
 130   3                                                      
 131   3                                                               
 132   3                                                               x=2;
 133   3                                                                       pKeyCode=sKeyCode;     
 134   3                                                               *pKeyCode=0xff;           //起始同步码
 135   3                                                                      
 136   3                                                               ++pKeyCode;
 137   3                                                               *pKeyCode=id;     //ID码
 138   3         
 139   3                                                               cKeyCodeReceiveState=0;//已取走第2个码
 140   3                                                               do
 141   3                                                               {
 142   4                                                              //       x=x+*pKeyCode  ;       //从第二个开始累加校验
 143   4                                                                       while(!cKeyCodeReceiveState)  //读码等待
 144   4                                                                       {
 145   5                                                                               _nop_();
 146   5                                                                       }
 147   4                                                                       ++pKeyCode;    
 148   4                                                                       *pKeyCode=cKeyCodeReceive;
 149   4              
 150   4                                                                       cKeyCodeReceiveState=0; //取走键盘码
 151   4                                                                       ++x;   
 152   4                                                               }while(x!=7);   //读码结束标志
 153   3      
 154   3                                        
 155   3                                                 if( sKeyCode[3]==0x55)  continue;
 156   3                                                      y= (sKeyCode[2]<<24)+(sKeyCode[3]<<16)+(sKeyCode[4]<<8)+sKeyCode[5];
 157   3                                                       //构造一译码关键字
 158   3                                                      WdtCls();                       
 159   3                      
 160   3      
 161   3                                                      
 162   3                                                      
 163   3      
 164   3      
 165   3      
 166   3                                      }                                       //end case while rotate
 167   2                              break; //finish case 
 168   2      
 169   2               case SUMSUNG:     //三星协议  
 170   2      
 171   2                                      while(1)
 172   2                               {      
 173   3              
 174   3                                       WdtCls();      
 175   3                              if(SUMSUNG!=cProtocol)   // 利用协议出错处理
 176   3                               goto ERRor;
 177   3                              if(!cKeyCodeReceiveState)       continue;
 178   3                              
 179   3                              if(0xa0!=cKeyCodeReceive)
C51 COMPILER V8.01   MAIN                                                                  12/13/2008 17:52:30 PAGE 4   

 180   3                              {
 181   4                                       cKeyCodeReceiveState=0;
 182   4                                       continue;                                      //首码错则结束  进  入  循  环
 183   4                                       }
 184   3                      
 185   3                                 cKeyCodeReceiveState=0; 
 186   3                                                       while(!cKeyCodeReceiveState)  
 187   3                                                       {
 188   4                                                               WdtCls();      
 189   4      
 190   4                                                       }
 191   3                                                       cKeyCodeReceiveState=0; 
 192   3                                                       while(!cKeyCodeReceiveState)  
 193   3                                                       {
 194   4                                                               WdtCls();      
 195   4      
 196   4                                                       }
 197   3      
 198   3                                                                                       
 199   3       
 200   3                                                       if( cKeyCodeReceive!=id)       //说明是正确的键盘码转入处理程序
 201   3      
 202   3                                                       {                                                         //不是本球机的接收码ID不正确或者是一误码都必须会结束
 203   4                                                               cKeyCodeReceiveState=0;
 204   4                                                               continue;                                         //处理并且清除接收标志
 205   4                                                       }
 206   3       
 207   3                                                      
 208   3                                                               
 209   3                                                               x=3;
 210   3                                                                       pKeyCode=sKeyCode;     
 211   3                                                               *pKeyCode=0xa0;           //起始同步码
 212   3                                                              
 213   3                                                               ++pKeyCode;  //跳过发送地址
 214   3                                                               ++pKeyCode;
 215   3                                                               *pKeyCode=id;     //ID码
 216   3         
 217   3                                                               cKeyCodeReceiveState=0;//已取走第3个码
 218   3                                                               do
 219   3                                                               {
 220   4                                                              //       x=x+*pKeyCode  ;       //从第二个开始累加校验
 221   4                                                                       while(!cKeyCodeReceiveState)  //读码等待
 222   4                                                                       {
 223   5                                                                               _nop_();
 224   5                                                                       }
 225   4                                                                       ++pKeyCode;    

⌨️ 快捷键说明

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