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

📄 envcar.c

📁 16F876 控制 LM629 的原程序.
💻 C
字号:
#include "pic.h"
#include "consts.h"
#include "envcar.h"
#include "string.h"

#use fixed_io(a_outputs=B_DATA, B_CLOCK)//,PIC_OUT)
//#use fixed_io(a_outputs=PIN_A2, PIN_A3)
#use fixed_io(b_outputs=)
#use fixed_io(c_outputs=)

void initEnvoi()
{
	output_low(B_CLOCK);
}

void envoiCar(int8 car)
{
	int8 i;
	
	if(car==CAR_PAUSE)
	{
		delay_ms(PAUSE_LENGTH);
		car=CAR_CLR;
	}
	
	//Signal d'envoi
	emmetSignal(0);
	
	//Envoi
	
	for(i=0;i<8;i++)
	{
		if( (car & (0x01<<i)) == 0) 
			emmetSignal(0);
		else
			emmetSignal(1);
	}

}

void envoiStr(char * str,int8 nb_car)
{
	int8 i;
	for(i=0;i<nb_car;i++)
	{
		if((i%4)==0)
		{
			if(i==0)
				envoiCar(CAR_CLR);
			else
			{
				envoiCar(CAR_PAUSE);
				envoiCar(CAR_CLR);
			}
		}
		envoiCar(str[i]);
	}	
	delay_ms(500);
}

void emmetSignal(int1 b)
{
	int16 lj;
	
	output_low(B_CLOCK);
	
	for(lj=CPT_ENV;lj>0;lj--){continue;};
		
	//Ne fonctionne pas en fast IO
	//il faut ajouter un DELAY_CYCLES(1)
	//pour faire un NOP entre les deux instructions
	//ici en fixed IO
	output_bit(B_DATA,b);
	output_high(B_CLOCK);

	for(lj=CPT_ENV;lj>0;lj--){continue;};

}



#separate
void affiche_int8(int8 valeur)
{
	char *c1;
	char *c2;
	
	int8 octet1;
	int8 octet2;
	
	octet2 = valeur<<4;
	octet2 = octet2>>4;
	
	octet1 = valeur>>4; //bits de pooids forts dans les LSB
	
	c1 = convertir_char(octet1);
	c2 = convertir_char(octet2);

	envoicar(c1);
	envoicar(c2);
	delay_ms(500);
}

#separate
void affiche_int16(int16 valeur)
{
	char *c1;
	char *c2;
	char *c3;
	char *c4;
	int8 i=0;
	int8 octet1=0;
	int8 octet2=0;
	int8 octet3=0;
	int8 octet4=0;
	
	for (i=0;i<4;i++)
	{
		if(bit_test(valeur,i))
			bit_set(octet1,i);
		if(bit_test(valeur,i+4))
			bit_set(octet2,i);
		if(bit_test(valeur,i+8))
			bit_set(octet3,i);
		if(bit_test(valeur,i+12))
			bit_set(octet4,i);
	};
	
	
	c1 = convertir_char(octet1);
	c2 = convertir_char(octet2);
	c3 = convertir_char(octet3);
	c4 = convertir_char(octet4);

	envoicar(c1);
	envoicar(c2);
	envoicar(c3);
	envoicar(c4);
	delay_ms(500);
}

#separate
char convertir_char(int8 octet_char)
{
	char *c;
	
	switch(octet_char)
	{
		case (0) :
			strcpy(c,"0");
			break;
		case (1) :
			strcpy(c,"1");
			break;
		case (2) :
			strcpy(c,"2");
			break;
		case (3) :
			strcpy(c,"3");
			break;
		case (4) :
			strcpy(c,"4");
			break;
		case (5) :
			strcpy(c,"5");
			break;
		case (6) :
			strcpy(c,"6");
			break;
		case (7) :
			strcpy(c,"7");
			break;
		case (8) :
			strcpy(c,"8");
			break;
		case (9) :
			strcpy(c,"9");
			break;
		case (0x0A) :
			strcpy(c,"A");
			break;
		case (0x0B) :
			strcpy(c,"B");
			break;
		case (0x0C) :
			strcpy(c,"C");
			break;
		case (0x0D) :
			strcpy(c,"D");
			break;
		case (0x0E) :
			strcpy(c,"E");
			break;
		case (0x0F) :
			strcpy(c,"F");
			break;
		
		default :
		{
			strcpy(c,"X");
		}
	}
	return c;
}

#separate
void ajouter_trace(int8 donnee)
{
	if (pos_eeprom_Trace < 0xFF)
	{
		write_eeprom(pos_eeprom_Trace,donnee);
		pos_eeprom_Trace = pos_eeprom_Trace + 1;
	}
}

#separate
void lire_trace()
{
	int8 i;
	if (pos_eeprom_Trace> EEPROM_DEB_TRACE)
	{
		for (i=EEPROM_DEB_TRACE;i<pos_eeprom_Trace;i++)
		{
			affiche_int8(read_eeprom(i));
		}
	}	
}

⌨️ 快捷键说明

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