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

📄 www.ourhc.cn.lst

📁 STC15F104E单片机最小系统开发板
💻 LST
📖 第 1 页 / 共 2 页
字号:
 197   1      }
 198          
 199          /********************************************************************
 200                                      写入一个字节函数
 201          *********************************************************************/
 202          void IapProgramByte(uint addr,uchar dat)
 203          {
 204   1      
 205   1      IAP_CONTR=ENABLE_IAP;
 206   1      IAP_CMD=CMD_PROGRAM;
 207   1      IAP_ADDRL=addr;
 208   1      IAP_ADDRH=addr>>8;
 209   1      IAP_DATA=dat;
 210   1      IAP_TRIG=0X5A;
 211   1      IAP_TRIG=0XA5;
 212   1      _nop_();
 213   1      _nop_();
 214   1      _nop_();
 215   1      IapIdle();
 216   1      }
 217          /********************************************************************
 218                                      擦除一个字节函数
 219          *********************************************************************/
 220          void IapEraseSector(uint addr)
 221          {
 222   1      IAP_CONTR=ENABLE_IAP;
 223   1      IAP_CMD=CMD_ERASE;
 224   1      IAP_ADDRL=addr;
 225   1      IAP_ADDRH=addr>>8;
 226   1      IAP_TRIG=0X5A;
 227   1      IAP_TRIG=0XA5;
 228   1      _nop_();
 229   1      _nop_();
 230   1      _nop_();
 231   1      IapIdle();
 232   1      }
 233           
 234          /********************************************************************
 235                                      主函数
 236          *********************************************************************/
 237          void main()
 238          {
 239   1      
 240   1          TIMER0_INIT(); //定时器0初始化模拟串口用
 241   1              TIMER1_INIT(); //定时器1初始化
C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/11/2012 23:08:27 PAGE 5   

 242   1              Init_exint();
 243   1              times=IapReadByte(0);              //读取函数
 244   1              EA=1;              //开总中断
 245   1              UART_INIT();   //串口初始化
 246   1      
 247   1              while(1)          
 248   1              {
 249   2               if(REND)
 250   2               {
 251   3                 REND=0;
 252   3                 r++;
 253   3                 //but[r++&0x0f]=RBUF;
 254   3                 dat=RBUF;
 255   3               }
 256   2               if(TEND)
 257   2               {
 258   3                 if(t!=r)
 259   3                 {
 260   4                      TEND=0;
 261   4                  //TBUF=dat;
 262   4                      switch(dat) //接收数据判断
 263   4                      {
 264   5                              uchar k;
 265   5                              k=10;
 266   5                              case 'A': P33=1;delay(k);TBUF = dat;dat=0xee;break;        //  开
 267   5                              case 'B': P33=0;delay(k);TBUF = dat;dat=0xee;break;        //  关
 268   5                              case 'C': if(P33==1)
 269   5                                          TBUF = 'A';                                                            //  串口读输出口状态
 270   5                                                if(P33==0)
 271   5                                                  TBUF = 'B';
 272   5                                                delay(k);
 273   5                                                dat=0xee;
 274   5                                                break;                                           
 275   5                              case 'D': P33=!P33;delay(k);TBUF = dat;dat=0xee;break;  //  输出口取反
 276   5                              case 'E': delay(k);TBUF = times;dat=0xee;break;         //  串口读取当前设定值
 277   5                              default:break;                                     
 278   5                       }
 279   4                      t++;
 280   4                       //TBUF=but[t++&0x0f];
 281   4                  TING=1;
 282   4                 }
 283   3         }
 284   2      /********************************************************************
 285   2                                  接收数据判断函数
 286   2      *********************************************************************/
 287   2      
 288   2         }
 289   1      }
 290          
 291          
 292          /********************************************************************
 293                                      定时器T0中断服务函数
 294          *********************************************************************/
 295          void tm0()interrupt 1 using 1
 296          {
 297   1       if(RING)
 298   1       {
 299   2         if(--RCNT==0)
 300   2         {
 301   3              RCNT=3;
 302   3              if(--RBIT==0)
 303   3              {
C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/11/2012 23:08:27 PAGE 6   

 304   4               RBUF=RDAT;
 305   4               RING=0;
 306   4               REND=1;
 307   4              }
 308   3              else
 309   3              {
 310   4               RDAT>>=1;
 311   4               if(RXB)
 312   4                RDAT|=0X80;
 313   4              }
 314   3      
 315   3          }
 316   2        }
 317   1      
 318   1        else if(!RXB)
 319   1        {
 320   2               RING=1;
 321   2               RCNT=4;
 322   2               RBIT=9;
 323   2        }
 324   1      
 325   1       if(--TCNT==0)
 326   1       {
 327   2         TCNT=3;
 328   2         if(TING)
 329   2         {
 330   3           if(TBIT==0)
 331   3           {
 332   4                TXB=0;
 333   4                TDAT=TBUF;
 334   4                TBIT=9;
 335   4           }
 336   3               else
 337   3               {
 338   4                 TDAT>>=1;
 339   4                 if(--TBIT==0)
 340   4                 {
 341   5                   TXB=1;
 342   5                   TING=0;
 343   5                   TEND=1;
 344   5                 }
 345   4             else
 346   4              TXB=CY;
 347   4                       
 348   4           }
 349   3        }
 350   2       }
 351   1      }
 352          
 353          /********************************************************************
 354                                      外部中断0服务函数
 355          *********************************************************************/
 356          void Extern0 (void) interrupt 0 using 0
 357          {
 358   1        times++;
 359   1        if(times==20)                   //最大设定时间40秒
 360   1        times=0;
 361   1        IapEraseSector(0);              //擦除0地址数据
 362   1        IapProgramByte(0,times);        //写入0地址数据
 363   1       
 364   1      }
 365          /********************************************************************
C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/11/2012 23:08:27 PAGE 7   

 366                                      定时1中断服务函数
 367          *********************************************************************/
 368          void t1(void) interrupt 3 using 2 
 369          {
 370   1       
 371   1        miao++;
 372   1        if(miao==200) //2秒
 373   1        {
 374   2         miao=0;
 375   2         fen++;
 376   2         if(fen==times) // times秒
 377   2         {
 378   3           fen=0;
 379   3               P33=!P33;       //IO口输出电平取反
 380   3         }
 381   2        }
 382   1      }
 383          /********************************************************************
 384                                      结束
 385          *********************************************************************/


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