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

📄 main.lst

📁 keil51环境开发
💻 LST
字号:
C51 COMPILER V8.05a   MAIN                                                                 08/19/2008 15:20:43 PAGE 1   


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

line level    source

   1          #include "main.h"
   2          /******************************
   3          微控电子 www.mcuc.cn
   4          modbus RTU 的C51程序 
   5          单片机89S52
   6          通信波特率 9600 8位数据 1位停止位 偶校验 485通位接口
   7          单片机控制板地址 localAddr(变量)
   8          通信可设置数据的地址:
   9          字地址 0 - 255 (只取16位的低8位)
  10          位地址 0 - 255 (只取16位的低8位)
  11          *******************************/
  12          uint8   sendBuf[16],receBuf[16]; //发送接收缓冲区
  13          uint16  a;
  14          uint8   checkoutError;  // ==2 偶校验错  
  15          uint8   receTimeOut;            //接收超时
  16          uint8   c10ms;                  //10ms 计时
  17          bit             b1ms,bt1ms,b10ms,bt10ms,b100ms,bt100ms; //定时标志位
  18          
  19          // 串行中断程序
  20          void commIntProc() interrupt 4
  21            {
  22   1              if(TI)
  23   1                {
  24   2                      TI = 0; 
  25   2                      if(sendPosi < sendCount) 
  26   2                        {
  27   3                              sendPosi++;
  28   3                              //ACC = sendBuf[sendPosi];
  29   3                              //TB8 = P;      //加上校验位
  30   3                              SBUF = sendBuf[sendPosi];
  31   3                        }
  32   2                      else
  33   2                        {
  34   3                              //b485Send = 0;    //发送完后将485置于接收状态
  35   3                              receCount = 0;   //清接收地址偏移寄存器
  36   3                              checkoutError = 0;
  37   3                        }
  38   2                }
  39   1              else if(RI)
  40   1                {
  41   2                      RI = 0;
  42   2                      receTimeOut = 10;    //通讯超时值
  43   2                      receBuf[receCount] = SBUF;
  44   2                      //ACC = receBuf[receCount];
  45   2                      //if(P != RB8)
  46   2                              //checkoutError = 2;    //偶校验出错
  47   2                      receCount++;          //接收地址偏移寄存器加1
  48   2                      receCount &= 0x0f;    //最多一次只能接收16个字节
  49   2                }
  50   1        }
  51          
  52          //定时器0 1ms 中断
  53          void timer0IntProc() interrupt 1
  54          {
  55   1              TL0 = TIMER_LOW; 
C51 COMPILER V8.05a   MAIN                                                                 08/19/2008 15:20:43 PAGE 2   

  56   1          TH0 = TIMER_HIGHT;
  57   1              bt1ms = 1;
  58   1          c10ms++;
  59   1          if(c10ms >= 10) 
  60   1          {
  61   2              c10ms = 0;      //10ms计时器清零
  62   2              bt10ms = 1;
  63   2          }
  64   1      }
  65          
  66          //外部中断0
  67          void intEx0Proc(void) interrupt 0
  68          {
  69   1      
  70   1      }
  71          //定时处理
  72          void timeProc(void)
  73          {
  74   1              static uint8 c200ms;
  75   1              b1ms = 0;
  76   1              b10ms = 0;
  77   1              b100ms = 0;
  78   1      
  79   1              if(bt1ms)
  80   1              {
  81   2                      bt1ms = 0;
  82   2                      b1ms = 1;
  83   2      
  84   2              if(receTimeOut>0)
  85   2              {
  86   3                  receTimeOut--;
  87   3                  if(receTimeOut==0 && receCount>0)   //判断通讯接收是否超时
  88   3                  {
  89   4                      b485Send = 0;       //将485置为接收状态
  90   4                      receCount = 0;      //将接收地址偏移寄存器清零
  91   4                                      checkoutError = 0;
  92   4                  }
  93   3              }
  94   2              }
  95   1              
  96   1              if(bt100ms)
  97   1              {
  98   2                      bt100ms = 0;
  99   2                      b100ms = 1;
 100   2              }
 101   1          if(bt10ms)      //判断中断10ms标志位是否1
 102   1          {
 103   2              bt10ms = 0;     //清中断10ms标志位
 104   2                      b10ms = 1;
 105   2      
 106   2              c200ms++;                   //200ms计时器加1
 107   2              if(c200ms >= 100)            //判断是否计时到200ms
 108   2              {
 109   3                  c200ms = 0;             //清200ms计时器
 110   3                  bRunLED = ~bRunLED; //取反运行指示灯          
 111   3                  a++;
 112   3              }
 113   2          }
 114   1      }
 115          
 116          //初始化中断
 117          void initInt(void)
C51 COMPILER V8.05a   MAIN                                                                 08/19/2008 15:20:43 PAGE 3   

 118          {
 119   1          //WDT_CONTR=0x34;//启动看门狗
 120   1              SCON = 0x50; //串口方式1,允许接收
 121   1              
 122   1          TMOD=0x21;//定时/计数器为16位、1为8位自动重装模式
 123   1              TH0 = TIMER_HIGHT;
 124   1              TL0 = TIMER_LOW;
 125   1              PCON=0x00;
 126   1              TH1=0xFD; //11.0592M.19200
 127   1              TL1=0xFD;
 128   1              TCON=0x55;//外中断0、1均为下降沿触发
 129   1              IE=0xF3;//允许定时器0,外中断0中断,并打开总中断        
 130   1      }
 131          
 132          //初始化
 133          void initProg(void)
 134          {       
 135   1              initInt();
 136   1              //b485Send = 0;
 137   1      }
 138          
 139          void main(void)
 140          {
 141   1              initProg();
 142   1      
 143   1              while(1)
 144   1              {
 145   2                      timeProc();
 146   2                      checkComm0Modbus();
 147   2              }
 148   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    216    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     38    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      6    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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