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

📄 my51pro.lst

📁 串口程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   MY51PRO                                                               10/04/2008 10:46:24 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MY51PRO
OBJECT MODULE PLACED IN C:\DOCUME~1\ADMINI~1\桌面\WORK\MY51PRJ\MY51PRO.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE C:\DOCUME~1\ADMINI~1\桌面\WORK\MY51PRJ\MY51PRO.C DB SB OE

line level    source

   1          #include <reg52.h>
   2          #include <absacc.h>
   3          #include <intrins.h>
   4          
   5          
   6          /*DS1302命令字地址定义区*/
   7          #define DS1302_SECOND   0x80
   8          #define DS1302_MINUTE   0x82
   9          #define DS1302_HOUR     0x84
  10          #define DS1302_DATE     0x86
  11          #define DS1302_MONTH    0x88
  12          #define DS1302_DAY      0x8A
  13          #define DS1302_YEAR     0x8C
  14          #define DS1302_WP       0X8E
  15          
  16          /*控制位定义区*/
  17          sbit  DS1302_CLK = P2^5;
  18          sbit  DS1302_DIO = P3^3;
  19          sbit  DS1302_RST = P3^4;
  20          sbit  DAW = P3^5;
  21          
  22          /*标志位与数据定义区*/
  23          unsigned char receive_sbuf;
  24          unsigned char receive_7128;
  25          unsigned char receive_1302;
  26          unsigned char jingdu=0xff;
  27          unsigned char weidu=0xff;
  28          unsigned char nianinit=0x08; //初始化时间的年
  29          unsigned char zhouinit=0xff; //初始化时间的周(星期)
  30          unsigned char yueinit=0x10;  //初始化时间的月
  31          unsigned char riinit=0x3;   //初始化时间的日
  32          unsigned char shiinit=0x10;  //初始化时间的时
  33          unsigned char feninit=0x41;  //初始化时间的分
  34          unsigned char miaoinit=0x44; //初始化时间的秒
  35          unsigned char nian=0xff;     //从1302读出的年
  36          unsigned char zhou=0xff;     //从1302读出的周(星期)
  37          unsigned char yue=0xff;      //从1302读出的月
  38          unsigned char ri=0xff;       //从1302读出的日
  39          unsigned char shi=0xff;      //从1302读出的时
  40          unsigned char fen=0xff;      //从1302读出的分
  41          unsigned char miao=0xff;     //从1302读出的秒
  42          unsigned char OK=0x00;         //0xff为接收初始化数据完毕
  43          unsigned char configflag=0x00;           //0xff为配置完毕
  44          unsigned char receiveFnum=0x00;     //接收FF计数
  45          unsigned char receive0num=0x00;     //接收00计数
  46          unsigned char receivecount=0x00;     //接收初始化数据计数
  47          unsigned char receivecount2=0x00;   //接收控制量数据计数
  48          unsigned char receivestart=0x00;      //接收初始化数据开始标志,开始为0xff
  49          unsigned char receivestart2=0x00;    //接收控制量数据开始标志,开始为0xff
  50          unsigned char receiveend=0x00;     //结束为0xff
  51          unsigned char error=0x00;      //发生为ff
  52          unsigned char datareadynum=0;
  53          unsigned char danum1=0x00;     //高八位
  54          unsigned char danum2=0x00;     //低四位
  55          unsigned char danum3=0x00;
C51 COMPILER V8.02   MY51PRO                                                               10/04/2008 10:46:24 PAGE 2   

  56          unsigned char danum4=0x00;
  57          unsigned char adnum1=0x00;     //  高八位
  58          unsigned char adnum2=0x00;     //  低四位(低四位有效)
  59          unsigned char adnum3=0x00;     //  高八位
  60          unsigned char adnum4=0x00;     //  低四位(低四位有效)
  61          unsigned char adnumflag=0x00;//0x00第一个
  62          int dosendpc=1;  //是否执行sendpc函数1不执行
  63          int sendpcnum=0; //发送的第几个数,从0开始
  64          int updatanum=0;
  65          
  66          /*函数定义区*/
  67          //DA,10位,先给高两位,后低八位,AD,12位,先高八位,后低四位  ??
  68          void Inputbyte(unsigned char m);
  69          unsigned char Outputbyte(void);
  70          unsigned char Read1302(unsigned char Addr);
  71          void Write1302(unsigned char Addr, unsigned char Da);
  72          void DAint(unsigned char dadata_fir,unsigned char dadata_sec);
  73          void DS1302config(void);
  74          void Timeupdata(void);
  75          void Send3ff(void);
  76          void Send300(void);
  77          void Sendpc(void);
  78          
  79          
  80          void main(void)
  81          {
  82   1      
  83   1       //外中断设置
  84   1       IT0=1;        //外部中断0 下降沿中断
  85   1       PX0=0;        //外部中断优先级低
  86   1       //EX0=1;        //开外部中断0
  87   1       //串口设置
  88   1       SCON=0x50;     //模式1;允许接接收;标志位清0
  89   1       PS=1;          //串口中断高优先级
  90   1       PCON=0X80;
  91   1       TMOD=0x20;     //方式2:自动装入
  92   1       TL1=TH1=0xF3;
  93   1       TR1=1;         //波特率 4800@12Mhz)
  94   1       ES = 1;                //串口中断开
  95   1      
  96   1      
  97   1       _nop_();
  98   1      
  99   1      
 100   1       //DAint(0xff,0x0f);
 101   1      
 102   1      
 103   1       EA=1;         //开总中断
 104   1      
 105   1      
 106   1       _nop_();
 107   1      
 108   1      Write1302(DS1302_WP,0x00);
 109   1         _nop_();
 110   1         _nop_();
 111   1         // Write1302(0x90,0xA5);    //充电模式(暂时省略)
 112   1        Write1302(DS1302_SECOND,0x00);  //设置秒,并启动(以后改成后启动或最后设置秒并启动)
 113   1         _nop_();
 114   1         _nop_();
 115   1        Write1302(DS1302_MINUTE,0x50);  //设置分钟
 116   1          _nop_();
 117   1         _nop_();
C51 COMPILER V8.02   MY51PRO                                                               10/04/2008 10:46:24 PAGE 3   

 118   1        Write1302(DS1302_HOUR,0x14);    //设置小时
 119   1          _nop_();
 120   1         _nop_();
 121   1        Write1302(DS1302_DATE,0x28);    //设置日期
 122   1          _nop_();
 123   1         _nop_();
 124   1        Write1302(DS1302_MONTH,0x08);    //设置月
 125   1          _nop_();
 126   1         _nop_();
 127   1        Write1302(DS1302_DAY,0x04);      //设置星期
 128   1          _nop_();
 129   1         _nop_();
 130   1        Write1302(DS1302_YEAR,0x08);      //设置年
 131   1          _nop_();
 132   1         _nop_();
 133   1         Write1302(DS1302_WP,0xFF);         //关写操作允许位
 134   1      
 135   1          // DS1302config();
 136   1          // TI=1;
 137   1          //   while(1);
 138   1            SBUF=0X00;
 139   1           while(1)
 140   1           {
 141   2           //updatanum++;
 142   2           //if(updatanum>=20000)
 143   2         // { Timeupdata();updatanum=0;}
 144   2          //if (sendpcnum==0)
 145   2          //updatanum++;
 146   2          //if(updatanum>=20000)
 147   2          // TI=1;
 148   2           }
 149   1      
 150   1      
 151   1        /*while(1)
 152   1        {
 153   1         if(OK==0xff&&configflag==0x00)
 154   1          {
 155   1           DS1302config();
 156   1           configflag=0xff;
 157   1          }
 158   1          DAint(danum1,danum2);
 159   1          Timeupdata();
 160   1           if (sendpcnum==0)
 161   1           TI=1;
 162   1           }
 163   1         */
 164   1      
 165   1      
 166   1      }
 167          
 168          
 169          
 170          //串口中断程序
 171          void int_s(void) interrupt 4
 172          {
 173   1              ES = 0;       //关闭串行中断
 174   1              if(TI==1)
 175   1               {
 176   2              SBUF=Read1302(DS1302_MONTH);
 177   2              // SBUF=0X55;
 178   2                 /*  
 179   2                 switch(sendpcnum)
C51 COMPILER V8.02   MY51PRO                                                               10/04/2008 10:46:24 PAGE 4   

 180   2                 {
 181   2                  case 0:SBUF=Read1302(DS1302_YEAR);sendpcnum++;break;
 182   2                  case 1:SBUF=Read1302(DS1302_MONTH);sendpcnum++;break;
 183   2                  case 2:SBUF=Read1302(DS1302_DATE);sendpcnum++;break;
 184   2                  case 3:SBUF=Read1302(DS1302_HOUR);sendpcnum++;break;
 185   2                  case 4:SBUF=Read1302(DS1302_MINUTE);sendpcnum++;break;
 186   2                  case 5:SBUF=Read1302(DS1302_SECOND);sendpcnum++;break;
 187   2                  case 6:SBUF=adnum1;sendpcnum++;break;
 188   2                  case 7:SBUF=adnum2;sendpcnum++;break;
 189   2                  case 8:SBUF=adnum3;sendpcnum++;break;
 190   2                  case 9:SBUF=adnum4;sendpcnum++;break;
 191   2                  case 10:sendpcnum=0;         break;
 192   2                 }   */
 193   2                 TI=0;
 194   2      
 195   2               }
 196   1              if(RI==1)
 197   1               {
 198   2                receive_sbuf=SBUF;
 199   2                receiveFnum++;
 200   2                if(receiveFnum==1)
 201   2                {
 202   3                 if(receive_sbuf==0xff)
 203   3                  receivestart=0xff;  //初始化数据开始标志位置位
 204   3                 if(receive_sbuf==0xf0)
 205   3                  receivestart2=0xff;  //调试数据开始标志位置位
 206   3                }
 207   2                if(receivestart==0xff)
 208   2                    switch(receivecount)
 209   2                    {
 210   3                     case 0:_nop_(); receivecount++;break;
 211   3                     case 1: nianinit=receive_sbuf; receivecount++;break;
 212   3                     case 2: yueinit=receive_sbuf; receivecount++;break;
 213   3                     case 3: riinit=receive_sbuf; receivecount++;break;
 214   3                     case 4: shiinit=receive_sbuf; receivecount++;break;
 215   3                     case 5: feninit=receive_sbuf; receivecount++;break;
 216   3                     case 6: miaoinit=receive_sbuf;
 217   3                             OK=0xff;  //接收初始化数据完毕
 218   3                             receivestart=0x00;
 219   3                             receivecount=0;
 220   3                             receiveFnum=0x00;
 221   3                             break;
 222   3                    }
 223   2                  if(receivestart2==0xff)
 224   2                     switch(receivecount2)
 225   2                        {
 226   3                        case 0:_nop_(); receivecount2++;break;
 227   3                        case 1: danum1=receive_sbuf; receivecount2++;break;
 228   3                        case 2: danum2=receive_sbuf; receivecount2++;break;
 229   3                        case 3: danum3=receive_sbuf; receivecount2++;break;
 230   3                        case 4: danum4=receive_sbuf;
 231   3                                receivestart2=0x00;
 232   3                                receivecount2=0;
 233   3                                receiveFnum=0x00;
 234   3                                break;
 235   3                        }
 236   2              RI=0;
 237   2              }
 238   1              ES=1;
 239   1      }
 240          
 241          //外部中断程序
C51 COMPILER V8.02   MY51PRO                                                               10/04/2008 10:46:24 PAGE 5   

 242          void ADint(void) interrupt 0
 243          {
 244   1         // ADCTL=1;
 245   1          EX0=0;
 246   1         if(adnumflag==0x00)
 247   1          {
 248   2           SBUF=P0;
 249   2           adnumflag=0xff;
 250   2          }
 251   1          else
 252   1          {
 253   2           SBUF=(P0&0x0f);
 254   2           adnumflag=0x00;
 255   2          }
 256   1          EX0=1;
 257   1        //ADCTL=0;
 258   1          //ADCTL=0;
 259   1      }
 260          
 261          void DAint(unsigned char dadata_fir,unsigned char dadata_sec)
 262          {
 263   1         P1=dadata_fir;
 264   1         DAW=0;
 265   1         _nop_();
 266   1         _nop_();
 267   1         _nop_();
 268   1         _nop_();
 269   1         P1=dadata_sec;
 270   1         DAW=1;
 271   1         _nop_();
 272   1      }
 273          
 274          void Inputbyte(unsigned char m)         //SPI写入一个字节
 275          {
 276   1          unsigned char i;
 277   1          //ACC = m;
 278   1          for(i=0; i<8; i++)

⌨️ 快捷键说明

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