|
#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轉(zhuǎn)換結(jié)果存放
sfr ADC_RESL=0XBE; //AD轉(zhuǎn)換結(jié)果存放
sfr AUXR1=0XA2;
//sfr IE=0XA8;
//sfr IPH=0XB7; //中斷優(yōu)先級(jí)控制寄存器高
//sfr IP=0XB8; //中斷優(yōu)先級(jí)控制寄存器低
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個(gè)時(shí)鐘周期轉(zhuǎn)換一次
AUXR1=0x00; //高八位存放于ADC_RES,低二位存放于ADC_RESL
IE=0XA0; //開(kāi)總中斷允許AD中斷
}
void ADser() interrupt 5
{
P2=0xaa;
_nop_();
_nop_();
_nop_();
_nop_(); //延時(shí)4個(gè)時(shí)鐘周期,使其趨于穩(wěn)定
temp=(ADC_CONTR|0X10)<<4; //此時(shí)ADC_FLAG的值被移入CY位;
ADC_CONTR=0xC0; //轉(zhuǎn)換完成,將ADC_FLAG清零
resulth=ADC_RES; //讀取高8位值
P2=ADC_RES;
result=(unsigned int)(resulth*5/256);
P2=result; //把ADC_RES的值以點(diǎn)亮小燈的形式顯示出來(lái)
}
void main()
{
ADinit();
while(1)
{
ADC_CONTR=0XA8;;//開(kāi)始AD轉(zhuǎn)換
delay1ms(1000); //以下延時(shí)非必須,為測(cè)試程序而加,
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;;//關(guān)閉AD轉(zhuǎn)
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個(gè)共陽(yáng)極的LED燈,不同的結(jié)果會(huì)有不同的現(xiàn)象,可以通過(guò)小燈的亮滅讀取結(jié)果
|
評(píng)分
-
查看全部評(píng)分
|