STC12C5A60S2单片机的AD转换

合集下载

单片机STC12C5A60S2简介

单片机STC12C5A60S2简介

STC12C5A60S2简介STC12C5A60S2是STC生产的单时钟/机器周期(1T)的单片机,是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。

内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换,针对电机控制,强干扰场合。

1、增强型8051CPU,1T(1024G),单时钟/机器周期2、工作电压 5.5-3.5V3、1280字节RAM4、通用I/O口,复位后为:准双向口/弱上拉可设置成四种模式:准双向口/弱上拉,强推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA5、有EEPROM功能6、看门狗7、内部集成MAX810专用复位电路8、外部掉电检测电路9、时钟源:外部高精度晶体/时钟,内部R/C振荡器常温下内部R/C振荡器频率为:5.0V单片机为:11~17MHz3.3V 单片机为:8~12MHz10、4个16位定时器两个与传统8051兼容的定时器/计数器,16位定时器T0和T111、3个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟,独立波特率发生器可以在P1.0口输出时钟12、外部中断I/O口7路,传统的下降沿中断或电平触发中断,并新增支持上升沿中断的PCA模块,Power Down模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4,T1/P3.5,RxD/P3.0,CCP0/P1.3,CCP0/P1.313、PWM2路14、A/D转换,10位精度ADC,共8路,转换速度可达250K/S15、通用全双工异步串行口(UART)16、双串口,RxD2/P1.2,TxD2/P1.317、工作范围:-40~8518、封装:LQFP-48,LQFP-44,PDIP-40,PLCC管脚说明P0.0~P0.7 P0:P0口既可以作为输入/输出口,也可以作为地址/数据复用总线使用。

STC12C5A60S2中的AD转换

STC12C5A60S2中的AD转换

STC12C5A60S2中的AD转换逐次逼近原理AD 里面包含da,当输入电压Vin时,da的最高位是1,即为0.5Vref与输入信号比较,如果输入大于0.5Vref则比较器输出为1,同时da的最高位为1,反之DA最高位则为0,通过8次比较后得到8个01数据即完成ad转换。

现在说下程序中用到stc12单片机两个寄存器ADC_CONTR;主要用来配置ad启动的工作模式;还有个result的寄存器程序中的注意点:配置完ADC_CONTR后要延时4个时钟周期先把程序附上#include &quot;stc12.h&quot;#include &quot;intrins.h&quot;#include &quot;ad.h&quot;uint ad;#define ADC_POWER 0X80 //ADC最高位给adc部分供电,类似于片选#define ADC_START 0X08 //模数转换启动控制位#define ADC_FLAG 0x10 //ad转换需要时间,这个是转换完成标志位#define ADC_SPEEDLL 0X00 //540 clock#define ADC_SPEEDL 0X20 //360 clock#define ADC_SPEEDH 0X40 //180 clock#define ADC_SPEEDHH 0X60 //90 clockuchar ADCresult(uchar aa) //这里的参数是哪个口来ad转换{P1ASF=0X01; //这里的选择和用哪一个P1口作为ad采样ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|aa;//ADC_CONTR=0X88|aa;_nop_();_nop_();_nop_();_nop_();//设置ADC_CONTR寄存器后需加4个CPU时钟周期的延时,才能保证值被写入ADC_CONTR寄存器while (!(ADC_CONTR & ADC_FLAG)); //等待ADC_CONTR,这里的ADC_FLAG相当于一个常数,不是寄存器里面的某个位//while(!ADC_FLAG);//ADC_FLAG=0;ADC_CONTR &= ~ADC_FLAG; //Close ADC 将标志位清零等待下次硬件置1ad=(ADC_RES<<2)+ADC_RESL; //打开10位AD采集功能如果用8位AD 屏掉这句把下一句改为Vo=(float)(ADC_RESL)*500/256; 即可//ADC_RES结果寄存器的高2位;ADC_RES结果寄存器的低8位ad=(float)(ad)*5*100/1024; //Return ADCresult(为显示整数,这里将电压值扩大了十倍)//10位AD采集即2的10次方满值为1024 这里用1024表示5伏的电压//那么用采集到的数量值除以1024 在乘以5 得到的值就是采集的电压数值//这里又*100 是为了扩大100倍显示小数位//ADC_RES*(5/256)为采集的电压值然后扩大10倍便于计算return ad;}这里只是个ad.c源文件,这里有几个问题想说一下1.怎么知道是10位还是8位的ad结果;你可以在ADCresult(uchar aa)最前面加一条AUXR1&=0x04;什么意思呢,转换结果的低2位放在ADC_RES,高8位ADC_RESL 中2为什么不用//while(!ADC_FLAG);//ADC_FLAG=0;这两条因为ADC_FLAG相当于常量前面用宏定义而头文件里只有ADC_CONTR的地址映射;但是如果在头文件中用sbit ADC_FLAG=ADC_CONTR^4会出现错误,具体原因还不清楚先说到这吧。

STC12C5A60S2的ADC PWM功能

STC12C5A60S2的ADC PWM功能

STC12C5A60S2的ADC+PWM功能STC12C5A60S2单片机的A/D转换口在P1口(P1.7-P1.0),有8路10位高速A/D转换器,速度可达到250 KHz(25万次/秒)。

脉宽调制(PWM)是一种使用程序来控制波形占空比、周期、相位波形的技术。

STC12C5A60S2单片机的PAC模块可以通过程序设定,使其工作于8位PWM模式。

下面是一段将ADC和PWM结合起来应用的程序:/************************************************ ***************时间:2012.12.1晶振:12MHz功能描述:AD采集电位器的电压信号,然后信号以PWM 信号输出控制LED的亮度(调节电位器)当电位器两端的电压大时,LED较亮,同时用1602显示采集的电压值AD采集通道:P1.0PWM输出: P1.3************************************************* **************/#include;#include;unsigned int result,ge,shifen,baifen;unsigned charseg[10]={'0','1','2','3','4','5','6','7','8','9'} ;//要显示字符sbit RS = P2^4; //命令数据sbit RW = P2^5; //写还是读sbit EN = P2^6; //使能端#define RS_CLR RS=0#define RS_SET RS=1#define RW_CLR RW=0#define RW_SET RW=1#define EN_CLR EN=0#define EN_SET EN=1#define DataPort P0/*------------------------------------------------uS延时函数,含有输入参数 unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时长度如下 T=tx2+5 uS------------------------------------------------* /void DelayUs2x(unsigned char t){while(--t);}/*------------------------------------------------mS延时函数,含有输入参数 unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编------------------------------------------------* /void DelayMs(unsigned char t){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}/*------------------------------------------------判忙函数------------------------------------------------* /bit LCD_Check_Busy(void){DataPort= 0xFF;RS_CLR;RW_SET;EN_CLR;_nop_();EN_SET;return (bit)(DataPort & 0x80);}/*------------------------------------------------写入命令函数------------------------------------------------*/void LCD_Write_Com(unsigned char com){while(LCD_Check_Busy()); //忙则等待RS_CLR;RW_CLR;EN_SET;DataPort= com;_nop_();EN_CLR;}/*------------------------------------------------写入数据函数------------------------------------------------* /void LCD_Write_Data(unsigned char Data){while(LCD_Check_Busy()); //忙则等待RS_SET;RW_CLR;EN_SET;DataPort= Data;_nop_();EN_CLR;}/*------------------------------------------------清屏函数------------------------------------------------* /void LCD_Clear(void){LCD_Write_Com(0x01);DelayMs(5);}/*------------------------------------------------写入字符串函数------------------------------------------------* /void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s){{LCD_Write_Com(0x80 + x); //表示第一行}else{LCD_Write_Com(0xC0 + x); //表示第二行}while (*s){LCD_Write_Data( *s);s ++;}}/*------------------------------------------------写入字符函数------------------------------------------------* /void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data){{LCD_Write_Com(0x80 + x);}else{LCD_Write_Com(0xC0 + x);}LCD_Write_Data( Data);}/*------------------------------------------------LCD初始化函数------------------------------------------------* /void LCD_Init(void){LCD_Write_Com(0x38); /*显示模式设置*/DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);LCD_Write_Com(0x08); /*显示关闭*/LCD_Write_Com(0x01); /*显示清屏*/LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5);LCD_Write_Com(0x0C); /*显示开及光标设置*/ }/*------------------------------------------------ADC初始化函数------------------------------------------------* /void InitADC(){P1ASF =0x01;//使能P1口ADC功能ADC_RES = 0;ADC_CONTR = 0xc8;}/*------------------------------------------------主函数------------------------------------------------* /void main(void){LCD_Init();LCD_Clear();//清屏LCD_Write_String(5,0,&quot;526lab&quot;);//(列,行,数据)LCD_Write_String(2,1,&quot;Result:&quot;); InitADC();IE=0xa0;//开中断while (1){//PWM初始化CCON=0;CMOD=0;//1MCCAP0H=CCAP0L=ADC_RES;CCAPM0=0x42;//开启PWMCR=1;//计时开始//调用显示LCD_Write_Char(9,1,seg[ge]);LCD_Write_Char(10,1,'.');LCD_Write_Char(11,1,seg[shifen]);LCD_Write_Char(12,1,seg[baifen]);LCD_Write_Char(13,1,'V');}}/*------------------------------------------------ADC中断处理函数------------------------------------------------* /void adc_isr() interrupt 5 using 1{unsigned int temp;temp=ADC_RES;result=temp*0.01953125*1000;ge=result/1000;shifen=result%1000/100;baifen=result%100/10;ADC_CONTR = 0xc8;//开启转换}12C5A60S2.h的头文件//--------------------------------------------------------------------------------//新一代 1T 8051系列单片机内核特殊功能寄存器 C51 Core SFRs// 7 6 5 4 3 2 1 0Reset Valuesfr ACC = 0xE0; //Accumulator 0000,0000sfr B = 0xF0; //B Register 0000,0000sfr PSW = 0xD0; //Program Status Word CY AC F0 RS1 RS0 OV F1 P 0000,0000//-----------------------------------sbit CY = PSW^7;sbit AC = PSW^6;sbit F0 = PSW^5;sbit RS1 = PSW^4;sbit RS0 = PSW^3;sbit OV = PSW^2;sbit P = PSW^0;//-----------------------------------sfr SP = 0x81; //Stack Pointer 0000,0111sfr DPL = 0x82; //Data Pointer Low Byte0000,0000sfr DPH = 0x83; //Data Pointer High Byte 0000,0000//--------------------------------------------------------------------------------//新一代 1T 8051系列单片机系统管理特殊功能寄存器// 7 6 5 4 3 2 1 0 Reset Valuesfr PCON = 0x87; //Power Control SMOD SMOD0 LVDF POF GF1 GF0 PD IDL 0001,0000// 7 6 5 4 3 2 1 0Reset Valuesfr AUXR = 0x8E; //Auxiliary Register T0x12 T1x12 UART_M0x6 BRTR S2SMOD BRTx12 EXTRAM S1BRS0000,0000//-----------------------------------sfr AUXR1 = 0xA2; //Auxiliary Register 1 - PCA_P4 SPI_P4 S2_P4 GF2 ADRJ - DPS 0000,0000 /*PCA_P4:0, 缺省PCA 在P1 口1,PCA/PWM 从P1 口切换到P4 口: ECI 从P1.2 切换到P4.1 口,PCA0/PWM0 从P1.3 切换到P4.2 口PCA1/PWM1 从P1.4 切换到P4.3 口SPI_P4:0, 缺省SPI 在P1 口1,SPI 从P1 口切换到P4 口: SPICLK 从P1.7 切换到P4.3 口MISO 从P1.6 切换到P4.2 口MOSI 从P1.5 切换到P4.1 口SS 从P1.4 切换到P4.0 口S2_P4:0, 缺省UART2 在P1 口1,UART2 从P1 口切换到P4 口: TxD2 从P1.3 切换到P4.3 口RxD2 从P1.2 切换到P4.2 口GF2: 通用标志位ADRJ:0, 10 位A/D 转换结果的高8 位放在ADC_RES 寄存器, 低2 位放在ADC_RESL 寄存器1,10 位A/D 转换结果的最高2 位放在ADC_RES 寄存器的低2 位, 低8 位放在ADC_RESL 寄存器DPS: 0, 使用缺省数据指针DPTR01,使用另一个数据指针DPTR1//-----------------------------------sfr WAKE_CLKO = 0x8F; //附加的 SFR WAK1_CLKO/*7 6 5 4 3 2 1 0 Reset ValuePCAWAKEUP RXD_PIN_IE T1_PIN_IE T0_PIN_IE LVD_WAKE _ T1CLKO T0CLKO 0000,0000Bb7 - PCAWAKEUP : PCA 中断可唤醒 powerdown。

STC12C5A60S2单片机的AD转换

STC12C5A60S2单片机的AD转换
AD_val/=100;
AD_val=(AD_val*5)/256; //AD的参考电压是单片机上的5v,所以乘5即为实 际电压居
return AD_val;
}_
void AD」nit(void)
{"
P1ASF = Oxff; //Pl口全部作为模拟功能A/D使用
ADC_RES = 0;〃清零转换结果寄存器高8位
0x08
//ADC启动控制位设为开
#define
ADC_SPEEDLLFra bibliotek0x00〃设为540个时钟周期ADC一次
#define
ADC_SPEEDL
0x20
〃设为360个时钟周期ADC一次
#define
ADC_SPEEDH
0x40
〃设为180个时钟周期ADC—次
#defi ne
ADC_SPEEDHH
0x60
_nop_();_nop_();_nop_();_nop_();〃要经过4个CPU时钟的延时,苴值才能够保证被 设置进ADC_CONTR?寄彩器?
while) !(ADC_CONTR&ADC_FLAG));〃等待转换完成
adc_data=ADC_RES;〃转换结果计算,取8位结果
ADC_CONTR&=~ADC_FLAG;〃关闭AD转换,ADC_FLAG位由软件淸0
AD_init();
while(l)
{ for(i=0;i<8;i++)
{
AD_work(i); delay(20);
}
) unsigned int AD_get(unsigned char n)〃笫n通道ADC采样函数
{
unsigned int adc_data;

STC12C5A系列AD转换C程序

STC12C5A系列AD转换C程序
AD_finished = 0;
while (AD_finished ==0 ) //等待A/D转换结束
{
AD_finished = (ADC_CONTR & 0x10); //0001,0000 测试A/D转换结束否
}
ADC_CONTR &= 0xE7; //1111,0111 清 ADC_FLAG 位, 关闭A/D转换,
_nop_();
ADC_CONTR |= 0x80; //启动 A/D 电源
delay(1); //使输入电压达到稳定
ADC_CONTR |= 0x08; //0000,1000 令 ADCS = 1, 启动A/D转换,
while(1)
{
ADC_result = get_AD_result(1);//P1.1 为 A/D 当前通道, 测量并发送结果
Send_Byte(0xAA); //为便于观察, 发送 2 个 0xAA
Send_Byte(0xAA);
}
//---------------------------------------------------------------------
INT8U get_AD_result(INT8U channel)
{
INT8U AD_finished=0; //存储 A/D 转换标志
#define BRT_start() AUXR |= 0x10 //启动独立波特率发生器 BRT 计数。
void initiate_RS232 (void) //串口初始化
{
ES = 0; //禁止串口中断
#include "NEW_8051.H"

stc 12c5a60s的ad转换程序有详细方式

stc 12c5a60s的ad转换程序有详细方式
{
while(!TI);
TI=0;
SBUF=dat;}
void Delay(WORD n)//延时函数
{
WORD x;
while(n--)
{
x=5000;
while(x--);
}
}
BYTE ch=0; //ch主要是为了用于控制那个ad选为下一个转换口
void Delay900ms();
void main() // 主函数开始
{
InitUart(); // 设置串口函数
InitADC(); // 开始转换函数 .ad转换使用的是中断方式。所以还有一个中断处理函数
IE=0XA0;
while(1);}
void adc_isr() interrupt 5 using 1 //stc12ad转换中断例程
{
ADC_CONTR&=!ADC_FLAG;//将ad转换完成标志致0. 此位与11101111相与得到的结果会是除了第4位是0其他为让保持原来的数据
P2=~P2;
P0=~P0;
SendData(ch); //将正在转换的ad输入口的名字牌号通过串口输出
SendData(ADC_RES); // 将数据高八位输出通过串口
SendData(ADC_LOW2); //将数据的低8位通过串口输出
ch++;
if(ch>8)
#include<reg51.h>
#include<intrins.h>
#define FOSC 18432000L //
#define BAUD 9600 //

用STC12C5A60S2测试AD转换程序

用STC12C5A60S2测试AD转换程序

刚到手一块STC12C5A60S2单片机,看说明文档里有AD转换功能。

于是写了这段程序测试学习一下,程序在我的学习板上运行稳定,如里要你只要改下I/O口即可。

里面注解挺详细的,愿对看文档的人有所帮助吧。

下面是主程序部份:# include <stc12c5a60s2.h># include <intrins.h># define uchar unsigned char# define uint unsigned int/* -------------函数声明开始--------------- */void delay_ms(uchar ms);//延时函数void init_adc(void); //初始化ADuint get_adc(void); //获取AD结果,返回UINT型值。

extern write1602_3b (uchar pos, uint n);extern void init_1602 ();/* -------------函数声明结束--------------- */void init_adc(void){P1ASF = 0x01; //AD功能寄存器,设置I/O口作为AD转换实用。

使用P1.0口。

ADC_RES = 0; //清理结果寄存器的值ADC_RESL = 0; //清理结果寄存器的值ADC_CONTR = 0x80; //开启AD电源并设置转换周期为540个时钟周期转换一次。

//ADC_POWER=1;CHS2,1,0为0,用p1.0作为输入。

SPEED1,0为0,540个时钟,delay_ms(2);}void delay_ms(uchar ms){uint i = 5000;while(ms--){while(i--);}}uint get_adc(void){uint d=0;ADC_CONTR = 0X88;_nop_();_nop_();_nop_();_nop_();while(!(ADC_CONTR & 0X10));ADC_CONTR &= ~0X10;d |= ADC_RES;d <<= 2;d |= ADC_RESL;return d;}void main (void){uint v=0;uint dat = 0;// P2M0 = 0X00;// P2M1 = 0XFF;_nop_();_nop_();_nop_();_nop_();_nop_();init_1602 ();init_adc();while(1){dat=get_adc();v = (uint)((dat*5.0*100)/1024);write1602_3b (0x48,v);delay_ms(10);}}下面是1602显示部分,在编译时要把两个程序都放入KEIL工程里。

单片机实现5v电压ad数模转换

单片机实现5v电压ad数模转换

Stc12c5a60s2系列单片机的A/d数模转换模块实验摘要:与时间成连续函数的物理量,一般都称之为模拟量。

人们在工业生产及科研过程中遇到的被测量绝大部分是模拟量。

例如:电压,电流,温度,压力,位移,速度等。

计算机技术是测量与控制自动化与智能化的关键,是现代测控技术的核心技术之一。

现代计算机是数字计算机,它无法直接处理模拟信号,因此欲实现基于计算机的测量与控制,必须具备将连续变化的模拟信号转变成计算机能够识别及处理的数字信号的手段。

为此模/数转换技术应运而成,并成为现代测控技术中的重要组成部分。

将模拟量转换为一定码制的数字量称为模/数转换。

Stc12c5a60s2系列单片机作为微型控制芯片的一种,其自身自带a/d装换口:P1(p1.0-p1.7),可实现数模转换功能。

实验目的:以Stc12c5a60s2单片机以及1602液晶显示屏做一个简易的”电压测量器“,测量线性稳压电源提供的直流电压,精度0.01v,通过调节电位器,将输入的电压转换为数字量实时显示在1602lcd上。

实现过程:1.理论学习:(1)在掌握1602lcd工作原理及使用方法的基础上,查阅Stc12c5a60s2单片机数模转换模块应用介绍,弄清楚a/d转换器的结构,了解a/d转换器是如何工作的。

(2)理解与a/d转换器相关的寄存器的设置,会根据实际需要设置相关的寄存器。

(3)了解如何配置a/d转换口,如何取出转换结果。

以十位结果为例,计算公式如下:Vcc即单片机实际工作电压,我们用单片机工作电压做模拟参考电压,则输出的实际电压vin=result(结果寄存器中的值)×vcc(单片机工作电压5v)/1024。

2.需注意的问题:(1)Stc12c5a60s2单片机的参考电压源是输入的工作电压vcc,所以一般不用外接参考电压源,如果单片机是采用电池供电,电池电压会在一定范围内漂移,所以vcc就不固定,这时候就需要在8路a/d转换的一个通道外接一个稳定的参考电压源,来计算此时的工作电压vcc,再计算出其他几路a/d转换通道的电压。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

A/D转换测试程序(ADC查询方式)
#include “stc12c5a.h”//头文件在STC公司主页上下载
#include ”intrins.h”
//与STC12C5A60S2单片机ADC相关的寄存器说明//
Sfr ADC_CONTR = 0xBC;//AD转换控制寄存器
Sfr ADC_RES = 0xBD;//AD转换结果寄存器高
Sfr ADC_RESL = 0xBE;//AD转换结果寄存器低
Sfr P1ASF = 0x9D;//P1口模拟转换功能控制寄存器
Sfr AURX1 = 0xA2;//AD转换结果存储方式控制位
#define ADC_POWER 0x80 //ADC电源开
#define ADC_FLAG 0x10 //ADC结束标志位
#define ADC_START 0x08 //ADC启动控制位设为开
#define ADC_SPEEDLL 0x00 //设为540个时钟周期ADC一次
#define ADC_SPEEDL 0x20 //设为360个时钟周期ADC一次
#define ADC_SPEEDH 0x40 //设为180个时钟周期ADC一次
#define ADC_SPEEDHH 0x60 //设为90个时钟周期ADC一次
void AD_init(void);
void delay(unsigned int a);
unsigned int AD_get(unsigned char n);
float AD_work(unsigned char n);
void main()
{
unsigned char i;
AD_init();
while(1)
{
for(i=0;i<8;i++)
{
AD_work(i);
delay(20);
}
}
}
unsigned int AD_get(unsigned char n) //第n通道ADC采样函数
{
unsigned int adc_data;
ADC_RES = 0; //清零
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|n|ADC_START;//打开AD转换电源、
设定转换速度、设定通道号、AD转换开始
_nop_();_nop_();_nop_();_nop_();//要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR?寄存器?
while(!(ADC_CONTR&ADC_FLAG)); //等待转换完成
adc_data=ADC_RES; //转换结果计算,取8位结果
ADC_CONTR&=~ADC_FLAG;//关闭AD转换,ADC_FLAG位由软件清0
return adc_data;???//返回ADC的值
}
float AD_work(unsigned char n)
{
float AD_val; //定义处理后的数值AD_val为浮点数
unsigned char i;
for(i=0;i<100;i++)
AD_val+=AD_get(n); //转换100次求平均值(提高精度)
AD_val/=100;
AD_val=(AD_val*5)/256; //AD的参考电压是单片机上的5v,所以乘5即为实际电压值
return AD_val;
}
void AD_init(void)
{
P1ASF = 0xff; //P1口全部作为模拟功能A/D使用
ADC_RES = 0; //清零转换结果寄存器高8位
ADC_CONTR = ADC_POWER|ADC_SPEEDLL;
delay(2); //等待1ms,让AD电源稳定
}
void delay(unsigned int a)
{
unsigned int i;
while (a--)
{
i=5000;
while(i--);
}
}。

相关文档
最新文档