标题: (资料分享)STC12C5A60S2内部自带AD的使用 [打印本页]

作者: 单片机小白一个    时间: 2019-5-30 21:41
标题: (资料分享)STC12C5A60S2内部自带AD的使用
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int  
#define uchar unsigned char
sfr P1ASF=0X9D;                 //P1口模拟功能控制寄存器
sfr        ADC_CONTR=0XBC;        //ADC控制寄存器
sfr        ADC_RES=0XBD;        //AD转换结果存放
sfr        ADC_RESL=0XBE;        //AD转换结果存放
sfr        AUXR1=0XA2;               
//sfr        IE=0XA8;               
//sfr        IPH=0XB7;        //中断优先级控制寄存器高
//sfr        IP=0XB8;        //中断优先级控制寄存器低

uchar temp;

unsigned int result=0,resulth=0;

void delay1ms(uint z)   //误差 0us
{
    unsigned char a,b,c;
    for(c=z;c>0;c--)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}

void ADinit()
{
   P1ASF=0x01;        //P1^0口作为AD输入口
   ADC_CONTR=0x20;          //P1^0口作为AD输入口,360个时钟周期转换一次
   AUXR1=0x00;        //高八位存放于ADC_RES,低二位存放于ADC_RESL
   IE=0XA0;                      //开总中断允许AD中断
}
void ADser() interrupt 5
{
     P2=0xaa;
     _nop_();
         _nop_();
         _nop_();         
         _nop_();                                   //延时4个时钟周期,使其趋于稳定
     temp=(ADC_CONTR|0X10)<<4; //此时ADC_FLAG的值被移入CY位;
     ADC_CONTR=0xC0;           //转换完成,将ADC_FLAG清零
     resulth=ADC_RES;          //读取高8位值
     P2=ADC_RES;            
     result=(unsigned int)(resulth*5/256);
     P2=result;                               //把ADC_RES的值以点亮小灯的形式显示出来
}
void main()
{
    ADinit();
        while(1)
        {
           ADC_CONTR=0XA8;;//开始AD转换
           delay1ms(1000);  //以下延时非必须,为测试程序而加,
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           ADC_CONTR=0X20;;//关闭AD转
           P2=0xff;
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
        }
}
我用的是普中的板子,P2口接有8个共阳极的LED灯,不同的结果会有不同的现象,可以通过小灯的亮灭读取结果                                                                 


作者: 分立元件    时间: 2020-11-2 00:09
非常感谢,找到一个可以理解的AD程序!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1