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

📄 ddd.lst

📁 STC89C52单片机串口通信程下位机595驱动数码管显示
💻 LST
字号:
C51 COMPILER V8.02   DDD                                                                   04/16/2009 01:17:07 PAGE 1   


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

line level    source

   1          
   2          //串口发送单片机通信程序
   3          //发送格式为:a 1 2 3 4 5 6 7 8 
   4          //程序功能:带起始位识别的RS232与单片机通信程序
   5          #include <reg51.h> 
   6          #define COUNT 10               // 定义接收缓冲区大小 
   7          #define duanma P0 
   8          
   9          unsigned char buffer[COUNT];    //定义接收缓冲区 
  10          unsigned char point;            //定义接收数据个数指示变量 
  11          void UART_init();               //串口初始化函数 
  12          void COM_send(void);            //串口接收函数 
  13          unsigned char CLU_checkdata(void);//计算校验位函数 
  14          void dis();
  15          void DIS_change();
  16          
  17          
  18          sbit aa=P2^0;
  19          sbit bb=P2^1;
  20          sbit cc=P2^2;
  21          sbit dd=P2^3;
  22          sbit ee=P2^4;
  23          sbit ff=P2^5;
  24          sbit gg=P2^6;
  25          sbit hh=P2^7;
  26          
  27          unsigned char DIS_one=0,DIS_two=0,DIS_thr=0,DIS_for=0,DIS_fiv=0,DIS_six=0,DIS_sev=0,DIS_eig=0;
  28          
  29          unsigned char data disp_code[11]={0xc0,0xf9,0xa4,0xb0,  // 0, 1, 2, 3
  30                                                          0x99,0x92,0x82,0xf8,0x80,0x90,0xff};// 4, 5, 6, 7, 8, 9, off
  31          //-------------------------------------------------------------------------------------------------- 
  32          // 函数名称: 延时函数 
  33          // 函数功能: 动态显示延时 
  34          //-------------------------------------------------------------------------------------------------- 
  35          void delayms(unsigned int f)
  36          {
  37   1          unsigned int i,j;
  38   1          for(i=0;i<f;i++)
  39   1          for(j=0;j<12;j++);
  40   1      }
  41          //-------------------------------------------------------------------------------------------------- 
  42          // 函数名称: UART_init()串口初始化函数 
  43          // 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s 
  44          //            串口接收中断允许,发送中断禁止 
  45          //-------------------------------------------------------------------------------------------------- 
  46          void UART_init() 
  47          { 
  48   1                           //初始化串行口和波特率发生器  
  49   1        SCON =0x50;          //选择串口工作方式,打开接收允许 
  50   1        TMOD =0x20;          //定时器1工作在方式2,定时器0工作在方式1 
  51   1        TH1 =0xfd;           //实现波特率9600(系统时钟11.0592MHZ)
  52   1        TR1 =1;              //启动定时器T1 
  53   1        ET1 =1;  
  54   1        ES=1;                //允许串行口中断 
  55   1        PS=1;                //设计串行口中断优先级 
C51 COMPILER V8.02   DDD                                                                   04/16/2009 01:17:07 PAGE 2   

  56   1        EA =1;               //单片机中断允许 
  57   1      } 
  58          //-------------------------------------------------------------------------------------------------- 
  59          // 函数名称: com_interrup()串口接收中断处理函数 
  60          // 函数功能: 接收包括起始位’S’在内的十位数据到数据缓冲区 
  61          //-------------------------------------------------------------------------------------------------- 
  62          com_interrupt(void) interrupt 4 using 3 
  63          { 
  64   1        unsigned char RECEIVR_buffer; 
  65   1        if(RI)                                  //处理接收中断 
  66   1        { 
  67   2            RI=0;                               //清除中断标志位 
  68   2              
  69   2           RECEIVR_buffer=SBUF;                 //接收串口数据 
  70   2                 
  71   2           if(point==0)                         //如果还没有接收到起始位 
  72   2              { 
  73   3              if(RECEIVR_buffer==0x0a)          //判断是否起始标志位 
  74   3              
  75   3                        point++;                                            //是准备接收下一位
  76   3              
  77   3              else 
  78   3                   point=0;                     //不是,继续等待起始位 
  79   3              }  
  80   2           else if(point>0&&point<10)           //判断是否接收够十位数据 
  81   2          { 
  82   3                 buffer[point++]=RECEIVR_buffer;    //不够,把接收到的数据放入接收缓存区
  83   3               }
  84   2          else point=0;                         //缓冲区已满,清除缓存区内数据重新接收   
  85   2        } 
  86   1      } 
  87          //-------------------------------------------------------------------------------------------------- 
  88          // 函数名称: 显示缓冲区转换 
  89          // 函数功能: 转换显示缓存 
  90          //-------------------------------------------------------------------------------------------------- 
  91          void DIS_change()
  92           {
  93   1         DIS_one=buffer[1];
  94   1         DIS_two=buffer[2];
  95   1         DIS_thr=buffer[3];
  96   1         DIS_for=buffer[4];
  97   1         DIS_fiv=buffer[5];
  98   1         DIS_six=buffer[6];
  99   1         DIS_sev=buffer[7];
 100   1         DIS_eig=buffer[8];
 101   1       }
 102          //-------------------------------------------------------------------------------------------------- 
 103          // 函数名称: 显示函数 
 104          // 函数功能: 动态显示八位 
 105          //-------------------------------------------------------------------------------------------------- 
 106          void dis(void)
 107          {
 108   1       {
 109   2          aa=0;
 110   2          duanma=disp_code[DIS_one];
 111   2              delayms(2);
 112   2              duanma=disp_code[10];
 113   2              aa=1;
 114   2      
 115   2              bb=0;
 116   2          duanma=disp_code[DIS_two];
 117   2              delayms(2);
C51 COMPILER V8.02   DDD                                                                   04/16/2009 01:17:07 PAGE 3   

 118   2              duanma=disp_code[10];
 119   2              bb=1;     
 120   2              
 121   2              cc=0;
 122   2          duanma=disp_code[DIS_thr];
 123   2              delayms(2);
 124   2              duanma=disp_code[10];
 125   2              cc=1;   
 126   2      
 127   2              dd=0;
 128   2          duanma=disp_code[DIS_for];
 129   2              delayms(2);
 130   2              duanma=disp_code[10];
 131   2              dd=1;
 132   2      
 133   2              ee=0;
 134   2          duanma=disp_code[DIS_fiv];
 135   2              delayms(2);
 136   2              duanma=disp_code[10];
 137   2              ee=1;     
 138   2              
 139   2              ff=0;
 140   2          duanma=disp_code[DIS_six];
 141   2              delayms(2);
 142   2              duanma=disp_code[10];
 143   2              ff=1;   
 144   2      
 145   2              gg=0;
 146   2          duanma=disp_code[DIS_sev];
 147   2              delayms(2);
 148   2              duanma=disp_code[10];
 149   2              gg=1;
 150   2      
 151   2              hh=0;
 152   2          duanma=disp_code[DIS_eig];
 153   2              delayms(2);
 154   2              duanma=disp_code[10];
 155   2              hh=1;
 156   2        }
 157   1      }
 158          
 159          //-------------------------------------------------------------------------------------------------- 
 160          // 函数名称: 主函数 
 161          // 函数功能: 调度个子函数,完成通信过程 
 162          //-------------------------------------------------------------------------------------------------- 
 163           void main(void) 
 164          { 
 165   1         UART_init();                       //初始化串口
 166   1       do 
 167   1       { 
 168   2          DIS_change();
 169   2              dis(); 
 170   2        } 
 171   1        while(1);
 172   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    273    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V8.02   DDD                                                                   04/16/2009 01:17:07 PAGE 4   

   DATA SIZE        =     30    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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