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

📄 c.lst

📁 本程序演示从P1.2采集外部电压值进行模数转换
💻 LST
字号:
C51 COMPILER V8.08   C                                                                     05/17/2009 10:26:32 PAGE 1   


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

line level    source

   1          //本程序演示从P1.2采集外部电压值进行模数转换,通过P1口显示其二进制值,并通过串口发送
   2          #include<REG51.H>
   3          sfr P1ASF=0x9D;//P1口模拟功能控制寄存器
   4          sfr ADC_CONTR=0xBC;//模数转换控制特殊功能寄存器
   5          sfr ADC_RES=0xBD;//模数转换结果高8位寄存器
   6          sbit led_mcu_start=0xB7;//定义P3.7为工作指示灯
   7          void delay(int x)//延时函数,根据参数x的大小来决定延时的长短
   8          {
   9   1              while(x--)
  10   1                      ;
  11   1      }
  12          void init_rs232()//初始化串口,使用18.432MHz的晶振,波特率为1200bps
  13          {
  14   1              TMOD=0x20;
  15   1              SCON=0x50;
  16   1              TH1=216;
  17   1              TL1=216;
  18   1              TR1=1;
  19   1      }
  20          void send_byte(unsigned char x)//串口发送一个字节,内容为参数x
  21          {
  22   1              ES=0;//禁止串口中断
  23   1              TI=0;
  24   1              SBUF=x;
  25   1              while(!TI)
  26   1                      ;
  27   1              TI=0;
  28   1      }
  29          void adc_power_on()//打开模数转换开关
  30          {
  31   1              ADC_CONTR=ADC_CONTR|0x80;
  32   1              delay(20);
  33   1      }
  34          void set_P12_asf()//设置P1.2为模数转换通道
  35          {
  36   1              P1ASF=P1ASF|0x04;
  37   1      }
  38          void set_P12_normal_IO()//设置P1.2为普通I/O口
  39          {
  40   1              P1ASF=P1ASF&0xFB;
  41   1      }
  42          void set_adc_channel_2()//模数转换从通道2(P1.2)进行
  43          {
  44   1              ADC_CONTR=0xE2;
  45   1      }
  46          void send_ad_result()//发送模数转换结果
  47          {
  48   1              send_byte(ADC_RES);
  49   1      }
  50          void get_ad_result()//开始模数转换
  51          {
  52   1              ADC_CONTR=ADC_CONTR|0x08;//启动模数转换
  53   1              delay(20);//启动模数转换后,等待4个机器周期方可正确读取ADC_CONTR的值
  54   1              while(!(ADC_CONTR|0x10))//等待转换完成
  55   1                      ;
C51 COMPILER V8.08   C                                                                     05/17/2009 10:26:32 PAGE 2   

  56   1              ADC_CONTR=ADC_CONTR&0xE7;//完成标志位清零,停止模数转换
  57   1      }
  58          void main()
  59          {
  60   1              unsigned char i;
  61   1              led_mcu_start=0;//打开工作指示灯
  62   1              init_rs232();//初始化串口
  63   1              adc_power_on();//打开模数转换开关
  64   1              set_adc_channel_2();//模数转换从通道2(P1.2)进行
  65   1              while(1)
  66   1              {
  67   2                      set_P12_asf();//设置P1.2为模数转换通道
  68   2                      get_ad_result();//开始模数转换
  69   2                      send_ad_result();//发送模数转换结果
  70   2                      set_P12_normal_IO();//设置P1.2为普通I/O口
  71   2                      P1=~ADC_RES;//模数转换结果取反,通过P1口的发光数码管显示
  72   2                      for(i=0;i<8;i++)
  73   2                              delay(65535);//延长一段时间
  74   2              }
  75   1      }


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