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

📄 main.lst

📁 此程序是RS485从机通讯
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   MAIN                                                                  12/19/2006 09:36:14 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /****************************************************************************
   2          * File :  main.c                                                            *
   3          * COPYRIGHT BY HUOYAN LTD.COMPANY                                           *
   4          * Version:      V1.0                                                                    *
   5          *                                                                           *
   6          * Created:      15.Aug.2006                                                 *
   7          * Last Change:  17.Aug.2006                                                 *
   8          *                                                                           *
   9          * Author:       huzi                                                        *
  10          *                                                                           *
  11          * Compiler:     KEIL C51 V7.10                                              *
  12          *                                                                           *
  13          * Description:  STC89C52RD+ Firmware for HY502  Serial Reader               *    
  14          * OSC use 11.0592MHz crystal.                                                                                   *
  15          *****************************************************************************/
  16          
  17          /********************************************************************************       
  18          此程序是RS485从机通讯,包含3部分:接收帧程序、发送帧程序及执行命令程序。  
  19          从机通讯地址从地址开关读取4位
  20          由于485的通信规约差别很大,这里只是提供参考,具体请参照自己的项目特点做修改。
  21          ********************************************************************************/
  22          //#include<reg52.h>
  23          #include<main.h>
  24          #include<hy502.h> 
  25          
  26          /*宏定义*/
  27          #define uchar unsigned char
  28          #define uint unsigned int
  29          
  30          // 按键端口定义
  31          sbit P20=P2^0;
  32          sbit P21=P2^1;
  33          sbit P22=P2^2;
  34          sbit P23=P2^3;
  35          
  36          bit ack;        //应答标志
  37          uchar code cStatus1[]="Ok!";
  38          
  39          /*通讯变量定义*/
  40          sbit CTRL485=P3^7;         /*RS485切换控制信号*/          
  41          
  42          #define N 32                  /*通讯缓存区长度*/
  43          uchar idata Serial_buf[N];    /*定义通讯缓存区*/
  44          
  45          /*数据结构:地址域A0A1A2A3 4个,命令字节1个,长度字节1个,数据区(标识符2个,数据)*/
  46          
  47          /*主程序变量定义*/        
  48          uchar data Command_status1=0x00; /*程序运行状态字节*/
  49          
  50          /********************************************************************
  51          延时函数
  52          原型:void Delay(uchar);
  53          功能:延时1ms*i
  54          入口参数: i是设定延时时间
  55          出口参数:无
C51 COMPILER V8.02   MAIN                                                                  12/19/2006 09:36:14 PAGE 2   

  56          ********************************************************************/
  57          void Delay(uchar i)
  58          {
  59   1              uint j;
  60   1              for(;i>0;i--)
  61   1              for(j=0;j<700;j++);
  62   1      }
  63          
  64          
  65          /********************************************************************
  66          蜂鸣器函数
  67          原型:void beep(uchar n);
  68          功能:设定响的次数
  69          入口参数:n
  70          出口参数:无
  71          ********************************************************************/
  72          void beep(uchar n)
  73          {
  74   1              uchar i;
  75   1              for(i=0;i<n;i++)
  76   1              {
  77   2                  BUZ=0;          //产生周期为1s的方波
  78   2                  Delay(500);     //delay 0.5s
  79   2                      BUZ=1;
  80   2                      Delay(500);
  81   2                      BUZ=0;
  82   2              }
  83   1      }
  84          /********************************************************************
  85          LED闪烁函数
  86          原型:void splash(uchar n);
  87          功能:设定LED闪烁的次数
  88          入口参数:n
  89          出口参数:无
  90          ********************************************************************/
  91          void splash(uchar n)
  92          {
  93   1              uchar i;
  94   1      
  95   1              for(i=0;i<n;i++)
  96   1              {
  97   2                      LED_YELLOW=1;
  98   2                      Delay(500);     //delay 0.5s
  99   2                      LED_YELLOW=0;
 100   2                      Delay(500);
 101   2                      LED_YELLOW=1;
 102   2              }
 103   1      }
 104          /********************************************************************
 105          CPU各个部件的初始化函数
 106          原型:void InitializeSystem();
 107          功能:初始化系统各个部件
 108          入口参数:无
 109          出口参数:无
 110          ********************************************************************/
 111          void InitializeSystem()
 112          {
 113   1              ET2 = 0;
 114   1              T2CON = 0x04;
 115   1          PCON&=0x3f; /*UART设置工作方式3,11位数据*/
 116   1          SCON=0xd0;
 117   1          TMOD = 0x21;        //TMOD = 0x22;
C51 COMPILER V8.02   MAIN                                                                  12/19/2006 09:36:14 PAGE 3   

 118   1      
 119   1              TH1   = BAUD_19200;  //默认波特率
 120   1              TL1   = TH1;
 121   1              TR1   = TRUE;             // 波特率发生器
 122   1      
 123   1              TH0 = 0xDC;
 124   1          TL0 = 0x00;
 125   1          TR0 = 1;
 126   1          ET0=1;
 127   1      
 128   1              ET1=0;
 129   1              EA=1;
 130   1              EX0=1;
 131   1              IT0 = 1;
 132   1              TR2=0;
 133   1       
 134   1              g_bReceCommandOk=0;        
 135   1              Delay(100); /*延时100ms,以稳定CPU*/
 136   1                                                      //喇叭和指示灯测试
 137   1              splash(1);
 138   1              beep(1);
 139   1      
 140   1              CTRL485=1; /*485通讯为接收状态*/         
 141   1              ES = TRUE;
 142   1      }
 143          
 144          /********************************************************************
 145          接收一个字节通讯函数
 146          原型:uchar RecByte();
 147          功能:接收一个字节通讯
 148          入口参数:无
 149          出口参数:返回接收值
 150          ********************************************************************/
 151          uchar RecByte()
 152          {
 153   1              RI=0;
 154   1              while(!RI);
 155   1              RI=0;
 156   1              ACC=SBUF;
 157   1              if(P!=RB8)      /*偶校验正确吗?*/
 158   1              {
 159   2              SP--;SP--;CY=0;return CY; /*错误返回*/
 160   2              }
 161   1              return (ACC); /*接收一个字节,并进行偶校验*/
 162   1      }
 163          
 164          /********************************************************************
 165          接收一帧通讯函数
 166          原型:void RecFrame(uchar *s);
 167          功能:接收一帧通讯
 168          入口参数:接收存取地址指针
 169          出口参数:接收正确标志,1为接收正确
 170          ********************************************************************/
 171          bit RecFrame(uchar *s)
 172          {
 173   1              uchar CS=0x00,Serial_data;
 174   1              char i,j;
 175   1      
 176   1              RI=0;
 177   1              Serial_data=SBUF; /*接收第一字节*/
 178   1              while(Serial_data!=0xfe)
 179   1              return 0; /*不是前导字节*/
C51 COMPILER V8.02   MAIN                                                                  12/19/2006 09:36:14 PAGE 4   

 180   1              do
 181   1              Serial_data=RecByte(); /*是前导字节,继续查询*/  
 182   1               
 183   1              while(Serial_data==0xfe); /*是前导字节吗?*/
 184   1              if(Serial_data!=0x68) /*是帧头吗?*/
 185   1              return 0;
 186   1              CS+=0x68;
 187   1              for(i=0;i<=3;i++) /*接收通讯地址*/
 188   1              {

⌨️ 快捷键说明

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