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

📄 main.lst

📁 单片机C51典型应用设计代码共11章包括液晶显示代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 189   3                              {
 190   4                                      temp=temp+MAXSTEPS;
 191   4                              }
 192   3                              
 193   3                              if(temp>0)
 194   3                              {
 195   4                                      FuncRotate(ConstClockWise,temp,&RegAngle);
 196   4                              }
 197   3                              if(temp<0)
 198   3                              {
 199   4                                      FuncRotate(ConstAntiClock,-temp,&RegAngle);}
 200   3                      }
 201   2                      
 202   2                      if(workmode==1) 
 203   2                      {
 204   3                              send((char*)&RegAngle,2);
 205   3                      }
 206   2                      else if(workmode==2) 
 207   2                      {
 208   3                              send((char*)&RegAngle,2);
 209   3                              send((char*)&XPulse,4);
 210   3                              send((char*)&YPulse,4);
 211   3                      }
 212   2                      
 213   2                      EvTimer=FALSE;
 214   2              }
 215   1      }
 216          
 217          
 218          
 219          void initial(void)
 220          {
 221   1              
 222   1              //  IP=0x08;              //定义T1中断优先
 223   1              //  IE=0x87;              //允许中断0、1、定时器0
 224   1              //  TCON=0x05;            //外部中断为负边沿中断
 225   1              
 226   1              IP=0x10;              //定义串口为高优先级中断
 227   1              IE=0x97;              //允许串口、中断0、1、定时器0
 228   1              TCON=0x05;
 229   1              
 230   1              //  TMOD=0x01;            //定时器0以十六位定时/计数器方式工作
 231   1              TMOD=0x21;            //定时器1为自动装入(auto-load)方式
 232   1              //  TMOD=0x22;            //定时器1为自动装入(auto-load)方式
 233   1              //  TH0=0xD8;             //10ms产生中断
 234   1              //  TL0=0xEF;
 235   1              TH0=0xB1;             //10ms产生中断 24Mhz
 236   1              TL0=0xE0;
 237   1              //  TH0=0x4E;             //10ms产生中断 24Mhz
 238   1              //  TL0=0x20;
 239   1              //  TH0=0xFF;             //10ms产生中断 24Mhz
C51 COMPILER V6.23a  MAIN                                                                  11/24/2002 21:27:04 PAGE 5   

 240   1              //  TL0=0x80;
 241   1              //  TH0=0xff;             //10ms产生中断 24Mhz
 242   1              //  TL0=0x3f;
 243   1              //  TH0=0x00;
 244   1              //  TL0=0x00;             //
 245   1              TR0=1;
 246   1              
 247   1              
 248   1              PCON=0;               //SMOD(PCON.7)=1时,baudrate doubled.//smod=1 (11M晶振时为0)
 249   1              
 250   1              SCON=0xD0;            //串行口工作方式 : 9位UART, 波特率可变
 251   1              TH1=0xf3;
 252   1              TL1=0xf3;             //
 253   1              PCON=0x80|PCON; //  SMOD=1;             //波特率设置 : 9600 baud(E8--24MHZ)
 254   1              //SMOD=0=4.8kbps
 255   1              //th1=tl1=fd,smod=0 ,=19.2kbps
 256   1              TR1=1;                //启动定时器1
 257   1              
 258   1              
 259   1              XPulse=0;
 260   1              YPulse=0;
 261   1              XPulseTemp=0;
 262   1              YPulseTemp=0;
 263   1              
 264   1      }
 265          
 266          void send(char *temp,int j)
 267          {
 268   1              int i=0;
 269   1              LampComm=TRUE;
 270   1              EA=0;
 271   1              for(i=0;i<=j-1;i++)
 272   1              {
 273   2                      ACC=*(temp+i);
 274   2                      TB8=P;
 275   2                      SBUF=ACC;
 276   2                      while(TI==0);
 277   2                      TI=0;
 278   2              }
 279   1              EA=1;
 280   1              LampComm=FALSE;
 281   1      }
 282          
 283          int FuncRotate(bit BClockWise,int step,int *PRegAngle)
 284          {
 285   1              
 286   1              PinRotIndicator=TRUE;
 287   1              if (BClockWise)
 288   1          {
 289   2                      PinDrvAntiClock=INVALID;
 290   2                      *PRegAngle+=step;
 291   2                      if (*PRegAngle>=MAXSTEPS) *PRegAngle-=MAXSTEPS;
 292   2          }
 293   1              else
 294   1          {
 295   2                      PinDrvAntiClock=VALID;
 296   2                      *PRegAngle-=step;
 297   2                      if (*PRegAngle<0) *PRegAngle+=MAXSTEPS;
 298   2          }
 299   1              
 300   1              
 301   1              while(step)
C51 COMPILER V6.23a  MAIN                                                                  11/24/2002 21:27:04 PAGE 6   

 302   1          {
 303   2                      PinDriver=INVALID;
 304   2                      delay(delaycount);
 305   2                      PinDriver=VALID;
 306   2                      delay(delaycount);
 307   2                      --step;
 308   2          }
 309   1              PinRotIndicator=FALSE;
 310   1              return(TRUE);
 311   1              
 312   1              
 313   1      }
 314          void delay(int i)
 315          {
 316   1              int j=0;
 317   1              i=i*DELAY_VALVE;
 318   1              
 319   1              while (j<i)j++;
 320   1              
 321   1      }
 322          
 323          void XPulse_INT(void) interrupt 2
 324          {
 325   1              EX0=0;
 326   1              
 327   1              if(PinXClockWise)   XPulseTemp++;
 328   1              else XPulseTemp--;
 329   1              
 330   1              EX0=1;
 331   1      }
 332          void  YPulse_INT(void)  interrupt 0
 333          {
 334   1              EX1=0;
 335   1              
 336   1              if(PinYClockWise) YPulseTemp++;
 337   1              else YPulseTemp--;
 338   1              
 339   1              EX1=1;
 340   1      }
 341          
 342          void  TIMER(void)  interrupt 1
 343          {
 344   1              TH0=0xB1;             //10ms产生中断 24Mhz
 345   1              TL0=0xE0;
 346   1              
 347   1              counter10ms++;
 348   1              //  if(counter10ms==5)
 349   1              //    PinLampBlink=TRUE;
 350   1              
 351   1              if(counter10ms>=30)
 352   1          {
 353   2                      counter10ms=0;
 354   2                      if(EvTimer==TRUE){while(1){LampFatalError=TRUE;}}//for debug use
 355   2                      EvTimer=TRUE;
 356   2                      //       PinLampBlink=FALSE;
 357   2                      XPulse=XPulseTemp;
 358   2                      YPulse=YPulseTemp;
 359   2                      XPulseTemp=0;
 360   2                      YPulseTemp=0;
 361   2          }
 362   1      }
 363          
C51 COMPILER V6.23a  MAIN                                                                  11/24/2002 21:27:04 PAGE 7   

 364          
 365          
 366          void Rcv_INT(void) interrupt 4
 367          {
 368   1              LampComm=TRUE;
 369   1              if(RI)
 370   1              {
 371   2                      ACC=SBUF;
 372   2                      if(P==RB8)
 373   2                      {
 374   3                              rcvdata=ACC;
 375   3                              EvRcv=TRUE;
 376   3                      }
 377   2                      
 378   2                      RI=0;
 379   2                      
 380   2              }
 381   1              LampComm=FALSE;
 382   1      }
 383          

C51 COMPILATION COMPLETE.  0 WARNING(S),  1 ERROR(S)

⌨️ 快捷键说明

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