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

📄 uart.lst

📁 C8051F120与串口、并口、D12、USB、LCD应用
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.01  UART                                                                   06/30/2007 11:42:50 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN UART.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE UART.c LARGE BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <string.h>
   2          #include <stdio.h>
   3          #include "uart.h"
   4          #include "menu.h"
   5          #include "Lcd.h"
   6          #include "system.h"
   7                  
   8          #define MAXLEN 2000                             //Uart接收数据区
   9          char xdata Mydata[MAXLEN]; 
  10          
  11          char *USP;                                              //Uart发送字符串指针
  12          char UBUSY;                                             //Uart发送忙标志位
  13          char xdata *URP=Mydata;                 //Uart接收指针,指向数据接受区
  14          
  15          ////////////////////////////////////////////////////////////////////////////////////////////////
  16          
  17          //串口模块参数设置菜单
  18          char code *UartConfigMenu={"(10,2)串口传输实验参数设置,(6,60)波特率设置: ,1200,2400,4800,9600,\
  19          19200,28800,57600,115200,(6,90)显示方式: ,字符,十六进制,(6,120)数据返回: ,打开,关闭,"};
  20          
  21          //串口模块参数默认值
  22          unsigned char UartParaList[]={3,0,0};
  23          
  24          ////////////////////////////////////////////////////////////////////////////////////////////////
  25          void Hexprintf(unsigned char  x,unsigned char  y, char *ptr)    //以十六进制显示*ptr
  26          {
  27   1              unsigned char temp;
  28   1              unsigned int low,high;
  29   1              char buf[10];
  30   1              temp=*ptr;
  31   1              high=temp/16;
  32   1              low=temp%16;
  33   1              sprintf(buf,"%X%X%s",high,low," \0");
  34   1              tprintf(x,y,buf);
  35   1              if (X>=39)                                      
  36   1              {
  37   2                      X=0;
  38   2                      Y+=16;
  39   2              }
  40   1      }
  41                   
  42          void UartSend(char *ptr)                //通过UART发送指定字符串
  43          {
  44   1              char SFRPAGE_SAVE;
  45   1              SFRPAGE_SAVE=SFRPAGE;
  46   1              SFRPAGE=UART0_PAGE;
  47   1              USP=ptr;
  48   1              TI0=1;
  49   1              SFRPAGE=SFRPAGE_SAVE;
  50   1      }
  51          
  52          void inter() interrupt 4
  53          {
  54   1              if (TI0)                                        //发送USP指向字符
  55   1              {
C51 COMPILER V7.01  UART                                                                   06/30/2007 11:42:50 PAGE 2   

  56   2                      TI0 = 0;
  57   2                      if(*USP!='\0')
  58   2                      {
  59   3                              SBUF0 = *USP;
  60   3                              USP++;
  61   3                      }
  62   2                      else
  63   2                      {
  64   3                              UBUSY=0;
  65   3                      }
  66   2              }
  67   1              if (RI0)                                        //将数据保存到数据接收区
  68   1              {
  69   2                      RI0 = 0;
  70   2                      if( URP-Mydata < MAXLEN-1 )
  71   2                      {
  72   3                      *URP = SBUF0;
  73   3                              URP++;
  74   3                      }
  75   2              }
  76   1      }
  77          
  78          void uart_port_ini(void)
  79          {
  80   1          SFRPAGE = 0x0F;
  81   1          XBR0 |= 0x04;                       //Uart引出到管脚:Tx到P0.0;Rx到P0.1
  82   1          XBR2 |= 0x40;                                       //弱上拉全局允许,交叉开关使能
  83   1          P0MDOUT |= 0x01;
  84   1              IE |= 0x90;
  85   1      }
  86          
  87          void uart_ini(unsigned char Sel_Baud)
  88          {
  89   1              SFRPAGE = 0x00;
  90   1          SSTA0 = 0x10;                                       //选择T1作为时钟源,禁止波特率2分频
  91   1          SCON0 = 0x50;                                       //Uart工作在方式1:8位可变波特率.忽略停止位.接受允许.
  92   1          CKCON = 0x00;                                       //sys/12 -> T1
  93   1          TMOD |= 0x20;                                       //T1工作方式:自动再装入8位定时器
  94   1              //波特率设置
  95   1              switch (Sel_Baud)
  96   1              {                                                               // 波特率设置=256-22.1184M/12/16/Baud
  97   2                      case 0: TH1 = 160;      break;  //      1200            
  98   2                      case 1: TH1 = 208;      break;  //      2400
  99   2                      case 2: TH1 = 232;      break;  //      4800
 100   2                      case 3: TH1 = 244;      break;  //      9600
 101   2                      case 4: TH1 = 250;      break;  //      19200
 102   2                      case 5: TH1 = 252;      break;  //      28800
 103   2                      case 6: TH1 = 254;      break;  //      57660
 104   2                      case 7: TH1 = 255;      break;  //      115200
 105   2              }                               
 106   1              TL1 = TH1;
 107   1              TR1 = 1;
 108   1      }
 109          
 110          //串口模块函数
 111          void Uart()
 112          {               
 113   1              char *p[20];                            //记录每页显示的起始地址,支持最多20页显示
 114   1              unsigned char currentp;                         //记录当前页号
 115   1              char xdata *DSP;                                        //显示指针    
 116   1              unsigned char Disflag;                  //显示接收数据标志位  
 117   1              unsigned int RCounter;                          //记录接收字节数
C51 COMPILER V7.01  UART                                                                   06/30/2007 11:42:50 PAGE 3   

 118   1              char SFRPAGE_SAVE;                                      //保存SFR值
 119   1      
 120   1              if(MenuActive(UartConfigMenu, UartParaList)==0)         //放弃菜单设置,直接退出
 121   1              return ;
 122   1              uart_port_ini();
 123   1              uart_ini(UartParaList[0]);
 124   1              UartSend("C8051f124 UART ready!!");
 125   1              
 126   1              SFRPAGE=0x0F;   
 127   1              Udprintf(0,208,"  波特率:                               ");
 128   1              switch (UartParaList[0])
 129   1              {                                               
 130   2                      case 0: Udprintf(10,208,"1200");        break;          
 131   2                      case 1: Udprintf(10,208,"2400");        break;
 132   2                      case 2: Udprintf(10,208,"4800");        break;
 133   2                      case 3: Udprintf(10,208,"9600");        break;
 134   2                      case 4: Udprintf(10,208,"19200");       break;
 135   2                      case 5: Udprintf(10,208,"28800");       break;
 136   2                      case 6: Udprintf(10,208,"57600");       break;
 137   2                      case 7: Udprintf(10,208,"115200");      break;
 138   2              }                                               
 139   1              dprintf(26,224,"暂停 清空 退出");       
 140   1              Key[6].pressed=1;                                               //进行初始化
 141   1      
 142   1              while(1)
 143   1              {
 144   2                      if(Key[6].pressed==1)                   //检测到清空键
 145   2                      {
 146   3                              int i;  
 147   3                              Clear(0,208);           
 148   3                              currentp=0;   
 149   3                              DSP=Mydata;     
 150   3                          URP=Mydata;
 151   3                              USP=Mydata;
 152   3                              Disflag=1; 
 153   3                  RCounter=0;  
 154   3                              for(i=0;i<20;i++)
 155   3                              p[i]=Mydata;
 156   3                              for(i=0;i<MAXLEN;i++)
 157   3                              Mydata[i]='\0';                                 
 158   3                              X=0;
 159   3                              Y=0;                    
 160   3                              dprintf(1,224,"  ");
 161   3                              dprintf(6,224,"  ");
 162   3                              dprintf(26,224,"暂停");
 163   3                              Udprintf(20,208,"接收字节数: 0     ");
 164   3                              SFRPAGE_SAVE=SFRPAGE;
 165   3                              SFRPAGE=UART0_PAGE;
 166   3                              REN0=1;                                 //接受允许
 167   3                              SFRPAGE=SFRPAGE_SAVE;
 168   3                              Key[6].pressed=0;               
 169   3                      }

⌨️ 快捷键说明

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