main.lst

来自「3、LCD12864不能显示或不能清楚显示: 1)重新按住复位键和KEY A 2」· LST 代码 · 共 187 行

LST
187
字号
C51 COMPILER V7.06   MAIN                                                                  11/18/2006 09:36:16 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: E:\Program Files\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*****************************************************************/ 
   2          /*                                                               */                                       
             -                         
   3          /*名称:                串口对ds1302读写程序                     */                                       
             -                                                                                                                        
             -            
   4          /*功能:           读写DS1302,通过串口返回给电脑                */                                       
             -             
   5          /*难度等级:                   中                                */                                       
             -                              
   6          /* 作者:                  zengrenliang                          */
   7          /* 版权:           http://www.51kaifa.com                       */
   8          /*编写日期:        2006.05.21                                   */                                       
             -                                                                                                                        
             -                                              
   9          /*****************************************************************/
  10          #include <reg52.h>
  11          #include "ds1302.h"
  12          #define uchar  unsigned char
  13          
  14          bit receive;//接收标志
  15          bit re_finish;//接收一串字符完成标志
  16          sbit LED = P1^3;//LED指示灯
  17          
  18          uchar  i,buffer[8],str[8];//串口缓冲区
  19          uchar  sbuffer,number;//发送字符个数
  20          uchar  sendFINS ;//发送完成标志
  21          uchar  copyOK , cmd_numb ;//发送缓冲区填充完成
  22          
  23          /*********************************系统初始化*****************************/
  24          
  25          void initial()
  26          {  unsigned char j;
  27   1        
  28   1         SCON=0x50;           //串口工作方式1,允许接收
  29   1         PCON=0x80;           //波特率翻倍
  30   1         TCON=0;              
  31   1         TMOD=0x26;           //T1用于串口波特率控制
  32   1         TL1=0xfa;            //初始化T1,波特率为9600(晶振11.0592M)
  33   1         TH1=0xfa;                    
  34   1         TR1=1;               //开定时器
  35   1         EA=1;                //开总中断
  36   1         ES=1;                //开串口中断
  37   1         copyOK = 0;         //缓冲区准备好标志清零
  38   1         receive = 0;        //接收标志清零
  39   1         re_finish = 0;      //接受完成标志清零
  40   1         cmd_numb = 0;       //接受计数器清零
  41   1      
  42   1        for(j=0; j<8; j++){   //串口缓冲区清空
  43   2            buffer[i] = 0xff;  //table[18]为空显示 
  44   2            str[i] = 0xff;
  45   2          }   
  46   1       }                        
  47          
  48          
C51 COMPILER V7.06   MAIN                                                                  11/18/2006 09:36:16 PAGE 2   

  49          /*************************************向串口发送字符串****************************/
  50          
  51          
  52          void  send(void)
  53           { 
  54   1         
  55   1         if(copyOK)  //串口准备好且缓冲区准备好
  56   1          { 
  57   2           i = 0;                 
  58   2           REN = 0;               //发送过程中禁止接收数据
  59   2           copyOK = 0;            //清缓冲区准备好标志
  60   2           SBUF = str[i++];      //发送字符串首字符
  61   2           number = 7;            //置发送计数器
  62   2            }
  63   1         else
  64   1             return;              //没准备好则返回
  65   1        }
  66          
  67          
  68          /**************************************串口中断响应*********************************/
  69          
  70          void serial(void) interrupt 4
  71          { 
  72   1        LED = ~LED;//LED闪烁
  73   1        if(RI)//为接收中断
  74   1           {      
  75   2            RI=0;                                         //清接收中断标志
  76   2            sbuffer = SBUF;                               //读取串口缓冲区数据
  77   2      
  78   2            if((sbuffer == 0x55) && (receive == 0))       //判断是否为数据头 ,是数据头则准备接收
  79   2             {     
  80   3                 receive = 1;     //开始接收标志                         
  81   3                 cmd_numb = 0;    //清接收计数器
  82   3                 re_finish = 0;   //清接收完成标志
  83   3                }
  84   2            else if(sbuffer == 0xaa)   //判断数据尾     
  85   2              { 
  86   3                re_finish = 1;         //置接收完成标志      
  87   3                receive =0;            //清接收标志
  88   3                }
  89   2            else if(receive){     //判断当前是否处于接收状态
  90   3                         
  91   3                buffer[cmd_numb++] = sbuffer;  //当前字符送缓冲区
  92   3               }      
  93   2            else                    //无效命令则返回
  94   2               return;
  95   2             }
  96   1          else{ 
  97   2           TI=0;                   //为单个字符发送完中断
  98   2           if(!number)             //字符串发送完
  99   2            { REN = 1;             //允许接收
 100   3             }
 101   2           else{                  //字符串未发送完
 102   3              SBUF = str[i++];   //发送下一字符
 103   3                      number--;           //发送字符数减一
 104   3             }             
 105   2           }
 106   1         }
 107          
 108          /*************************************执行PC端命令*******************************/
 109          void DispatchCmd(void)
 110           { uchar p;
C51 COMPILER V7.06   MAIN                                                                  11/18/2006 09:36:16 PAGE 3   

 111   1         switch(buffer[0])                             
 112   1          {                                                                                   
 113   2             case 1:       //设置DS1302
 114   2                v_Set1302(&buffer[1]);
 115   2                for(p=0;p<8;p++)
 116   2                 str[p] = 0x55;
 117   2                copyOK = 1;
 118   2                send();
 119   2                break;
 120   2      
 121   2             case 2:       //读取DS1302
 122   2                for(p=0;p<8;p++)
 123   2                 str[p] = 0x00;
 124   2                v_Get1302(&str);
 125   2                copyOK = 1;
 126   2                send();
 127   2                break;
 128   2      
 129   2            default:
 130   2                return;
 131   2           }
 132   1        }
 133          
 134          /***************************************主函数************************************/
 135          main()
 136          { 
 137   1        P0 = 0xff;
 138   1        P2 = 0xff;
 139   1        P1 = 0xff;
 140   1        initial();
 141   1      
 142   1        while(1){//主循环
 143   2      
 144   2          if(re_finish){//接收完成
 145   3            re_finish = 0;//清接收完标志
 146   3            copyOK = 0;//清填充完标志
 147   3            DispatchCmd();//执行命令
 148   3          }
 149   2         }
 150   1       }
 151          
 152          /**************************************结束***************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    269    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     22       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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