📄 main.c
字号:
//#pragma src
// ***************交流采样测试成功****************
/*======================================================
CopyRight by Protronic .Ltd
Project: AC Voltage Caputure testing system
Fiel Name: at89s52
Creator: LaiYongZhong
Create Date: 2005/08/20
Last modify: 2006/02/20
交流采样原理:就是根据一个周期各采样瞬时值及每周期采样点数计算电压信号有效值的公式。
计算步骤:
1: 先计算每次采样数据对应的实际电压值(要跟据A/D,基准参数确定),再求其平方
2: 再将N次采样实际电压值的平方值求和,然后求其平均值
3: 将平均值开方,得出的数值就是电压的有效值了。
注意:此采用的A/D器件应有允许‘正负输入’这一量程。如:MAX1271,ADS7808,等
=======================================================*/
//////////////////////////////////////////////////////////////////////////////
#include<REG51.h>
#include<intrins.h>
#include<absacc.h>
#include<math.h>
#include<stdio.H>
#include<string.h>
////////////////////////////////////////////////////////////////////////////////
//#define _PC_DEBUG_
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define nop _nop_()
#define Timeout 0xfff
#define ADCPoint_SIZE 50
#define Vref 10 //+/-5v
#define LSB_12bit 4096
#define TRUE 1
#define FALSE 0
//-----输入口----------
////////ADS7808(12BIT)///////////////
sbit ADS7808_RC =P1^3 ;
sbit ADS7808_CLK =P1^4 ;
sbit ADS7808_CS =P1^5;
sbit ADS7808_DATA =P1^7 ;
sbit TEST_key =P3^6;
//==============================================================
uint idata *pADC_buffer ; //定义存放A/D转换结果的数组,
static uchar byADC_count;
bit bSTART_ADC;
//-----------------------------------------------------------------
#define XPORT1 XBYTE[0X000]
#define XPORT2 XBYTE[0X001]
//##################################################
////////////////////////////////////////////////////
// 初始化系统
///////////////////////////////////////////////////
void INI_SYS(void){
uint i;
P0=P1=P2=P3=0XFF;
pADC_buffer=0x80;
// pADC_buffer[0]=0x44;
TMOD= 0X01; //T0 model1 16bit
TL0 = 0XE0;
TH0 = 0XFC; //400US
ET0 = 1;
EA = 1;
for(i=0;i<ADCPoint_SIZE;i++) pADC_buffer[i]=0;
#ifdef _PC_DEBUG_
SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TL1=TH1 = 0XFD; /* TH1: reload value for 1200 baud @ 16MHz */
TR1 = 1; /* TR1: timer 1 run */
TI = 1; /* TI: set TI to send first char of UART */
#endif
}
////////////////////////////////////////
//================================================
void delay1ms(uchar m)
{
uint i;
do{
m-- ;
for(i=1000;i>0;i--);
}while(m) ;
}
/*****************************************************************
函数原型: void Read2_ADS7808(void)
参数: 无
返回值: Read
描述: 读ADS7808数据存于指定数组中(12bit数据)(1次读性12bit)
测试Y/N: N
****************************************************************/
uint Read_ADS7808(void)
{
uint Read=0x0000;
uchar i;
ADS7808_CS=0; //开芯片使能
ADS7808_RC=0; //读使能(1:读数据操作:0:启动转
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -