欣欣学习网,老工程师带你学习单片机技术,欢迎来坐坐。
首  页 | 学习NIOSII | 学习C51 | 学习CPLD | 51+CPLD实验板 | | | MY-RTOS

本栏目的实验需在 WinXp 上操作。建议在 Virtual Box 虚机上安装WinXp系统,使用更方便。

 学习板概述
 安装keil C51软件
 在线烧写程序
 keil C51使用入门
 使用keil C51仿真调试
 使用标准输入输出设备
 点灯程序
 跑马灯程序
 LED数码管扫描显示程序
 键盘扫描程序
 键盘数码管联合扫描
 计时秒表程序
 蜂鸣器发声程序
 产生音阶程序
 字符LCD控制程序
 Flash读写程序
 使用ADC检测模拟量程序
 相关软件与文档


单片机/C51学习板

使用ADC检测模拟量程序


程序代码如下:


#include <reg52.h>       /* special function register declarations   */
#include <absacc.h>      /* for the intended 8051 derivative         */

#include <stdio.h>       /* prototype declarations for I/O functions */

sbit ADCLK=P4^2;
sbit ADCS=P4^0;
sbit ADDO=P4^1;

unsigned int i,j;

unsigned char timer1=0;

unsigned char read_ADC(void);

void main (void)  
{                                 /* execution starts here after stack init   */

  SCON  = 0x50;                   /* SCON: mode 1, 8-bit UART, enable rcvr    */
  TMOD |= 0x21;                   /* TMOD: timer 1, mode 2, 8-bit reload      */
  TH1   = 0xfd;                   /* TH1:  reload value for 19200 baud        */
  TR1   = 1;                      /* TR1:  timer 1 run                        */
  TH0   = 0xff;
  TR0   = 1; 
  TI    = 1;                      /* TI:   set TI to send first char of UART  */
  IE    = 0x82;
  
 
  while (1) {  
    while(1){ 
      i=read_ADC();
      printf("Current light is %d\r\n",i);
      i=0;
      while(i<5){
        timer1=0;
        while(timer1<200){}
        i++;
      } 
    } 
  }                              
}                               

dir() interrupt 1
{
  static unsigned char i;
  TL0=0xcd;
  TH0=0xf8;
  timer1++;
}

unsigned char read_ADC(void)
{
  unsigned char i,j;
  ADCLK=0;
  ADCS=0;
  for(i=0;i<8;i++){
    ADCLK=1;
    ADCLK=1;
    ADCLK=0;
    ADCLK=0;
  } 
  ADCS=1;
  for(i=0;i<20;i++);
  ADCS=0;
  j=0;
  for(i=0;i<8;i++){
    ADCLK=1;
    ADCLK=1;
    ADCLK=0;
    ADCLK=0;
    j<<=1;
    if(ADDO){
      j+=1;
    }
  }
  ADCS=1;
  return j;   
}




管理员信箱: stonewayqi@hotmail.com

欣 欣 学 习 网

粤ICP备2023138008号