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

📄 envcar.c

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

#ifndef SANS_PIC_BASIC
#use fixed_io(a_outputs=B_DATA, B_CLOCK)
//attention_au_pic = 5
#else
#use fixed_io(a_outputs=B_DATA, B_CLOCK,PIC_CLOCK,PIC_DATA,PIN_A0,PIN_A1)
#endif

//#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);
}
#separate
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 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;};

}

//affiche un int de 8 sur l'afficheur
void affiche_int8(int8 valeur)

{
	
	int8 octet1;
	int8 octet2;
	
	octet2 = valeur &0xF;
	//octet2 = octet2>>4;
	
	octet1 = (valeur>>4)&0xF; //bits de poids forts dans les LSB
	
	envoicar(convertir_char(octet1));
	envoicar(convertir_char(octet2));
}

//affiche un int de 16 sur l'afficheur
void affiche_int32(int32 valeur)
{
	int8 i=0;
	int8 octet1=0;
	int8 octet2=0;
	int8 octet3=0;
	int8 octet4=0;
	
	octet4=(valeur>>24)&0xFF;
	octet3=(valeur>>16)&0xFF;
	octet2=(valeur>>8)&0xFF;
	octet1=(valeur)&0xFF;
	
	/*
	for (i=0;i<32;i++)
	{
		if(bit_test(valeur,i))
			bit_set(octet1,i);
		if(bit_test(valeur,i+8))
			bit_set(octet2,i);
		if(bit_test(valeur,i+16))
			bit_set(octet3,i);
		if(bit_test(valeur,i+24))
			bit_set(octet4,i);
			
	};
	*/
	affiche_int8(octet4);
	affiche_int8(octet3);
	envoicar(CAR_PAUSE);
	affiche_int8(octet2);
	affiche_int8(octet1);
	envoicar(CAR_PAUSE);
	
}

//convertit les 4 premiers bits d'un int de 8 en valeur ascii
int8 convertir_char(int8 octet_char)
{
	int8 c=0;

	//valeur ascii de caract鑢es
	switch (octet_char)
	{
		case C_0 :
			c=0x30;
			break;
		case C_1 :
			c=0x31;
			break;
		case C_2 :
			c=0x32;
			break;
		case C_3 :
			c=0x33;
			break;
		case C_4 :
			c=0x34;
			break;
		case C_5 :
			c=0x35;
			break;
		case C_6 :
			c=0x36;
			break;
		case C_7 :
			c=0x37;
			break;
		case C_8 :
			c=0x38;
			break;
		case C_9 :
			c=0x39;
			break;
		case C_A :
			c=0x41;
			break;
		case C_B :
			c=0x42;
			break;
		case C_C :
			c=0x43;
			break;
		case C_D :
			c=0x44;
			break;
		case C_E :
			c=0x45;
			break;
		case C_F :
			c=0x46;
			break;
		default :
			c=0x58;
			break;
	}
	
	return c;
}

//Ajoute une valeur 'trace' dans l'eeprom
void ajouter_trace(int8 donnee)
{
	if (pos_eeprom_Trace < 0x0FF)
	{
		write_eeprom(pos_eeprom_Trace,donnee);
		pos_eeprom_Trace = pos_eeprom_Trace + 1;
	}
}

//Ajoute toutes les valeurs 'trace' stock閑s dans l'eeprom, et affichecelles ci en les num閞otant
void lire_trace()
{
	int8 i;
	envoiCar("EEPR");
	envoiCar("P:");
	affiche_int8(read_eeprom(EEPROM_PROP));
	envoiCar(CAR_PAUSE);
	envoiCar("I:");
	affiche_int8(read_eeprom(EEPROM_INT));
	envoiCar(CAR_PAUSE);
	envoiCar("D:");
	affiche_int8(read_eeprom(EEPROM_DER));
	envoiCar(CAR_PAUSE);
	envoiCar("IL");
	affiche_int8(read_eeprom(EEPROM_INTLIMIT));
	envoiCar(CAR_PAUSE);
	envoiCar("A:");
	affiche_int8(read_eeprom(EEPROM_MEM_ACC));
	envoiCar(CAR_PAUSE);
	envoiCar("V:");
	affiche_int8(read_eeprom(EEPROM_MEM_VIT));
	envoiCar(CAR_PAUSE);
	
	envoiCar(CAR_PAUSE);
	if (pos_eeprom_Trace> EEPROM_DEB_TRACE)
	{
		for (i=EEPROM_DEB_TRACE;i<pos_eeprom_Trace;i++)
		{
			affiche_int8(i-EEPROM_DEB_TRACE+1);
			affiche_int8(read_eeprom(i));
			envoiCar(CAR_PAUSE);
		}
	envoiCar("FEPR");
	}	
}

//remet 

⌨️ 快捷键说明

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