📄 ad_4.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 + -