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

📄 ad2.lst

📁 串口通信
💻 LST
字号:
C51 COMPILER V7.50   AD2                                                                   05/24/2009 21:10:54 PAGE 1   


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

line level    source

   1          #include<reg52.h>
   2          #include<stdio.h>
   3          #include<string.h>
   4          #define uchar unsigned char
   5          #define uint unsigned int
   6          sbit test=P1^2;
   7          sbit actuate=P2^1;
   8          
   9          //定义控制AD转换的寄存器
  10          //******************************
  11          sfr P1M0=0x91;
  12          sfr P1M1=0x92;
  13          sfr AD_Control=0xc5;
  14          sfr AD_Data=0xc6;
  15          //sfr ADC_Low2=0xbe;
  16          //******************************
  17          uchar advalue=0x01;
  18          uchar ad_T=0x32;
  19          uchar control=0x00;
  20          void delay1ms(uint f);
  21          void AD_init();
  22          void serial_init();
  23          
  24          
  25          //主程序
  26          void main()
  27          {actuate=0;
  28   1       AD_init();
  29   1       serial_init();  //初始化串口 
  30   1       AD_Control=AD_Control | 0x08;                //启动AD,置START位
  31   1       while(1)
  32   1        {                     
  33   2         if((AD_Control & 0x10)==0x10)              //判断标志位FLAG
  34   2           {advalue=AD_Data;                        //读取转换数据
  35   3            //SBUF=advalue;
  36   3            AD_Control=AD_Control & 0xe7;           //将标志位清零
  37   3            AD_Control=AD_Control | 0x08;           //转换完成后,再次启动AD     
  38   3           }
  39   2         else
  40   2           test=0;
  41   2         }
  42   1      }
  43          
  44          //***************************
  45          //1ms延时函数
  46          void delay1ms(uint f)
  47          {
  48   1       uint i,j;
  49   1       for(i=0;i<f;i++)
  50   1       for(j=0;j<120;j++);
  51   1      }
  52          
  53          
  54          //***************************
  55          //串口初始化函数,定时器0初始化 
C51 COMPILER V7.50   AD2                                                                   05/24/2009 21:10:54 PAGE 2   

  56          void serial_init()
  57          {
  58   1       SCON=0x50;               //方式1,10位异步收发,波特率由定时器控制,单机对单机,允许接收      
  59   1       PCON=0x00;               //SMOD=0,方式1、2、3的波特率不加倍
  60   1       TMOD=0x21;               //定时器1工作于方式2,自动装载方式,定时器0工作于方式1,16位加1
  61   1       TH0=0x00;
  62   1       TH1=0xb8;                //设置定时器初值,定时20ms
  63   1       TL1=0xfd;                //设置定时器装载值,来设置波特率
  64   1       TH1=0xfd;
  65   1       //TR0=1;                 //启动定时器T0
  66   1       TR1=1;                  //启动定时器T1
  67   1      //TI=1;                  //有发送中断,发送中断标志
  68   1      //RI=1;                  //有接收中断,接收中断标志
  69   1       ET0=1;                 //开T0中断
  70   1       ES=1;                                   //     开串口中断
  71   1       EA=1;                   //开总中断
  72   1      }
  73          
  74          
  75          //**************************
  76          //AD初始化函数
  77          void AD_init()
  78          {P1M0=0x01;              //set the P1 working moduel
  79   1       P1M1=0x01;              //set P10 as AD convert channel   
  80   1       AD_Control=0xc0;
  81   1       //启动AD前必须确认AD电源已经打开,初次打开AD电源,需适当延时,等电源稳定后再启动AD
  82   1       //AD转换完成后,ADC_FLAG=1,需软件清零
  83   1       //ADC_START设置为1时,开始转换,转换结束后为0
  84   1       delay1ms(2);          //delay to besure the AD power is OK 
  85   1      } 
  86          
  87          
  88          //**************************
  89          //AD convert function (start ad out of this function)
  90          /*void adconvert()
  91          {if((AD_Control & 0x10)==0x10)              //判断标志位FLAG,if flag==1,then adcovert over
  92             {advalue=AD_Data;                        //读取转换数据
  93              SBUF=advalue;
  94              AD_Control=AD_Control & 0xe7;           //将标志位清零
  95             }
  96              //{test=0;}                       //when adconvert have not finished,just wait
  97          //AD_Control=AD_Control | 0x08;           //转换完成后,AD_start be set 0, need to restart     
  98          }*/
  99          
 100          
 101          
 102          //发送操作在TI=0时,执行SBUF=A指令后开始,然后发送电路自动在8位
 103          //发送字符前后分别添加一位起始位和停止位,发送完后,TI由硬件在
 104          //发送停止后置位
 105          //在一定条件下,向SBUF写入数据就启动了发送过程,
 106          //接收过程是自动进行的
 107          //***************************
 108          //串口中断函数
 109          void serial () interrupt 4 using 3     //串口接收发送中断程序
 110          {EA=0;       //close the main interrupt to sure this func successful 
 111   1      if(RI)       //接收完一帧数据后,硬件自动置1,如果再接收必须
 112   1        {RI=0;        //软件清零RI
 113   2         control=SBUF;
 114   2         if(control==0x01)
 115   2           SBUF=advalue;
 116   2         else if(control==0x02)
 117   2           actuate=1;
C51 COMPILER V7.50   AD2                                                                   05/24/2009 21:10:54 PAGE 3   

 118   2         else if(control==0x03)
 119   2           actuate=0;
 120   2         }
 121   1      if(TI)      //发送完一帧数据后,硬件自动置1,如果再发送必须
 122   1        {TI=0;    //软件清零TI
 123   2        }          
 124   1      EA=1;
 125   1      }
 126          
 127          
 128          /*void timer0() interrupt 1 using 1
 129          {EA=0;
 130           TH0=0x00;
 131           TH1=0xb8;
 132           ad_T=ad_T-1;
 133           if(ad_T==0)
 134             {AD_Control=AD_Control | 0x08;    //每秒钟启动AD一次
 135              delay1ms(1);
 136              adconvert();                    //wait for reading the addata
 137              //SBUF=advalue;                   //send the advalue through serial channel
 138              ad_T=0x32;
 139             }
 140           EA=1;
 141          }  */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    159    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3    ----
   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 + -