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

📄 chengxu.lst

📁 可编程继电器模块
💻 LST
字号:
C51 COMPILER V9.00   CHENGXU                                                               03/08/2012 22:00:15 PAGE 1   


C51 COMPILER V9.00, COMPILATION OF MODULE CHENGXU
OBJECT MODULE PLACED IN chengxu.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE chengxu.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************
   2                                      汇诚科技
   3          
   4          实现功能:串口发送控制继电器开关
   5          使用芯片:STC15F104E
   6          晶振:12MHZ
   7          编译环境:Keil
   8          作者:zhangxinchunleo
   9          网站:www.ourhc.cn
  10          淘宝店:汇诚科技 http://shop36330473.taobao.com
  11          【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!     
  12          
  13          *********************************************************************/
  14          /********************************************************************
  15          单片机与PC机采用9针串口,MAX232通讯,波特率默认为9600.
  16          单片机接收PC机发送的数据码表如下:
  17          
  18          01、开:PC发送'A'; 
  19          02、关:PC发送'B'; 
  20          03、输出状态查询:PC发送C;单片机返回输出状态‘A’表示开 ‘B’表示关;
  21          04、继电器状态取反:PC发送D     继电器状态取反
  22          *********************************************************************/
  23          #include "reg52.h" 
  24          #include <intrins.H>
  25          #define uchar unsigned char //宏定义字符型变量
  26          #define uint  unsigned int      //宏定义整型变量
  27          /********************************************************************
  28                                 eeprom函数声明
  29          *********************************************************************/
  30          extern void IapIdle();                                        //操作函数
  31          extern uchar IapReadByte(uint addr);              //读取函数
  32          extern void IapProgramByte(uint addr,uchar dat);  //写入函数
  33          extern void IapEraseSector(uint addr);            //擦除函数
  34          /********************************************************************
  35                                      波特率设定
  36          *********************************************************************/
  37          //#define BAUD 0XF400  //1200bps@ 11.0592MHZ
  38          //#define BAUD 0XFA00  //2400bps@ 11.0592MHZ
  39          //#define BAUD 0XFD00  //4800bps@ 11.0592MHZ
  40          #define BAUD 0XFE80  //9600bps@ 11.0592MHZ
  41          //#define BAUD 0XFF40  //19200bps@ 11.0592MHZ
  42          //#define BAUD 0XFFA0  //38400bps@ 11.0592MHZ
  43          uchar miao,fen,times;
  44          uchar dat;      //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
  45          sbit P33=P3^3;  //定义继电器控制输出脚
  46          
  47          /********************************************************************
  48                                      定义特殊寄存器
  49          *********************************************************************/
  50          sfr AUXR  =  0x8E;    //辅助寄存器
  51          sbit RXB=P3^0;
  52          sbit TXB=P3^1;
  53          /********************************************************************
  54                                     定义数据类型
  55          *********************************************************************/
C51 COMPILER V9.00   CHENGXU                                                               03/08/2012 22:00:15 PAGE 2   

  56          uchar TBUF,RBUF;
  57          uchar TDAT,RDAT;
  58          uchar TCNT,RCNT;
  59          uchar TBIT,RBIT;
  60          uint TING,RING;
  61          uint TEND,REND;
  62          
  63          void UART_INIT(); //声明函数
  64          
  65          uchar t,r;                //定义数据类型
  66          uchar but[16];    //数据存储数组
  67          /********************************************************************
  68                                      延时函数
  69          *********************************************************************/
  70          void delay(uchar t)
  71          {
  72   1        uchar i,j;
  73   1         for(i=0;i<t;i++)
  74   1         {
  75   2               for(j=13;j>0;j--);
  76   2               { ;
  77   3               }
  78   2         }
  79   1      }
  80          /********************************************************************
  81                                      定时器0初始化函数
  82          *********************************************************************/
  83          void TIMER0_INIT(void)
  84          {
  85   1              TMOD=0X00;         //定时器T0设定
  86   1              AUXR|=0X80;        //辅助寄存器
  87   1              TL0=BAUD;          //十六位寄存器
  88   1              TH0=BAUD>>8;   //十六位寄存器
  89   1              TR0=1;             //开定时器
  90   1              ET0=1;
  91   1              PT0=1;
  92   1      }
  93          /********************************************************************
  94                                      定时器1初始化函数
  95          *********************************************************************/
  96          void TIMER1_INIT(void)
  97          {
  98   1              TH1=(65536-10000)/256;   //对TH1 TL1赋值
  99   1              TL1=(65536-10000)%256;
 100   1              ET1=1;
 101   1              TR1=1;                   //开始定时
 102   1      }                       
 103          /********************************************************************
 104                                      外部中断0初始化
 105          *********************************************************************/
 106          void Init_exint(void)
 107          {
 108   1         INT0=1;   //下降沿触发
 109   1         IT0=1;
 110   1         EX0=1;
 111   1      }
 112          /********************************************************************
 113                        功能:串口初始化,波特率9600,方式1
 114          *********************************************************************/
 115          void UART_INIT()
 116          {
 117   1              TING=0;
C51 COMPILER V9.00   CHENGXU                                                               03/08/2012 22:00:15 PAGE 3   

 118   1              RING=0;
 119   1              
 120   1              TEND=1;
 121   1              REND=0;
 122   1              
 123   1              TCNT=0;
 124   1              RCNT=0;
 125   1      }
 126          /********************************************************************
 127                                      主函数
 128          *********************************************************************/
 129          void main()
 130          {
 131   1      
 132   1          TIMER0_INIT(); //定时器0初始化模拟串口用
 133   1              TIMER1_INIT(); //定时器1初始化
 134   1              Init_exint();
 135   1              times=IapReadByte(0);              //读取函数
 136   1              EA=1;              //开总中断
 137   1              UART_INIT();   //串口初始化
 138   1      
 139   1              while(1)          
 140   1              {
 141   2               if(REND)
 142   2               {
 143   3                 REND=0;
 144   3                 r++;
 145   3                 //but[r++&0x0f]=RBUF;
 146   3                 dat=RBUF;
 147   3               }
 148   2               if(TEND)
 149   2               {
 150   3                 if(t!=r)
 151   3                 {
 152   4                      TEND=0;
 153   4                  //TBUF=dat;
 154   4                      switch(dat) //接收数据判断
 155   4                      {
 156   5                              uchar k;
 157   5                              k=10;
 158   5                              case 'A': P33=1;delay(k);TBUF = dat;dat=0xee;break;        //  开
 159   5                              case 'B': P33=0;delay(k);TBUF = dat;dat=0xee;break;        //  关
 160   5                              case 'C': if(P33==1)
 161   5                                          TBUF = 'A';                                                            //  串口读输出口状态
 162   5                                                if(P33==0)
 163   5                                                  TBUF = 'B';
 164   5                                                delay(k);
 165   5                                                dat=0xee;
 166   5                                                break;                                           
 167   5                              case 'D': P33=!P33;delay(k);TBUF = dat;dat=0xee;break;  //  输出口取反
 168   5                              case 'E': delay(k);TBUF = times;dat=0xee;break;         //  串口读取当前设定值
 169   5                              default:break;                                     
 170   5                       }
 171   4                      t++;
 172   4                       //TBUF=but[t++&0x0f];
 173   4                  TING=1;
 174   4                 }
 175   3         }
 176   2      /********************************************************************
 177   2                                  接收数据判断函数
 178   2      *********************************************************************/
 179   2      
C51 COMPILER V9.00   CHENGXU                                                               03/08/2012 22:00:15 PAGE 4   

 180   2         }
 181   1      }
 182          
 183          
 184          /********************************************************************
 185                                      定时器T0中断服务函数
 186          *********************************************************************/
 187          void tm0()interrupt 1 using 1
 188          {
 189   1       if(RING)
 190   1       {
 191   2         if(--RCNT==0)
 192   2         {
 193   3              RCNT=3;
 194   3              if(--RBIT==0)
 195   3              {
 196   4               RBUF=RDAT;
 197   4               RING=0;
 198   4               REND=1;
 199   4              }
 200   3              else
 201   3              {
 202   4               RDAT>>=1;
 203   4               if(RXB)
 204   4                RDAT|=0X80;
 205   4              }
 206   3      
 207   3          }
 208   2        }
 209   1      
 210   1        else if(!RXB)
 211   1        {
 212   2               RING=1;
 213   2               RCNT=4;
 214   2               RBIT=9;
 215   2        }
 216   1      
 217   1       if(--TCNT==0)
 218   1       {
 219   2         TCNT=3;
 220   2         if(TING)
 221   2         {
 222   3           if(TBIT==0)
 223   3           {
 224   4                TXB=0;
 225   4                TDAT=TBUF;
 226   4                TBIT=9;
 227   4           }
 228   3               else
 229   3               {
 230   4                 TDAT>>=1;
 231   4                 if(--TBIT==0)
 232   4                 {
 233   5                   TXB=1;
 234   5                   TING=0;
 235   5                   TEND=1;
 236   5                 }
 237   4             else
 238   4              TXB=CY;
 239   4                       
 240   4           }
 241   3        }
C51 COMPILER V9.00   CHENGXU                                                               03/08/2012 22:00:15 PAGE 5   

 242   2       }
 243   1      }
 244          
 245          /********************************************************************
 246                                      外部中断0服务函数
 247          *********************************************************************/
 248          void Extern0 (void) interrupt 0 using 0
 249          {
 250   1        times++;
 251   1        if(times==20)                   //最大设定时间40秒
 252   1        times=0;
 253   1        IapEraseSector(0);              //擦除0地址数据
 254   1        IapProgramByte(0,times);        //写入0地址数据
 255   1       
 256   1      }
 257          /********************************************************************
 258                                      定时1中断服务函数
 259          *********************************************************************/
 260          void t1(void) interrupt 3 using 2 
 261          {
 262   1       
 263   1        miao++;
 264   1        if(miao==200) //2秒
 265   1        {
 266   2         miao=0;
 267   2         fen++;
 268   2         if(fen==times) // times秒
 269   2         {
 270   3           fen=0;
 271   3               P33=!P33;       //继电器状态取反
 272   3         }
 273   2        }
 274   1      }
 275          /********************************************************************
 276                                      结束
 277          *********************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    414    ----
   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 + -