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

📄 ipic.c

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

#use fast_io(A)

void testCmd()
{
/*	choix(CMD_PROPORTIONNEL,);
	choix(CMD_INTEGRAL,);
	choix(CMD_DERIVEE,);
	choix(CMD_INTLIMIT,);*/
	envoicar("TEST");
	envoicar(CAR_PAUSE);
	
	choix(CMD_AVANCE,20);

	envoicar("RDIP");
	envoicar(CAR_PAUSE);
	Afficher_Registres_LM1(RDIP);
	Afficher_Registres_LM2(RDIP);

	envoicar("RDDP");
	envoicar(CAR_PAUSE);
	Afficher_Registres_LM1(RDDP);
	Afficher_Registres_LM2(RDDP);

	//choix(CMD_STOP,1);
	
	envoicar(CAR_PAUSE);
	envoicar(CAR_PAUSE);
	envoicar(CAR_PAUSE);
	envoicar(CAR_PAUSE);
	envoicar(CAR_PAUSE);

	envoicar("RDIP");
	envoicar(CAR_PAUSE);
	Afficher_Registres_LM1(RDIP);
	Afficher_Registres_LM2(RDIP);

	envoicar("RDDP");
	envoicar(CAR_PAUSE);
	Afficher_Registres_LM1(RDDP);
	Afficher_Registres_LM2(RDDP);

}

void waitForCmd()
{
	unsigned int8 car=0;	//pour v閞if bonne com.
	unsigned int8 data=0;	//pour donn閑 dela commande
	unsigned int8 cmd=0;	//code de la commande
	unsigned int8 verif=0; //octet de v閞ification  
	char s_Action[5]="ACT.";

	set_tris_a(0xFF);
	envoiCar("ATT.");
	

	//while(1)
	//{
		// Attente et r閏up閞ation du 1er octet de v閞ification
		verif=readOctet();
		If (verif == BEGIN_TRANS)
		{
			//Si 1er octe  OK, on renvoie la valeur au PICBASIC (v閞ification que la transmission se fait correctement dans les 2 sens)
			envoiCar("ACK");
			
			sendOctet(BEGIN_TRANS);
			envoiCar("CMOK");
			
			// R閏up de l'octet de commande			
			cmd=readOctet();
			envoiCar("TYPE");
			
			sendOctet(BEGIN_TRANS);
			//R閏up de l'octet de donn閑
			data=readOctet();
			envoiCar("P.OK");
			

//			ajouter_trace(cmd);
//			ajouter_trace(data);

			//Recherche de la commande
			choix(cmd,data);
		}	

		else
		{
			envoiCar("ERR!");
			
			sendOctet(verif);
		}
	//}

}

#separate 
void choix(int8 cmd,int8 data)
{
		char s_Action[5]="****";
		
#ifdef SANS_PIC_BASIC
		set_tris_a(0xDF);
		output_low(PIC_DATA);
#endif //SANS_PIC_BASIC
		
			switch(cmd)
			{
				case CMD_SET_VITESSE :		//= 5
					envoiCar("VIT.");
					
					setVitesse(data);
					FinEnvoi(data);
					Write_EEPROM(EEPROM_MEM_VIT,data);
					break;
				case CMD_SET_ACCEL :		//= 6
					envoiCar("ACC.");
					
					setAccel(data);
					FinEnvoi(data);
					Write_EEPROM(EEPROM_MEM_ACC,data);
					break;
				case CMD_AVANCE :			//= 1
					envoiCar("AVT");
					envoicar(CAR_PAUSE);

					avance(data,AVANCE_AV); 
					FinEnvoi(data);
					break;
				case CMD_RECULE :			//= 2
					envoiCar("REC.");
					
					avance(data,AVANCE_RE);
					FinEnvoi(data);
					break;
				case CMD_TRN_GAUCHE :		//= 3
					envoiCar("GAU.");
					
					tourne(data,TOURNE_G);
					FinEnvoi(data);
					break;
				case CMD_TRN_DROITE :		//= 4
					envoiCar("DROI");
					
					tourne(data,TOURNE_D);
					FinEnvoi(data);
					break;
				case CMD_STOP :				//= 7
					envoiCar("STOP");
					
					stop();
					FinEnvoi(data);
					break;
				case CMD_STOP_TEMP :		//= 8
					envoiCar("STMP");
					envoicar(CAR_PAUSE);
					
					FinEnvoi(stop_temp());
					break;
				case CMD_RESUME :			//= 9
					envoiCar("RES.");
					
					resume();
					FinEnvoi(data);
					break;
				case CMD_PROPORTIONNEL :			//= 10
					envoiCar("PROP");
					
					regler_Proportionnel(data);
					FinEnvoi(data);
					Write_EEPROM(EEPROM_PROP,data);
					break;
				case CMD_INTEGRAL :			//= 11
					envoiCar("INTE");
					
					regler_integral(data);
					FinEnvoi(data);
					Write_EEPROM(EEPROM_INT,data);
					break;
				case CMD_DERIVEE :			//= 12
					envoiCar("DERV");
					
					regler_derivee(data);
					FinEnvoi(data);
					Write_EEPROM(EEPROM_DER,data);
					break;
				case CMD_INTLIMIT :			//= 13
					envoiCar("INTL");
					
					regler_intlimit(data);
					FinEnvoi(data);
					Write_EEPROM(EEPROM_INTLIMIT,data);					
					break;
				case CMD_PURGE_TRACE :			//= 14
					envoiCar("PURG");
					
					purge_trace();
					FinEnvoi(data);
					break;
				case CMD_LIRE_TRACE :			//= 15
					envoiCar("TRAC");
					
					lire_trace();
					FinEnvoi(data);
					break;
				case CMD_LIRE_PID :			//= 16
					envoiCar("PID?");
					
					lire_PID();
					FinEnvoi(data);
					break;
				default :
					sendOctet(CMD_INCONNUE);
					//return;
					break;
			}
			
}

void FinEnvoi(int8 data)
{
	sendOctet(data);
	EnvoiCar("F OK");
	EnvoiCar(CAR_PAUSE);
}


// Lit un octet issu du PICBASIC
unsigned int8 readOctet()
{
	unsigned int8 res;
	unsigned int8 i;

	res = 0x00;

	set_tris_a(0xFF);

	// Attente du cr閚eau de d閜art, lanc

⌨️ 快捷键说明

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