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

📄 change.c

📁 伺服马达控制的C51程序。 文件: sifu*.c sifu*.Uv2 sifu*.hex 等相关文件。
💻 C
字号:
/****************************************************************/
/*Module: Hua Wei battery fixture
/*Creator: lianghaodang
/*Date: 01/28/2008   
/*Description: test the battery voltage
/****************************************************************/
#include<AT892051.h>
#include<stdio.h>
#include<math.h>
#include<intrins.h>

sfr  ADC_CONTR = 0xC5;
sfr  ADC_DATA  = 0xC6;
sfr  ADC_LOW2  = 0xBE;
sfr  P1M0	   = 0x91;
sfr  P1M1      = 0x92;

sbit  CHANGE = P3^7;
sbit  PASS = P1^7;
sbit  FAIL = P1^6;
sbit  KEY = P1^5;

unsigned int Counter,Battery_Voltage_Hex;
unsigned char ADC_Highdata,ADC_Lowdata;
float Battery_Voltage_Data,Battery_Temp_Voltage_Data;
void Send(unsigned char S_Number);
void Delayms(unsigned char ms);
void Read_Battery_Voltage(void);

//----------------------------------------
void main(void)
{      
	P1 = 0XFF;
    P3 = 0XFF;
	P1M0 = 0x01;
	P1M1 = 0x01;
    FAIL = 1;
	PASS = 1;
	CHANGE = 1;
	Counter = 0;
	ADC_Highdata = 0x00;
	ADC_Lowdata  = 0x00;
/*
	ADC_Highdata = 0xB3;
	ADC_Lowdata  = 0x01;
	Battery_Voltage_Hex = (ADC_Highdata<<2)|ADC_Lowdata;
	Battery_Voltage_Data = (Battery_Voltage_Hex*5.180)/1024;
	if(Battery_Voltage_Data<3.8)
	{
		PASS = 1;
	}else PASS = 0;
*/
    ES   = 0;
	TMOD = 0x21;
	SCON = 0x50;
	PCON = 0x00;
	TH1 = 0xFD;
	TL1 = 0xFD;
	TH0 = 0xFC;
	TL0 = 0x18;
	IE  = 0x82;
	RI  = 0;								
	TR1 = 1;
	TR0 = 1;			
while(1)
	{
	FAIL = 1;
	CHANGE = 1;
	PASS = 1;

while(~KEY)
	   {
	PASS = 0;
	do{}while(Counter<250);
	Counter = 0;
	Read_Battery_Voltage();
	if((Battery_Voltage_Data<4.15)&&(Battery_Voltage_Data>2.5))
			{
	CHANGE = 0;
	do{}while(Counter<250);
	Counter = 0;
	FAIL = ~FAIL;
			}else CHANGE = 1;	
	Send(ADC_Highdata);
	Send(ADC_Lowdata);
		}
	}
}

void Read_Battery_Voltage(void)
{
/************** AD ********************/
	ADC_CONTR = (ADC_CONTR|0x80); 
	//open the AD power 
	ADC_CONTR = (ADC_CONTR&0xE0);
	//CLR the ADC_FLAG,ADC_START,LOW 3 Bit,and select channel P1.0
	Delayms(100);
	ADC_DATA = 0x00;
	ADC_LOW2 = 0x00;//CLR the data
	ADC_CONTR = (ADC_CONTR|0x08); //Start the AD
	while((ADC_CONTR&0x10)==0);   //wait the AD finished
	ADC_CONTR = (ADC_CONTR&0xE7); //CLR the ADC_FLAG
	ADC_Highdata = ADC_DATA;      //High 8 bit data
	ADC_Lowdata  = (ADC_LOW2&0x03); //Low 2 bit data
	ADC_CONTR = (ADC_CONTR&0x7F); 
	Battery_Voltage_Hex = (ADC_Highdata<<2)|ADC_Lowdata;
	Battery_Voltage_Data = (Battery_Voltage_Hex*5.180)/1024;
	
	//closed the AD power 
/***************** AD *****************/
}

/********** T0 interrupt ****************/
void time0(void) interrupt 1
{
	Counter++;
	TH0 = 0xFC;
	TL0 = 0x18;
}

/*********** Send Number to PC Serial_PORT */
void Send(unsigned char S_Number)
   {
	SBUF = S_Number;
	while(TI==0);
	TI = 0;
   }
/********************************************/

void Delayms(unsigned char ms)	
// relay ms
{	unsigned char i;
	while(ms--)
	{
		for(i = 0; i < 120; i++);
	}
}


	
			
	





	


⌨️ 快捷键说明

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