📄 测电压.txt
字号:
#include <c8051f330.h>
#include <stdio.h>
//-----------------------------------------------------------------------------
// 定义16位特殊功能寄存器
//-----------------------------------------------------------------------------
sfr16 ADC0 = 0xbd;
//-----------------------------------------------------------------------------
// 全局变量定义
//-----------------------------------------------------------------------------
char i=0;
char j,k,n;
int result;
int max;
float v;
//-----------------------------------------------------------------------------
//定义常量
//-----------------------------------------------------------------------------
#define SYSCLK 24500000
#define SAMPLE_RATE 50000
//------------------------------------------------------------------------------------
// 定义函数
//------------------------------------------------------------------------------------
void SYSCLK_Init (void);
void PORT_Init (void);
void ADC0_Init(void);
void ADC0_ISR (void);
//void delay(unsigned int N);
//------------------------------------------------------------------------------------
// 主程序
//------------------------------------------------------------------------------------
void main (void)
{
int ADCRESULT[51] ;
PCA0MD &= ~0x40; // 禁止看门狗
SYSCLK_Init ();
PORT_Init ();
ADC0_Init();
EA=1; // 开总中断
for(k=1;k<=50;k++)
{
AD0BUSY = 1; // 向ADC0写1将启动转换
while(AD0INT==0); // AD0INT 为1时转换结束
//delay(100);
ADCRESULT[k]=result; // 此处设断点,观察ADCRESULT的结果
}
max = ADCRESULT[1];
for(n=2;n<=50;n++)
{
while(ADCRESULT[n]> max)
{
max = ADCRESULT[n];
j = n;
}
}
v = max;
v = max*2.44/1024.0;
v = (4*v +0.7)*6.12;
}
//------------------------------------------------------------------------------------
// 端口初始化
//------------------------------------------------------------------------------------
//P0.0 电压输入
void PORT_Init (void)
{
P0MDIN = 0x00; // P0引脚被配置为模拟输入
P0SKIP = 0x03; // P0.0和P0.1被交叉开关跳过
P0MDOUT = 0x01; // P0.0输出为推挽方式
P1SKIP = 0xff; // P1引脚被交叉开关跳过
XBR1 = 0x40; // 交叉开关被使能
}
//-----------------------------------------------------------------------------
// 系统时钟初始化
//-----------------------------------------------------------------------------
void SYSCLK_Init (void)
{
OSCICN |= 0x83; // SYSCLK为内部H-F振荡器输出24.5MHz
RSTSRC = 0x04;
}
//-----------------------------------------------------------------------------
// ADC0初始化
//-----------------------------------------------------------------------------
void ADC0_Init (void)
{
ADC0CN = 0x80; // ADCOCN中的值为80时分别为向AD0BYSY写1
AMX0P = 0x00; // P0.0为电压输入
AMX0N = 0x11; // 单端输入
ADC0CF = (SYSCLK/3000000) << 3;
ADC0CF &=~0x04;
REF0CN = 0x03; // 采用内部参考电压
EIE1 |= 0x08; // 允许AD0INT 的中断请求
}
//-----------------------------------------------------------------------------
// ADC中断处理
//-----------------------------------------------------------------------------
void ADC0_ISR (void) interrupt 10
{
AD0INT =0;
result= ADC0;
i++;
}
//-----------------------------------------------------------------------------
// 延时程序
/*void delay(unsigned int N)
{
unsigned int p;
for(p=0;p<N;p++);
} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -