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

📄 test.lst

📁 无线收发系统 无线收发系统 无线收发系统 无线收发系统
💻 LST
字号:
C51 COMPILER V7.02a   TEST                                                                 04/18/2006 12:47:18 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          
   3          #include "string.h"
   4          sbit LED1 = P1^1;
   5          sbit LED2 = P1^2;
   6          sbit W_IN = P2^2;
   7          sbit W_OUT = P2^0;
   8          sbit DQ =P2^1; 
   9          unsigned char Te=0;//温度整数部分
  10          unsigned char Te_D=0;//温度小数部分
  11          unsigned char T0_last;
  12          unsigned char w_data;           //接收时用于存储两次上升沿之间的时长,发送时存储前半周
  13          unsigned char send_busy = 0;//存储发送时后半周
  14          unsigned char recv_timer = 0;
  15          bit w_stat, last_w_stat;
  16          unsigned char jiffies=0;
  17          
  18          
  19          
  20          
  21            //定义通信端口
  22          //延时函数
  23          
  24          void delay(unsigned int i)
  25          {
  26   1           while(i--);
  27   1          
  28   1      }
  29          //初始化函数
  30          Init_DS18B20(void)
  31          {
  32   1       unsigned char x=0;
  33   1       DQ = 1;    //DQ复位
  34   1       delay(8);  //稍做延时
  35   1       DQ = 0;    //单片机将DQ拉低
  36   1       delay(50); //精确延时 大于 480us
  37   1       DQ = 1;    //拉高总线
  38   1       delay(14);
  39   1       x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  40   1       delay(20);
  41   1      }
  42          //读一个字节
  43          ReadOneChar(void)
  44          {
  45   1      unsigned char i=0;
  46   1      unsigned char dat = 0;
  47   1      for (i=8;i>0;i--)
  48   1       {
  49   2        DQ = 0; // 给脉冲信号
  50   2        dat>>=1;
  51   2        DQ = 1; // 给脉冲信号
  52   2        if(DQ)
  53   2         dat|=0x80;
  54   2        delay(4);
  55   2       }
C51 COMPILER V7.02a   TEST                                                                 04/18/2006 12:47:18 PAGE 2   

  56   1       return(dat);
  57   1      }
  58          //写一个字节
  59          WriteOneChar(unsigned char dat)
  60          {
  61   1       unsigned char i=0;
  62   1       for (i=8; i>0; i--)
  63   1       {
  64   2        DQ = 0;
  65   2        DQ = dat&0x01;
  66   2        delay(5);
  67   2        DQ = 1;
  68   2        dat>>=1;
  69   2       }
  70   1      delay(4);
  71   1      }
  72          //读取温度
  73          void ReadTemperature(void)
  74          {
  75   1      unsigned char a=0;
  76   1      unsigned char b=0;
  77   1      unsigned char e=0;
  78   1      //unsigned char t;
  79   1      unsigned char c,d;
  80   1      
  81   1      //unsigned char t=0;
  82   1      Init_DS18B20();
  83   1      WriteOneChar(0xCC); // 跳过读序号列号的操作
  84   1      WriteOneChar(0x44); // 启动温度转换
  85   1      Init_DS18B20();
  86   1      WriteOneChar(0xCC); //跳过读序号列号的操作
  87   1      WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
  88   1      a=ReadOneChar();   //读取温度值低位
  89   1      b=ReadOneChar();   //读取温度值高位
  90   1      
  91   1      e=a&0x0f;//小数部分
  92   1      c=(e*10)/16;
  93   1      d=((e*10)%16)*10/16;  
  94   1      Te_D=c*10+d;    
  95   1      a=a>>4;
  96   1      Te=b<<4;
  97   1      Te=Te|a;
  98   1      
  99   1      }
 100          
 101          void clock_timer(void) interrupt 1 using 1{
 102   1         
 103   1              if (send_busy){
 104   2                      if(w_data){
 105   3                              w_data--;
 106   3                              w_stat = 0;
 107   3                      }else{
 108   3                              send_busy--;
 109   3                              w_stat = 1;
 110   3                      }
 111   2                      W_OUT = w_stat;
 112   2              }else{
 113   2                      w_stat = W_IN;
 114   2                      if (w_stat != last_w_stat){
 115   3                              last_w_stat = w_stat;
 116   3                              if (w_stat){
 117   4                                      w_data = recv_timer;
C51 COMPILER V7.02a   TEST                                                                 04/18/2006 12:47:18 PAGE 3   

 118   4                                      recv_timer = 0;
 119   4                              }
 120   3                      }
 121   2                      if (~recv_timer)//if(recv_busy != 0xff)
 122   2                              recv_timer++;
 123   2              }
 124   1              jiffies++;
 125   1              T0_last=TL0;
 126   1      }
 127          
 128          void clock_init(void){
 129   1              jiffies = 0;
 130   1              TMOD=0x02;
 131   1              TH0=TL0=0x0ce;//12M,50us
 132   1      //      TH0=TL0=0x7a;//16M
 133   1      //      TH0=TL0=0x75;//16.59M
 134   1      //      TH0=TL0=0x72;//17M
 135   1      //      TH0=TL0=0x37;//24M
 136   1      //      TH0=TL0=0x47;//22.1844M, 100us
 137   1      //      TH0=TL0=0xa3;//22.1844M, 50us
 138   1              EA=1;
 139   1              ET0=1;
 140   1         
 141   1              TR0=1;
 142   1      }
 143          
 144          
 145          void clock_init_again(void){
 146   1         
 147   1              TMOD=0x02;
 148   1              TH0=0x0ce;//12M,50us
 149   1              TL0=T0_last;
 150   1      //      TH0=TL0=0x7a;//16M
 151   1      //      TH0=TL0=0x75;//16.59M
 152   1      //      TH0=TL0=0x72;//17M
 153   1      //      TH0=TL0=0x37;//24M
 154   1      //      TH0=TL0=0x47;//22.1844M, 100us
 155   1      //      TH0=TL0=0xa3;//22.1844M, 50us
 156   1              EA=1;
 157   1              ET0=1;
 158   1          jiffies=0;
 159   1              TR0=1;
 160   1      }
 161          
 162          
 163          void init_serialcomm(void)
 164          {
 165   1          SCON  = 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr 
 166   1          TMOD |= 0x20;       //TMOD: timer 1, mode 2, 8-bit reload 
 167   1          PCON |= 0x80;       //SMOD=1; 
 168   1          TH1   = 0x0e6;       //Baud:2400  fosc=11.0592MHz  :f4
 169   1              TL1       = 0x0e6;
 170   1          //IE   |= 0x90;       //Enable Serial Interrupt 
 171   1          TR1   = 1;          // timer 1 run
 172   1              RI=0;
 173   1              TI=1; 
 174   1      }
 175          
 176          void serial_out(char d){
 177   1              while(!TI);
 178   1              TI=0;
 179   1              SBUF=(d);
C51 COMPILER V7.02a   TEST                                                                 04/18/2006 12:47:18 PAGE 4   

 180   1      }
 181          
 182          
 183          
 184          void send_string_com(char *str,int strlen)//串口程序
 185          {   char sum;
 186   1      
 187   1          int k=0;
 188   1          serial_out(02);
 189   1          do
 190   1          {   sum^=*(str+k);
 191   2              serial_out(*(str + k));
 192   2              k++;
 193   2          } while(k < strlen);
 194   1              serial_out(sum);
 195   1              serial_out(03);
 196   1      }
 197          
 198          //等待指定长度的串行数据到达,超时值为每两个字节之间的间隔时间而非等待整个串的时间.
 199          //超时单位为time_out * 100uS
 200          bit wait_serial(unsigned char *p, unsigned char len, unsigned char time_out){
 201   1              unsigned int time=jiffies;
 202   1              unsigned char n=0;
 203   1              do{
 204   2                      if (RI){
 205   3                              p[n++]=SBUF;
 206   3                              RI=0;
 207   3                              if(n==len)
 208   3                                      return 0;
 209   3                              time=jiffies;
 210   3                      }
 211   2              }while(jiffies-time < time_out);
 212   1              return 1;
 213   1      }
 214          
 215          sys_init(){
 216   1              clock_init();
 217   1              init_serialcomm();
 218   1      }
 219          
 220          
 221          
 222          
 223          //=============================================================
 224          //发送程序 开始
 225          //=============================================================
 226          
 227          #define PULS_0_WIDTH 8                  //低电平脉宽
 228          #define PULS_1_WIDTH 16                 //高电平脉宽
 229          #define PULS_HEAD_WIDTH 8               //前导信号脉宽
 230          #define PULS_START_WIDTH 24             //引导信号脉宽
 231          #define PULS_STOP_WIDTH 8               //结束码脉宽
 232          
 233          #define PULS_HEAD_COUNTS 16             //前导信号长度
 234          
 235          
 236          unsigned char send_buf[16];
 237          #define send_byts send_buf[0]   //剩余字节数,发送完后为0
 238          unsigned char sending_byte;             //当前正在发送的字节
 239          unsigned char send_byte_p;              //已发送字节数(含正在发送的字节)
 240          unsigned char send_bit_p;               //当前正在发送的字节已发送位数(含正在发送的位)
 241          
C51 COMPILER V7.02a   TEST                                                                 04/18/2006 12:47:18 PAGE 5   

 242          #define SEND_PROGRESSING 0x41
 243          #define SEND_FAILED 0x21
 244          #define SEND_SUCCESS 0x31
 245          unsigned char send_stat = 0;    //发送程序当前状态,为0时正常
 246          unsigned char head_counts;      //前导信号计数器(包括引导信号)
 247          
 248          void start_send(){
 249   1              send_byte_p = 0;
 250   1              send_bit_p = 0;
 251   1              send_stat = SEND_PROGRESSING;
 252   1              head_counts = 16;
 253   1      }
 254          
 255          #define START_SEND(byts) send_buf[0]=byts;send_byts=byts;start_send()
 256          
 257          //发送前应清除send_byte_p,send_bit_p,send_stat,并设置send_byts
 258          //发送过程中可根据send_byts的值得到剩余字节数,根据send_byte_p的值得到已发送字节数.注意,将正在发送的字节当

⌨️ 快捷键说明

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