/*********************************************************************************************
函数名:8位A/D转换初始化函数
调 用:Read (?);
参 数:输入的端口(0000 0XXX 其中XXX是设置输入端口号,可用十进制0~7表示,0表示P1.0,7表示P1.7)
返回值:无
结 果:开启ADC功能并设置ADC的输入端口
备 注:适用于STC12C2052AD系列单片机(必须使用STC12C2052AD.h头文件)
/**********************************************************************************************/
void Read_init (unsigned char CHA){
unsigned char AD_FIN=0; //存储A/D转换标志
CHA &= 0x07; //选择ADC的8个接口中的一个(0000 0111 清0高5位)
ADC_CONTR = 0x40; //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)
_nop_();
ADC_CONTR |= CHA; //选择A/D当前通道
_nop_();
ADC_CONTR |= 0x80; //启动A/D电源
DELAY_MS(1); //使输入电压达到稳定(1ms即可)
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:8位A/D转换函数
调 用:? = Read ();
参 数:无
返回值:8位的ADC数据
结 果:读出指定ADC接口的A/D转换值,并返回数值
备 注:适用于STC12C2052AD系列单片机(必须使用STC12C2052AD.h头文件)
/**********************************************************************************************/
unsigned char Read (void){
unsigned char AD_FIN=0; //存储A/D转换标志
ADC_CONTR |= 0x08; //启动A/D转换(0000 1000 令ADCS = 1)
_nop_();
_nop_();
_nop_();
_nop_();
while (AD_FIN ==0){ //等待A/D转换结束
AD_FIN = (ADC_CONTR & 0x10); //0001 0000测试A/D转换结束否
}
ADC_CONTR &= 0xE7; //1111 0111 清ADC_FLAG位, 关闭A/D转换,
return (ADC_DATA); //返回A/D转换结果(8位)
}
/**********************************************************************************************/
以上- 8位ADC程序模块(适用于STC12C2052AD系列)
/*********************************************************************************************
程序名: 8位ADC转换实验程序
编写人: 杜洋
编写时间: 2010年3月24日
硬件支持: STC12C2052AD 使用ADC功能 外部晶体12MHz
接口说明:
修改日志:
1-
/*********************************************************************************************
说明:
PC串口端设置 [ 4800,8,无,1,无 ]
将ADC读出的数值通过串口以十六进制方式显示。
/*********************************************************************************************/
#include <STC12C2052AD.H> //单片机头文件
#include <intrins.h> //51基本运算(包括_nop_空函数)
/*********************************************************************************************
函数名:毫秒级CPU延时函数
调 用:DELAY_MS (?);
参 数:1~65535(参数不可为0)
返回值:无
结 果:占用CPU方式延时与参数数值相同的毫秒时间
备 注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
unsigned int i;
while( a-- != 0){
for(i = 0; i < 600; i++);
}
}
/*********************************************************************************************/
/*********************************************************************************************
函数名:UART串口初始化函数
调 用:UART_init();
参 数:无
返回值:无
结 果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)
备 注:振荡晶体为12MHz,PC串口端设置 [ 4800,8,无,1,无 ]
/**********************************************************************************************/
void UART_init (void){
//EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
//ES = 1; //允许UART串口的中断
TMOD = 0x20; //定时器T/C1工作方式2
SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
TH1 = 0xF3; //定时器初值高8位设置
TL1 = 0xF3; //定时器初值低8位设置
PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)
TR1 = 1; //定时器启动
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:UART串口发送函数
调 用:UART_T (?);
参 数:需要UART串口发送的数据(8位/1字节)
返回值:无
结 果:将参数中的数据发送给UART串口,确认发送完成后退出
备 注:
/**********************************************************************************************/
void UART_T (unsigned char UART_data){ //定义串口发送数据变量
SBUF = UART_data; //将接收的数据发送回去
while(TI == 0); //检查发送中断标志位
TI = 0; //令发送中断标志位为0(软件清零)
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:8位A/D转换初始化函数
调 用:Read (?);
参 数:输入的端口(0000 0XXX 其中XXX是设置输入端口号,可用十进制0~7表示,0表示P1.0,7表示P1.7)
返回值:无
结 果:开启ADC功能并设置ADC的输入端口
备 注:适用于STC12C2052AD系列单片机(必须使用STC12C2052AD.h头文件)
/**********************************************************************************************/
void Read_init (unsigned char CHA){
unsigned char AD_FIN=0; //存储A/D转换标志
CHA &= 0x07; //选择ADC的8个接口中的一个(0000 0111 清0高5位)
ADC_CONTR = 0x40; //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)
_nop_();
ADC_CONTR |= CHA; //选择A/D当前通道
_nop_();
ADC_CONTR |= 0x80; //启动A/D电源
DELAY_MS(1); //使输入电压达到稳定(1ms即可)
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:8位A/D转换函数
调 用:? = Read ();
参 数:无
返回值:8位的ADC数据
结 果:读出指定ADC接口的A/D转换值,并返回数值
备 注:适用于STC12C2052AD系列单片机(必须使用STC12C2052AD.h头文件)
/**********************************************************************************************/
unsigned char Read (void){
unsigned char AD_FIN=0; //存储A/D转换标志
ADC_CONTR |= 0x08; //启动A/D转换(0000 1000 令ADCS = 1)
_nop_();
_nop_();
_nop_();
_nop_();
while (AD_FIN ==0){ //等待A/D转换结束
AD_FIN = (ADC_CONTR & 0x10); //0001 0000测试A/D转换结束否
}
ADC_CONTR &= 0xE7; //1111 0111 清ADC_FLAG位, 关闭A/D转换,
return (ADC_DATA); //返回A/D转换结果(8位)
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:主函数
调 用:无
参 数:无
返回值:无
结 果:程序开始处,无限循环
备 注:
/**********************************************************************************************/
void main (void){
unsigned char R;
UART_init();//串口初始程序
Read_init(0);//ADC初始化
P1M0 = 0x01; //P1.7~.0:0000 0001(高阻)//注意:更改ADC通道时须同时将对应的IO接口修改为高阻输入。
P1M1 = 0x00; //P1.7~.0:0000 0000(强推)
while(1){
R = Read ();
UART_T (R); //串口小秘书,将ADC读出值送入串口显示
}
}
以上- 8位ADC应用实例(适用于STC12C2052AD系列)
/*********************************************************************************************
函数名:10位A/D转换初始化函数
调 用:Read_init (?);
参 数:输入的端口(0000 0XXX 其中XXX是设置输入端口号,可用十进制0~7表示,0表示P1.0,7表示P1.7)
返回值:无
结 果:开启ADC功能并设置ADC的输入端口
备 注:使用ADC功能时需要将对应的IO接口设置为高阻输入方式(例如:P1M1 = 0x01;)
/**********************************************************************************************/
void Read_init (unsigned char CHA){
unsigned char AD_FIN=0; //存储A/D转换标志
CHA &= 0x07; //选择ADC的8个接口中的一个(0000 0111 清0高5位)
ADC_CONTR = 0x40; //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)
_nop_();
ADC_CONTR |= CHA; //选择A/D当前通道
_nop_();
ADC_CONTR |= 0x80; //启动A/D电源
DELAY_MS(1); //使输入电压达到稳定(1ms即可)
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:10位A/D转换函数
调 用:? = ADC_Read();
参 数:无
返回值:10位ADC数据高(从0到1023(十进制))
结 果:读出指定ADC接口的A/D转换值,并返回数值
备 注:适用于STC12C5A60S2系列单片机(必须使用STC12C5A60S2.h头文件)
/**********************************************************************************************/
unsigned int ADC_Read (void){
unsigned char AD_FIN=0; //存储A/D转换标志
ADC_CONTR |= 0x08; //启动A/D转换(0000 1000 令ADCS = 1)
_nop_();
_nop_();
_nop_();
_nop_();
while (AD_FIN ==0){ //等待A/D转换结束
AD_FIN = (ADC_CONTR & 0x10); //0001 0000测试A/D转换结束否
}
ADC_CONTR &= 0xE7; //1111 0111 清ADC_FLAG位, 关闭A/D转换,
return (ADC_RES*4+ADC_RESL);//返回A/D转换结果(10位ADC数据高8位在ADC_RES中,低2位在ADC_RESL中)
}
以上- 10位ADC程序模块(适用于STC12C5A60S2系列)
/*********************************************************************************************
程序名: 10位ADC转换实验程序
编写人: 杜洋
编写时间: 2010年3月24日
硬件支持: STC12C5A60S2 使用10位ADC功能 外部晶体12MHz
接口说明: P1.0接口接电位器
修改日志:
1-
/*********************************************************************************************
说明:
PC串口端设置 [ 4800,8,无,1,无 ]
将ADC读出的数值通过串口以十六进制方式显示(第一个数据是ADC高8位,第二个数据是ADC低2位)。
/*********************************************************************************************/
#include <STC12C5A60S2.H> //单片机头文件
#include <intrins.h> //51基本运算(包括_nop_空函数)
/*********************************************************************************************
函数名:毫秒级CPU延时函数
调 用:DELAY_MS (?);
参 数:1~65535(参数不可为0)
返回值:无
结 果:占用CPU方式延时与参数数值相同的毫秒时间
备 注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
unsigned int i;
while( a-- != 0){
for(i = 0; i < 600; i++);
}
}
/*********************************************************************************************/
/*********************************************************************************************
函数名:UART串口初始化函数
调 用:UART_init();
参 数:无
返回值:无
结 果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)
备 注:振荡晶体为12MHz,PC串口端设置 [ 4800,8,无,1,无 ]
/**********************************************************************************************/
void UART_init (void){
//EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
//ES = 1; //允许UART串口的中断
TMOD = 0x20; //定时器T/C1工作方式2
SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
TH1 = 0xF3; //定时器初值高8位设置
TL1 = 0xF3; //定时器初值低8位设置
PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)
TR1 = 1; //定时器启动
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:UART串口发送函数
调 用:UART_T (?);
参 数:需要UART串口发送的数据(8位/1字节)
返回值:无
结 果:将参数中的数据发送给UART串口,确认发送完成后退出
备 注:
/**********************************************************************************************/
void UART_T (unsigned char UART_data){ //定义串口发送数据变量
SBUF = UART_data; //将接收的数据发送回去
while(TI == 0); //检查发送中断标志位
TI = 0; //令发送中断标志位为0(软件清零)
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:10位A/D转换初始化函数
调 用:Read_init (?);
参 数:输入的端口(0000 0XXX 其中XXX是设置输入端口号,可用十进制0~7表示,0表示P1.0,7表示P1.7)
返回值:无
结 果:开启ADC功能并设置ADC的输入端口
备 注:适用于STC12C5A60S2系列单片机(必须使用STC12C5A60S2.h头文件)
/**********************************************************************************************/
void Read_init (unsigned char CHA){
unsigned char AD_FIN=0; //存储A/D转换标志
CHA &= 0x07; //选择ADC的8个接口中的一个(0000 0111 清0高5位)
ADC_CONTR = 0x40; //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)
_nop_();
ADC_CONTR |= CHA; //选择A/D当前通道
_nop_();
ADC_CONTR |= 0x80; //启动A/D电源
DELAY_MS(1); //使输入电压达到稳定(1ms即可)
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:10位A/D转换函数
调 用:ADC_Read ();
参 数:无
返回值:无(10位ADC数据高8位存放在ADC_RES中,低2位存放在ADC_RESL中)
结 果:读出指定ADC接口的A/D转换值,并返回数值
备 注:适用于STC12C5A60S2系列单片机(必须使用STC12C5A60S2.h头文件)
/**********************************************************************************************/
void ADC_Read (void){
unsigned char AD_FIN=0; //存储A/D转换标志
ADC_CONTR |= 0x08; //启动A/D转换(0000 1000 令ADCS = 1)
_nop_();
_nop_();
_nop_();
_nop_();
while (AD_FIN ==0){ //等待A/D转换结束
AD_FIN = (ADC_CONTR & 0x10); //0001 0000测试A/D转换结束否
}
ADC_CONTR &= 0xE7; //1111 0111 清ADC_FLAG位, 关闭A/D转换,
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:主函数
调 用:无
参 数:无
返回值:无
结 果:程序开始处,无限循环
备 注:
/**********************************************************************************************/
void main (void){
UART_init();//串口初始程序
Read_init(0);//ADC初始化
P1M1 = 0x01; //P1.7~P1.0:0000 0001(高阻)//注意:更改ADC通道时须同时将对应的IO接口修改为高阻输入。
P1M0 = 0x00; //P1.7~P1.0:0000 0000(强推)
while(1){
ADC_Read ();//调用ADC转换程序
UART_T (ADC_RES); //串口小秘书,将ADC读出值高8位送入串口 0000 0000
UART_T (ADC_RESL); //串口小秘书,将ADC读出值低2位送入串口 XXXX XX00
}
}
以上- 10位ADC应用实例(适用于STC12C5A60S2系列)
引用
注意事项:
1. STC12C5A60S2系列内置10位ADC,STC12C2052AD系列内置8位ADC。
2. 在使用ADC功能时,应将其输入端的I/O接口设置为高阻输入工作方式。
3. 更改ADC通道时须同时将对应的IO接口修改为高阻输入。
4. STC12C5A60S2系列的10位ADC数据中,高8位存放在ADC_RES中,低2位存放在ADC_RESL中。
STC12C5A60S2.h头文件中对ADC部分的定义如下:
sfr ADC_CONTR = 0xBC; //A/D 转换控制寄存器 ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000
sfr ADC_RES = 0xBD; //A/D 转换结果高8位 ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2 0000,0000
sfr ADC_RESL = 0xBE; //A/D 转换结果低2位 ADCV.1 ADCV.0 0000,0000
可将其模板下载到本地硬盘,在编写新程序的时候复制、粘贴到工程当中,然后根据情况写入具体内容。
- 大小: 283.5 KB
分享到:
相关推荐
《MCS-51单片机C语言编程100例》是一份专注于STC单片机编程的实践教程,其核心是通过100个实际的C语言编程实例,帮助学习者掌握MCS-51系列单片机的使用技巧和应用方法。这份资源特别强调了STC15F2K60S2型号的单片机...
在电子工程领域,单片机(Microcontroller)是广泛应用的微控制器,51单片机则是其中的经典代表,因其指令集简洁且易于学习而受到广大工程师的青睐。本项目主要探讨了如何使用51单片机来控制ADC0808芯片进行模拟到...
A/D模块初始化子程序主要用于配置ADC的相关参数,包括但不限于选择ADC转换通道、开启ADC转换器以及设置ADC的时钟源。正确的配置对于确保ADC正常工作至关重要。例如,如果需要同时监测多个模拟信号,可以通过配置不同...
《51单片机C语言编程实例》是针对电子工程初学者的一本宝贵教程,它旨在帮助读者深入理解和掌握51系列单片机的C语言编程技术。51单片机,作为微控制器领域的经典型号,广泛应用于各种嵌入式系统,如家用电器、汽车...
8. **模拟I/O操作**:AVR单片机的ADC(模数转换器)和DAC(数模转换器)功能,允许与模拟电路交互。编程时,需要设置采样率、参考电压等参数,并使用相应的库函数。 9. **存储器管理**:了解内部RAM和Flash ROM的...
在“51单片机C语言编程入门(详讲版).pdf”这个教程中,你将深入学习如何编写驱动程序,实现硬件功能,如控制继电器、使用ADC进行模拟信号采集、串行通信(UART)等。同时,还会涉及实际项目的设计与实现,提升你的...
7. **模拟电路和ADC**:介绍AVR单片机的模数转换器(ADC),如何读取模拟信号并进行处理。 8. **中断系统**:深入解析中断机制,如何设置中断向量、编写中断服务函数,以及中断优先级管理。 9. **实际项目应用**:...
《51单片机C语言应用程序设计实例精讲(第2版)》是一本深入浅出的教程,专为那些想要掌握51系列单片机C语言编程的读者设计。这本书通过丰富的实例,帮助读者理解并掌握单片机C语言编程的基础与技巧,尤其适合初学者和...
《51单片机C语言实例大全》是一个深入学习51单片机编程的重要资源,它涵盖了28个不同主题的实例,旨在帮助用户通过实践理解51单片机的C语言编程。51单片机是微控制器领域中非常经典的一款产品,广泛应用于各种电子...
单片机C语言程序设计 160128液晶曲线显示ADC0832两路模数转换结果(有源码)单片机C语言程序设计 160128液晶曲线显示ADC0832两路模数转换结果(有源码)单片机C语言程序设计 160128液晶曲线显示ADC0832两路模数转换...
51单片机内部通常包含一个或多个A/D转换器,用于读取传感器等设备输出的模拟信号。 在Proteus中进行51单片机的A/D转换实验,首先需要配置单片机的A/D转换器。51单片机的A/D转换通常涉及以下几个步骤: 1. **初始化...
PIC单片机是一种广泛使用的单片机系列,以其高性能、低功耗和...通过逐步深入学习,开发者可以掌握更复杂的编程技巧,如中断服务程序的编写、定时器的使用、ADC转换以及串口通信等,从而实现更丰富的单片机应用开发。
本教程“51单片机C语言入门简单30例”旨在帮助初学者快速掌握51单片机的C语言编程技巧,通过实际的例程来提升理解和应用能力。 首先,我们要了解51单片机的基本结构,它包含中央处理器(CPU)、存储器(包括ROM和...
总结来说,PIC单片机C语言编程实例展示了如何通过C语言编写程序来控制PIC单片机的外围设备,如LED的亮灭。同时,重点介绍了SPI串行通信协议的初始化和数据发送过程,这些知识点对于学习嵌入式系统开发具有重要作用。...
4. **ADC和DAC的使用**:讲解模拟数字转换器(ADC)和数字模拟转换器(DAC)的编程方法。 5. **外设驱动开发**:通过对常见外设(如LCD显示屏、键盘矩阵等)的驱动程序设计,加深对单片机与外设交互的理解。 通过上述...
3. ADC/DAC接口:与模拟电路交互,实现模数转换和数模转换,用于数据采集和信号处理。 4. UART串行通信:实现单片机与其他设备的通信,例如发送和接收ASCII码字符,理解串行通信协议和波特率设置。 5. 存储器扩展:...
本压缩包“51单片机C语言程序大全”则是一份珍贵的资源集合,包含了作者张鹏辉编写并调试通过的51单片机C语言程序。 51单片机C语言编程相较于汇编语言,具有更易读、易懂、易维护的优点。C语言是一种高级编程语言,...
本资源“51单片机C语言配套程序”提供了丰富的实例代码,旨在帮助学习者理解和掌握51单片机的基本操作以及C语言编程技巧。下面将详细解释这些程序所涵盖的知识点。 1. **EEPROM读写**:EEPROM(电可擦除可编程只读...
ADC数模转换程序是电子工程领域中的一个重要环节,特别是在微控制器(如51单片机)的应用中。在这个程序中,我们关注的是如何将数字数据转换为模拟信号,以便能够处理物理世界的电压测量。51单片机是一种广泛应用的8...