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

📄 test.lst

📁 无线收发系统 无线收发系统 无线收发系统 无线收发系统
💻 LST
字号:
C51 COMPILER V7.02a   TEST                                                                 04/18/2006 12:47:48 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE TEST
OBJECT MODULE PLACED IN test.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE test.c ROM(SMALL) OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <AT89X52.H>
   2          #include "string.h"
   3          
   4          //液晶块
   5          #define LCM_RW P3_6 //定义引脚
   6          #define LCM_RS P3_5
   7          #define LCM_E P3_7
   8          #define LCM_Data P1
   9          #define Busy 0x80 //用于检测LCM状态字中的Busy标识
  10          typedef int byte;
  11          typedef unsigned int  word;
  12          
  13          void Read_Temp(void);
  14          void mychar(char,char);
  15          
  16          void WriteDataLCM(unsigned char WDLCM);
  17          void WriteCommandLCM(unsigned char WCLCM,BuysC);
  18          unsigned char ReadDataLCM(void);
  19          unsigned char ReadStatusLCM(void);
  20          void LCMInit(void);
  21          void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
  22          void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
  23          void Delay5Ms(void);
  24          void Delay400Ms(void);
  25          
  26          void delay(word useconds)
  27          {
  28   1        for(;useconds>0;useconds--);
  29   1      }
  30          
  31          void mychar(char xx,char yy)
  32          {
  33   1      
  34   1       DisplayOneChar(0,0,0x54);
  35   1       DisplayOneChar(1,0,0x65);
  36   1       DisplayOneChar(2,0,0x6D);
  37   1       DisplayOneChar(3,0,0x70);
  38   1       DisplayOneChar(4,0,0x65);
  39   1       DisplayOneChar(5,0,0x72);
  40   1       DisplayOneChar(6,0,0x61);
  41   1       DisplayOneChar(7,0,0x74);
  42   1       DisplayOneChar(8,0,0x75);
  43   1       DisplayOneChar(9,0,0x72);
  44   1       DisplayOneChar(10,0,0x65);
  45   1       DisplayOneChar(11,0,0x3A);
  46   1      ///////////////////////自定义字符
  47   1       WriteCommandLCM(0x48, 0); //第一行
  48   1       WriteDataLCM(0x06);
  49   1       WriteCommandLCM(0x49, 0); //第2行
  50   1       WriteDataLCM(0x09);
  51   1       WriteCommandLCM(0x4a, 0); //第3
  52   1       WriteDataLCM(0x09);
  53   1       WriteCommandLCM(0x4b, 0); //第4
  54   1       WriteDataLCM(0x06);
  55   1       WriteCommandLCM(0x4c, 0); //第5
C51 COMPILER V7.02a   TEST                                                                 04/18/2006 12:47:48 PAGE 2   

  56   1       WriteDataLCM(0x00);
  57   1       WriteCommandLCM(0x4d, 0); //第6
  58   1       WriteDataLCM(0x00);
  59   1       WriteCommandLCM(0x4e, 0); //第7
  60   1       WriteDataLCM(0x00);
  61   1       WriteCommandLCM(0x4f, 0); //第8
  62   1       WriteDataLCM(0x00);
  63   1       DisplayOneChar(xx,yy,0x01);
  64   1       DisplayOneChar(xx+1,yy,0x43);
  65   1      }
  66          //写数据
  67          void WriteDataLCM(unsigned char WDLCM)
  68          {
  69   1      ReadStatusLCM(); //检测忙
  70   1      LCM_Data = WDLCM;
  71   1      LCM_RS = 1;
  72   1      LCM_RW = 0;
  73   1      LCM_E = 0; //若晶振速度太高可以在这后加小的延时
  74   1      LCM_E = 0; //延时
  75   1      LCM_E = 1;
  76   1      }
  77          
  78          //写指令
  79          void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测
  80          {
  81   1      if (BuysC) ReadStatusLCM(); //根据需要检测忙
  82   1      LCM_Data = WCLCM;
  83   1      LCM_RS = 0;
  84   1      LCM_RW = 0; 
  85   1      LCM_E = 0;
  86   1      LCM_E = 0;
  87   1      LCM_E = 1; 
  88   1      }
  89          
  90          //读状态
  91          unsigned char ReadStatusLCM(void)
  92          {
  93   1      LCM_Data = 0xFF; 
  94   1      LCM_RS = 0;
  95   1      LCM_RW = 1;
  96   1      LCM_E = 0;
  97   1      LCM_E = 0;
  98   1      LCM_E = 1;
  99   1      while (LCM_Data & Busy); //检测忙信号
 100   1      return(LCM_Data);
 101   1      }
 102          
 103          void LCMInit(void) //LCM初始化
 104          {
 105   1      LCM_Data = 0;
 106   1      WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
 107   1      Delay5Ms(); 
 108   1      WriteCommandLCM(0x38,0);
 109   1      Delay5Ms(); 
 110   1      WriteCommandLCM(0x38,0);
 111   1      Delay5Ms(); 
 112   1      
 113   1      WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
 114   1      WriteCommandLCM(0x08,1); //关闭显示
 115   1      WriteCommandLCM(0x01,1); //显示清屏
 116   1      WriteCommandLCM(0x06,1); // 显示光标移动设置
 117   1      WriteCommandLCM(0x0C,1); // 显示开及光标设置
C51 COMPILER V7.02a   TEST                                                                 04/18/2006 12:47:48 PAGE 3   

 118   1      }
 119          
 120          //按指定位置显示一个字符
 121          void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
 122          {
 123   1      Y &= 0x1;
 124   1      X &= 0xF; //限制X不能大于15,Y不能大于1
 125   1      if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
 126   1      X |= 0x80; //算出指令码
 127   1      WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码
 128   1      WriteDataLCM(DData);
 129   1      }
 130          
 131          //按指定位置显示一串字符  ***原来的遇到空格0x20就不显示***
 132          void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
 133          {
 134   1        unsigned char ListLength,j;
 135   1        ListLength = strlen(DData);
 136   1        Y &= 0x1;
 137   1        X &= 0xF; //限制X不能大于15,Y不能大于1
 138   1            if (X <= 0xF) //X坐标应小于0xF
 139   1              { 
 140   2                          for(j=0;j<ListLength;j++)
 141   2                            {
 142   3                   DisplayOneChar(X, Y, DData[j]); //显示单个字符
 143   3                   X++;
 144   3                  }
 145   2              }
 146   1      }
 147          
 148          
 149          //5ms延时
 150          void Delay5Ms(void)
 151          {
 152   1       unsigned int TempCyc = 5552;
 153   1       while(TempCyc--);
 154   1      }
 155          
 156          //400ms延时
 157          void Delay400Ms(void)
 158          {
 159   1       unsigned char TempCycA = 5;
 160   1       unsigned int TempCycB;
 161   1       while(TempCycA--)
 162   1      {
 163   2      TempCycB=7269;
 164   2      while(TempCycB--);
 165   2      };
 166   1      }
 167          
 168          
 169          
 170          
 171          
 172          
 173          
 174          
 175          
 176          
 177          
 178          
 179          
C51 COMPILER V7.02a   TEST                                                                 04/18/2006 12:47:48 PAGE 4   

 180          
 181          
 182          sbit W_IN = P2^1;
 183          sbit W_OUT = P2^0;
 184          
 185          unsigned char w_data;           //接收时用于存储两次上升沿之间的时长,发送时存储前半周
 186          unsigned char send_busy = 0;//存储发送时后半周
 187          unsigned char recv_timer = 0;
 188          bit w_stat, last_w_stat;
 189          
 190          unsigned char jiffies=0;
 191          void clock_timer(void) interrupt 1 using 1{
 192   1              if (send_busy){
 193   2                      if(w_data){
 194   3                              w_data--;
 195   3                              w_stat = 0;
 196   3                      }else{
 197   3                              send_busy--;
 198   3                              w_stat = 1;
 199   3                      }
 200   2                      W_OUT = w_stat;
 201   2              }else{
 202   2                      w_stat = W_IN;
 203   2                      if (w_stat != last_w_stat){
 204   3                              last_w_stat = w_stat;
 205   3                              if (w_stat){
 206   4                                      w_data = recv_timer;
 207   4                                      recv_timer = 0;
 208   4                              }
 209   3                      }
 210   2                      if (~recv_timer)//if(recv_busy != 0xff)
 211   2                              recv_timer++;
 212   2              }
 213   1              jiffies++;
 214   1      }
 215          
 216          void clock_init(void){
 217   1              jiffies = 0;
 218   1              TMOD=0x02;
 219   1              TH0=TL0=0x0ce;//12M,50us
 220   1      //      TH0=TL0=0x7a;//16M
 221   1      //      TH0=TL0=0x75;//16.59M
 222   1      //      TH0=TL0=0x72;//17M
 223   1      //      TH0=TL0=0x37;//24M
 224   1      //      TH0=TL0=0x47;//22.1844M, 100us
 225   1      //      TH0=TL0=0xa3;//22.1844M, 50us
 226   1              EA=1;
 227   1              ET0=1;
 228   1      
 229   1              TR0=1;
 230   1      }
 231          void init_serialcomm(void)
 232          {
 233   1          SCON  = 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr 
 234   1          TMOD |= 0x20;       //TMOD: timer 1, mode 2, 8-bit reload 
 235   1          PCON |= 0x80;       //SMOD=1; 
 236   1          TH1   = 0x0e6;       //Baud:2400  fosc=11.0592MHz  :f4
 237   1              TL1       = 0x0e6;
 238   1          //IE   |= 0x90;       //Enable Serial Interrupt 
 239   1          TR1   = 1;          // timer 1 run
 240   1              RI=0;
 241   1              TI=1; 
C51 COMPILER V7.02a   TEST                                                                 04/18/2006 12:47:48 PAGE 5   

 242   1      }
 243          
 244          void serial_out(unsigned char d){
 245   1              while(!TI);
 246   1              TI=0;
 247   1              SBUF=(d);
 248   1      }
 249          
 250          
 251          
 252          void send_string_com(unsigned char *str,int strlen)//串口程序
 253          {   unsigned char sum;
 254   1      
 255   1          unsigned char k=0;
 256   1          //serial_out(02);
 257   1          do
 258   1          {   //sum^=*(str+k);
 259   2              serial_out(*(str + k));
 260   2                      //serial_out('a');
 261   2              k++;
 262   2          } while(k < strlen);
 263   1              //serial_out(sum);
 264   1              //serial_out('e');
 265   1      }
*** WARNING C280 IN LINE 253 OF TEST.C: 'sum': unreferenced local variable
 266          
 267          //等待指定长度的串行数据到达,超时值为每两个字节之间的间隔时间而非等待整个串的时间.
 268          //超时单位为time_out * 100uS
 269          bit wait_serial(unsigned char *p, unsigned char len, unsigned char time_out){
 270   1              unsigned int time=jiffies;
 271   1              unsigned char n=0;
 272   1              do{
 273   2                      if (RI){
 274   3                              p[n++]=SBUF;
 275   3                              RI=0;
 276   3                              if(n==len)
 277   3                                      return 0;
 278   3                              time=jiffies;
 279   3                      }
 280   2              }while(jiffies-time < time_out);
 281   1              return 1;
 282   1      }
 283          
 284          sys_init(){
 285   1              clock_init();
 286   1              init_serialcomm();
 287   1      }
 288          
 289          
 290          
 291          
 292          //=============================================================
 293          //发送程序 开始
 294          //=============================================================
 295          
 296          #define PULS_0_WIDTH 8                  //低电平脉宽
 297          #define PULS_1_WIDTH 16                 //高电平脉宽
 298          #define PULS_HEAD_WIDTH 8               //前导信号脉宽
 299          #define PULS_START_WIDTH 24             //引导信号脉宽
 300          #define PULS_STOP_WIDTH 8               //结束码脉宽
 301          
 302          #define PULS_HEAD_COUNTS 16             //前导信号长度
C51 COMPILER V7.02a   TEST                                                                 04/18/2006 12:47:48 PAGE 6   

 303          
 304          
 305          unsigned char send_buf[16];
 306          #define send_byts send_buf[0]   //剩余字节数,发送完后为0
 307          unsigned char sending_byte;             //当前正在发送的字节
 308          unsigned char send_byte_p;              //已发送字节数(含正在发送的字节)
 309          unsigned char send_bit_p;               //当前正在发送的字节已发送位数(含正在发送的位)
 310          
 311          #define SEND_PROGRESSING 0x41
 312          #define SEND_FAILED 0x21
 313          #define SEND_SUCCESS 0x31
 314          unsigned char send_stat = 0;    //发送程序当前状态,为0时正常
 315          unsigned char head_counts;      //前导信号计数器(包括引导信号)
 316          
 317          void start_send(){
 318   1              send_byte_p = 0;
 319   1              send_bit_p = 0;
 320   1              send_stat = SEND_PROGRESSING;
 321   1              head_counts = 16;
 322   1      }
 323          
 324          #define START_SEND(byts) send_buf[0]=byts;send_byts=byts;start_send()
 325          
 326          //发送前应清除send_byte_p,send_bit_p,send_stat,并设置send_byts
 327          //发送过程中可根据send_byts的值得到剩余字节数,根据send_byte_p的值得到已发送字节数.注意,将正在发送的字节当

⌨️ 快捷键说明

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