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

📄 main.lst

📁 C51模拟串口及C语言与汇编语言混合使用技术 有很高的参考价值
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   MAIN                                                                  12/19/2008 09:53:31 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE Main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //本程序为中心机程序,负责轮询室内分机和其它门口机
   2          #include "Main.h"
   3          
   4          void main()
   5          {
   6   1              EA       = 0;     
   7   1              TMOD     = 0x21;
   8   1          SETTIME1;
   9   1              PCON     = 0;
  10   1              SCON     = 0x50; //MOV  SCON,#f0H  11位启用RB8  TB8  ;MOV       SCON,#50H    10位数据
  11   1              T2CON    = 0x00;
  12   1              T2MOD    = 0;
  13   1          SETTIME2;
  14   1              SETTIME0
  15   1              Uart0_Over   = 0;                       //Com0 超时时间(单位毫秒)
  16   1              Uart1_Over   = 0;                       //Com1 超时时间(单位毫秒)
  17   1              CallTallOver = 0;                   //呼叫或通话超时时间(单位时秒)
  18   1              TmpMs       = 0;                        //临时时间(单位毫秒)
  19   1              MsCount     = 0;                        //毫秒计数器
  20   1              tmpdata     = 0;
  21   1          com0_bAck   = 0;
  22   1              UART_RXD    = 1;            //收数据初始化为高
  23   1              EX0  = 0;  //INT0 控制位
  24   1              ET0  = 1;  //T0   控制位
  25   1              ET2  = 1;  //T2   控制位
  26   1              ES   = 1;    //串口 控制位
  27   1              PX0  = 1;   //INT0 优先级
  28   1              PT0  = 0;       //T0   优先级
  29   1              PT2  = 1;   //T2   优先级
  30   1              PS   = 1;       //串口 优先级
  31   1              SM   = 1;   //用作停止位
  32   1              IT0  = 1;       //INT0 为负跳变触发方式 CLR IT0 低电平触发方式
  33   1              TR0  = 1;       //T0   开关
  34   1              TR1  = 1;       //T1   开关
  35   1              TR2  = 0;       //T2   开关
  36   1              EA   = 1;       //总开关
  37   1         
  38   1      //=======================================
  39   1              rec_cmd0     = 0x00;     //初始化Uart0接收命令
  40   1              uart0_status = 2;
  41   1              uart1_status = 3;
  42   1              com0_bAck    = 0;
  43   1              com1_bAck    = 0;
  44   1              bUart0RecSnd = bRecieve;
  45   1      
  46   1          CallTallOver = 0;
  47   1          while(CallTallOver < 2);
  48   1      
  49   1       //****************************************************
  50   1      //向室内机发上电命令
  51   1         /*
  52   1                    Uart0ToUart1Data[0] = 0;  //室内机的第一个地址
  53   1                    Uart0ToUart1Data[1] = 0x89; //命令
  54   1                    Uart0ToUart1Data[2] = 1;  //要应答
  55   1                        bUart0ToUart1 = 1;  //Uart1要发送这条命令标志
C51 COMPILER V7.50   MAIN                                                                  12/19/2008 09:53:31 PAGE 2   

  56   1        */
  57   1      //******************************************************
  58   1      
  59   1          WDT_CONTR=0x3c;  //看门狗定时器初始化
  60   1              while(true)
  61   1              {
  62   2                      WDT_CONTR=0x3c;  //喂狗
  63   2                      CommUart0();     //Uart0
  64   2                      CommUart1();     //Uart1
  65   2              }
  66   1      }
  67          
  68          void CommUart0()  //COM0处理程序
  69          {
  70   1         //uart0_status  01正在向上发送数据 02发送数据完毕 正在接收数据 03接收数据开始 04接收数据完毕 05校验错
  71   1         //呼叫通话时间控制,呼叫或通话超时
  72   1        if(uart0_status == 0x01)  //向门口机回应数据 超时出错
  73   1         {
  74   2                   if(Uart0_Over > OverMs)
  75   2                       {
  76   3                    Uart0_Over   = 0;  //正在等待数据 
  77   3                    bUart0RecSnd = bRecieve; 
  78   3                        rec_bHead0   =0;
  79   3                       }
  80   2                 return;
  81   2         }else if(uart0_status ==0x02 &&  Uart0_Over > OverMs)   //发送数据完成没有接收数据
  82   1          {
  83   2                    Uart0_Over   = 0;  //正在等待数据
  84   2                    bUart0RecSnd = bRecieve;
  85   2                        rec_bHead0   = 0;
  86   2                        return;
  87   2              }else if(uart0_status == 0x03 && Uart0_Over > OverMs)  //正在接收数据,超时处理 长度错误
  88   1         {
  89   2                    //数据复位
  90   2                        rec_cmd0         = 0x00;   //清除收到的命令
  91   2                        uart0_status = 0x02;   //状态复位
  92   2                        rec_bHead0   = 0x00;   //从新接收数据
  93   2                        bUart0RecSnd = bRecieve;
  94   2                        return;
  95   2         }else if(uart0_status ==0x05)//效验错误
  96   1         {//数据复位
  97   2                        rec_cmd0=0x00;
  98   2                        uart0_status = 0x02;
  99   2                        rec_bHead0   = 0x00;   //重新接收数据
 100   2                        bUart0RecSnd = bRecieve;
 101   2                        return;
 102   2              }
 103   1      
 104   1       if(uart0_status != 0x04) //没有收到数据或者没有收完数据
 105   1           return;
 106   1      
 107   1        bUart0RecSnd = bSend;  //发送状态
 108   1      
 109   1      
 110   1        //用上发命令和向门口机返回命令
 111   1          if(rec_cmd0 == LAddr)  //轮询本机命令
 112   1              {
 113   2      
 114   2          }else if(rec_cmd0 == 0xA1) //应答本机命令
 115   1              {
 116   2                    //等待下一个数据包
 117   2                        bUart0Ask = false;
C51 COMPILER V7.50   MAIN                                                                  12/19/2008 09:53:31 PAGE 3   

 118   2                        //不需要重发
 119   2                        bUart0ReSnd  = false;
 120   2           }else if(rec_cmd0==0xB7) 
 121   1               {
 122   2      
 123   2           }else if (uart0_status==0x05) // 接收数据校验错
 124   1               {
 125   2      
 126   2           }else  //接收完成
 127   1               {
 128   2      
 129   2               }
 130   1      
 131   1              if (bTaskUart0) //Uart0本身有请求
 132   1              {
 133   2                        SndUart0[0]  = Uart0Data[0];  //数据长度
 134   2                    SndUart0[1]  = Uart0Data[1];  //命令
 135   2                        SndUart0[2]  = Uart0Data[2];  //本机地址
 136   2                        SndUart0[3]  = Uart0Data[3];  //室内机地址
 137   2                        SndUart0[4]  = Uart0Data[4];  //是否有后继数据
 138   2                    SndUart0[5]  = 0xCC^SndUart0[0]^SndUart0[1]^SndUart0[2]^SndUart0[3]^SndUart0[4];
 139   2                        com0_bAck    = Uart0Data[5];  //是否应答
 140   2                        bTaskUart0   = false;
 141   2                        bUart0ReSnd  = true;                  //如果没有反回,要重发
 142   2                        Uart0Nums    = 0;
 143   2              } else if(bUart1ToUart0)

⌨️ 快捷键说明

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