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

📄 rs232_com.lst

📁 CAN现场总线.rar
💻 LST
字号:
C51 COMPILER V6.12  RS232_COM                                                              09/29/2009 14:27:49 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE RS232_COM
OBJECT MODULE PLACED IN .\RS232_com.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\RS232_com.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
   3          //描述:
   4          //      该程序INT0按键程序+显示程序+RS232通讯                                  &
   5          //      按键计数显示在数码管1-2(从右至左),并且发送该数据。                  &
   6          //      接收到的数据在数码管3-4上显示。                                        &
   7          //      通讯波特率:19200                                                       &
   8          //      每次收发一个字节                                                       &
   9          
  10          //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  11          //【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                   &
  12          //【声明】 作者: PIAE小组                                                      &
  13          
  14          #include <reg52.h>
  15          #include <intrins.h>
  16          #include <RS232_def.h>
  17          
  18          
  19          void INT0_Counter( void ) interrupt 0 using 1
  20          {//INT0按键为计数按键
  21   1          EA = 0;
  22   1          Show_TX_Data++; //计数单元加1
  23   1          TXD_flag = 1;//置要发送标志位
  24   1          EA = 1;
  25   1      }
  26          
  27          
  28          void RS232_RXD( void ) interrupt 4   using 1
  29          {//接收数据函数,在中断服务程序中调用
  30   1          EA = 0;//关闭所有中断
  31   1          ES = 0;//关闭串口
  32   1          if(RI==1)
  33   1          {
  34   2              RI = 0;
  35   2              RX_data = SBUF;
  36   2              RXD_flag = 1;//置接收到数据标志
  37   2          }
  38   1          _nop_();
  39   1          ES = 1;//打开串口
  40   1          EA = 1;//打开中断
  41   1      }
  42          //*******************************************************
  43          
  44          void main(void)
  45          {
  46   1          CPU_init();
  47   1          _nop_();
  48   1          while(1)
  49   1          {
  50   2              NOPS;
  51   2      //////////////////////// 接收处理程序/////////////////////////////////
  52   2              if( RXD_flag )
  53   2              {
  54   3                  EA = 0;//关闭CPU中断
  55   3                  LED_RED = !LED_RED;//指示灯状态变化
C51 COMPILER V6.12  RS232_COM                                                              09/29/2009 14:27:49 PAGE 2   

  56   3                  RXD_flag = 0;//清除标志
  57   3                  Show_RX_Data = RX_data;//接收对方发送的数据
  58   3                  EA = 1;
  59   3              }
  60   2      ///////////////////////发送处理程序/////////////////////////////////
  61   2              if( TXD_flag )
  62   2              {
  63   3                  EA = 0;
  64   3                  LED_GRE = !LED_GRE;//指示灯状态变化
  65   3                  TXD_flag = 0;
  66   3                  TX_data  = Show_TX_Data;//给发送的数据赋值
  67   3                  RS232_TXD();
  68   3                  _nop_();
  69   3                  EA = 1;
  70   3              }
  71   2      ///////////////////////数码管显示程序/////////////////////////////////
  72   2              led_seg7(1,Show_TX_Data);
  73   2              led_seg7(3,Show_RX_Data);
  74   2      ///////////////////////数码管显示程序/////////////////////////////////
  75   2          }//while 结束
  76   1      }//main结束
  77          
  78          
  79          void Delay(uchar delay_time)
  80          {//延时程序
  81   1          while(delay_time--)
  82   1          {}
  83   1      }
  84          
  85          
  86          void CPU_init(void)
  87          {//初始化CPU
  88   1          SCON = 0x50; //串口方式1
  89   1          PCON = 0x80; //串口波特率加速
  90   1          TMOD = 0x21;
  91   1          TH1=0xFD; //19200bps
  92   1          TL1=0xFD;
  93   1          TR1 = 1;
  94   1          TI = 0;
  95   1          RI = 0;
  96   1          PS = 1;      //串口中断的优先级设为最高
  97   1      
  98   1          IT0 = 1;//外部中断0负边沿触发
  99   1          EX0 = 1;//打开外部中断0
 100   1      
 101   1          ES  = 1;//打开串口中断
 102   1          EA = 1; //打开总中断
 103   1          SJA1000_CS = 1;//片选无效
 104   1      }
 105          
 106          void RS232_TXD( void )
 107          {
 108   1          EA = 0;//关闭所有中断
 109   1          ES = 0;//关闭串口中断,采用查询发送方式
 110   1          TI = 1;
 111   1          while(TI)
 112   1          {
 113   2              TI = 0;//一字节发送完后清除标志位
 114   2              SBUF = TX_data;
 115   2              while(!TI)
 116   2              {}//等待发送
 117   2              TI = 0;
C51 COMPILER V6.12  RS232_COM                                                              09/29/2009 14:27:49 PAGE 3   

 118   2          }
 119   1          _nop_();
 120   1          ES = 1;//打开串口中断
 121   1          EA = 1;//打开中断
 122   1      }
 123          
 124          void led_seg7(uchar from,uchar number)  //from(1_4):数码管显示起始位置(从右到左),number:显示的数
 125          {
 126   1          uchar digit,temp_l;
 127   1          uchar temp_h=0x7f;
 128   1          temp_h = _cror_(temp_h,from-1);   //确定从哪一位开始显示,即确定高四位
 129   1          temp_h = temp_h & 0xf0;           //取高四位
 130   1          temp_l = P2 & 0x0f;               //取P2的低四位
 131   1          P2 = temp_h | temp_l;             //设定P2口
 132   1      
 133   1          if(number==0)
 134   1          {
 135   2              P0 = led[0];
 136   2              Delay(5);
 137   2              P0 = 0xff;
 138   2          }
 139   1          else
 140   1          {
 141   2              while(number)
 142   2      	{
 143   3                  digit = number%10 ;
 144   3      	    number /= 10;
 145   3                  P0 = led[digit] ;
 146   3      	    Delay(5);
 147   3                  temp_h = P2 & 0xf0;               //取P2的高四位
 148   3                  temp_h = temp_h | 0x0f;           //拼装 temp_h,进行位选
 149   3      	    temp_h = _cror_(temp_h,1);
 150   3      	    temp_h = temp_h & 0xf0;           //取高四位
 151   3                  temp_l = P2 & 0x0f;               //取P2的低四位
 152   3                  P0 = 0xff;
 153   3                  P2 = temp_h | temp_l;             //设定P2口
 154   3              }//while结束
 155   2          }//else结束
 156   1      
 157   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    254    ----
   CONSTANT SIZE    =     11    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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