⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad_4.c

📁 利用c语言实现单片机中的AD转换电路的程序设计
💻 C
字号:
/**********************************************
*   File: AD_4.C
*   Description: Photoresistor Measurement
*   Created Date:  2007-10-01
*   Last Modified: 2007-10-01
*   Author: Jeffrey - Schicksal@126.com
*   Notes: None
**********************************************/
#include "Atmel/AT89X51.h"
#include "INTRINS.H"

//*******定义AD7812控制端口*****************//
#define TFS_RFS P1_0
#define DOUT P1_1
#define DIN P1_2
#define SCLK P1_3
#define CONVST P1_4
//*******定义AD7812控制端口*****************//

#define RPOT 1000					// 定义参考电阻大小

volatile unsigned int AD7812_RES; 	// AD转换结果

void InitAD7812();
void CommAD7812(unsigned int cmd);
void Start_AD();

/**********************************************
*   Function: delay(unsigned int t)
*   Input Variables: t
*   Return Variables: None
*   Usage: Common Delay Routine, t as the delay time ticks
**********************************************/
void delay(unsigned int t)
{
	for(;t>0;t--);		// 延时循环
}

/**********************************************
*   Function: main()
*   Input Variables: None
*   Return Variables: None
*   Usage: Program Entry
*********************************************/
void main()
{
	unsigned int AD_Result;				// AD转换值
	unsigned int _RES;					// 实测电阻值
	unsigned long int cTemp;			// 计算辅助变量
	unsigned char LED;				    // LED跑马灯指示变量
	unsigned char i;					// 临时变量i
	InitAD7812();	  					// 启动AD7812
	delay(50);    	  					// 启动时间约1.5us,延迟
	
	while(1)
	{
		Start_AD();	  					// 启动一次转换	
		delay(100);   					// 转换时间约2.3us,延迟
		CommAD7812(0x4040);				// 设置下一次转换参数,读取AD转换值
		AD_Result = AD7812_RES>>10;		// 将转换值由左对齐变为右对齐  
		//********************主程序部分*********************//
		
		cTemp = ((unsigned long int)AD_Result)*5000/(1024-1);  // 计算实际转换的电压值 (mV)
		_RES = cTemp*RPOT/(5000-cTemp);						   // 计算实际测量电阻值
		LED = 0xff;				// 初始化
		i = cTemp / 625;     	// 计算移位值
		LED = LED<<i;			// LED移位计算显示变量
		P0 = LED;				// 显示LED			
		//********************主程序部分*********************//
	}
}

/**********************************************
*   Function: InitAD7812()
*   Input Variables: None
*   Return Variables: None
*   Usage: Init AD7812
*********************************************/
void InitAD7812()
{
	CONVST = 1;	  				// 置高CONVST	
	CommAD7812(0x6040);			// 启动AD7812	
}

/**********************************************
*   Function: InitAD7812()
*   Input Variables: unsigned int cmd
*   Return Variables: None
*   Usage: Communication with AD7812
*********************************************/
void CommAD7812(unsigned int cmd)
{
	unsigned char ip;			// 循环变量
	unsigned int pbit;			// 移位指针
	unsigned char tempres;      // 读取值变量
	AD7812_RES = 0;				// 清零转换变量
	pbit = 0x8000;				// 初始化移位指针
	TFS_RFS = 0;				// 置低TFS_RFS
	_nop_();                    // _nop_()
	TFS_RFS = 1;				// RFS上升沿
	SCLK = 0;					// SCLK清0
	_nop_();					// _nop_()
	SCLK = 1;				    // SCLK上升沿
	TFS_RFS = 0;                // TFS上升沿
	for(ip = 0;ip < 16;ip++)	// 发送16bit数据
	{
		AD7812_RES <<= 1;		// AD转换值移位
		DOUT = 1;			    // DOUT置高,准备读数
		DIN = (cmd&pbit)?1:0;   // DIN位
		_nop_();                // _nop_()
		_nop_();				// _nop_()
		SCLK = 0;				// SCLK请零
		tempres = DOUT;			// 读取一位
		AD7812_RES += tempres;	// 读取值 
		_nop_();				// _nop_()
		_nop_();    			// _nop_()
		SCLK = 1;				// SCLK上升沿
		pbit >>= 1;				// 指针移位
	}
}

/**********************************************
*   Function: Start_AD()
*   Input Variables: void
*   Return Variables: void
*   Usage:  Start a Conversion
*********************************************/
void Start_AD()
{
	CONVST = 0;						// CONVST下降沿,启动AD转换
	_nop_();						// _nop_
	CONVST = 1;						// CONVST恢复高电平
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -