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

📄 测电压.txt

📁 电压测试 基于C8051F330的电压测试 数据采集运用了ADC0809
💻 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 + -