Lite lek med pic

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Elektro88
Inlägg: 270
Blev medlem: 14 februari 2006, 15:41:18
Skype: rmannby@live.se
Ort: Gryttby, Vendel

Lite lek med pic

Inlägg av Elektro88 »

Har suttit ett par dar nu och försökt att lära mig PIC programmering och har provat både assembler och C med varierande reultat. men det gick inget vidare, sen hittade jag Flowcode (vad det lät reklamaktigt :oops: ) och lyckades få ihop ett större program :D.
tycker att det är lagomt lätt för mig som bara vill styra lite lysdioder. köpte det och gjorde ett större program med 3 knappar, 6st lysdioder och en 7 segmentsdisplay på en pic16f628a.
När man trycker på knapp1 går den in i "programvals mode" där man kan justera program och hastighet mha knapp 2 och 3. knapp2 väljer man mellan program eller hastighet och knapp3 stegar man upp ett snäpp.
C koden för den som är intresserad:

Kod: Markera allt

#define MX_PIC

//Definitioner för mikrocontroller
#define P16F628A
#define MX_EE
#define MX_EE_TYPE1
#define MX_EE_SIZE 128
#define MX_UART
#define MX_UART_B
#define MX_UART_TX 2
#define MX_UART_RX 1
#define MX_PWM
#define MX_PWM_CNT 1
#define MX_PWM_TRIS1 trisb
#define MX_PWM_1 3

//Funktioner
#define MX_CLK_SPEED 4000000
#ifdef _BOOSTC
#include <system.h>
#endif
#ifdef HI_TECH_C
#include <pic.h>
#endif

//Konfigurationsdata
#ifdef _BOOSTC
#pragma DATA 0x2007, 0x3f18
#endif
#ifdef HI_TECH_C
__CONFIG(0x3f18);
#endif

//Interna funktioner
#include "C:\Program Files (x86)\Matrix Multimedia\Flowcode V4\FCD\internals.h"

//Makrofunktions-deklarationer
void FCM_Byteavprogram();
void FCM_Ledprog();


//Variabeldeklarationer
char FCV_SWITCH;
char FCV_SWITCH1;
char FCV_PLUSPROG;
char FCV_BEGIN;
char FCV_PLUS;
char FCV_PLUSSPEED;


//Defines:

/**** Macro Substitutions ****
porta = LED Port Register
trisa = LED Data Direction Register
1 = LED Pin Mask
1 = LED Active Polarity
******************************/




//LED0: //Makrofunktions-deklarationer

void FCD_LED0_LEDOn();
void FCD_LED0_LEDOff();
//Defines:

/**** Macro Substitutions ****
porta = LED Port Register
trisa = LED Data Direction Register
2 = LED Pin Mask
1 = LED Active Polarity
******************************/




//LED1: //Makrofunktions-deklarationer

void FCD_LED1_LEDOn();
void FCD_LED1_LEDOff();
//Defines:

/**** Macro Substitutions ****
porta = LED Port Register
trisa = LED Data Direction Register
4 = LED Pin Mask
1 = LED Active Polarity
******************************/




//LED2: //Makrofunktions-deklarationer

void FCD_LED2_LEDOn();
void FCD_LED2_LEDOff();
//Defines:

/**** Macro Substitutions ****
porta = LED Port Register
trisa = LED Data Direction Register
128 = LED Pin Mask
1 = LED Active Polarity
******************************/




//LED3: //Makrofunktions-deklarationer

void FCD_LED3_LEDOn();
void FCD_LED3_LEDOff();
//Defines:

/**** Macro Substitutions ****
porta = LED Port Register
trisa = LED Data Direction Register
8 = LED Pin Mask
1 = LED Active Polarity
******************************/




//LED4: //Makrofunktions-deklarationer

void FCD_LED4_LEDOn();
void FCD_LED4_LEDOff();
//Defines:

/**** Macro Substitutions ****
porta = LED Port Register
trisa = LED Data Direction Register
64 = LED Pin Mask
1 = LED Active Polarity
******************************/




//LED5: //Makrofunktions-deklarationer

void FCD_LED5_LEDOn();
void FCD_LED5_LEDOff();



//LED0: //Makroimplementationer


void FCD_LED0_LEDOn()
{
	
		trisa = trisa & ~1;			//Convert pin to output

		if( 1 )					//Active high polarity
			porta = porta | 1;
		else					//Active low polarity
			porta = porta & ~1;

}

void FCD_LED0_LEDOff()
{
	
		trisa = trisa & ~1;			//Convert pin to output

		if( 1 )					//Active high polarity
			porta = porta & ~1;
		else					//Active low polarity
			porta = porta | 1;

}



//LED1: //Makroimplementationer


void FCD_LED1_LEDOn()
{
	
		trisa = trisa & ~2;			//Convert pin to output

		if( 1 )					//Active high polarity
			porta = porta | 2;
		else					//Active low polarity
			porta = porta & ~2;

}

void FCD_LED1_LEDOff()
{
	
		trisa = trisa & ~2;			//Convert pin to output

		if( 1 )					//Active high polarity
			porta = porta & ~2;
		else					//Active low polarity
			porta = porta | 2;

}



//LED2: //Makroimplementationer


void FCD_LED2_LEDOn()
{
	
		trisa = trisa & ~4;			//Convert pin to output

		if( 1 )					//Active high polarity
			porta = porta | 4;
		else					//Active low polarity
			porta = porta & ~4;

}

void FCD_LED2_LEDOff()
{
	
		trisa = trisa & ~4;			//Convert pin to output

		if( 1 )					//Active high polarity
			porta = porta & ~4;
		else					//Active low polarity
			porta = porta | 4;

}



//LED3: //Makroimplementationer


void FCD_LED3_LEDOn()
{
	
		trisa = trisa & ~128;			//Convert pin to output

		if( 1 )					//Active high polarity
			porta = porta | 128;
		else					//Active low polarity
			porta = porta & ~128;

}

void FCD_LED3_LEDOff()
{
	
		trisa = trisa & ~128;			//Convert pin to output

		if( 1 )					//Active high polarity
			porta = porta & ~128;
		else					//Active low polarity
			porta = porta | 128;

}



//LED4: //Makroimplementationer


void FCD_LED4_LEDOn()
{
	
		trisa = trisa & ~8;			//Convert pin to output

		if( 1 )					//Active high polarity
			porta = porta | 8;
		else					//Active low polarity
			porta = porta & ~8;

}

void FCD_LED4_LEDOff()
{
	
		trisa = trisa & ~8;			//Convert pin to output

		if( 1 )					//Active high polarity
			porta = porta & ~8;
		else					//Active low polarity
			porta = porta | 8;

}



//LED5: //Makroimplementationer


void FCD_LED5_LEDOn()
{
	
		trisa = trisa & ~64;			//Convert pin to output

		if( 1 )					//Active high polarity
			porta = porta | 64;
		else					//Active low polarity
			porta = porta & ~64;

}

void FCD_LED5_LEDOff()
{
	
		trisa = trisa & ~64;			//Convert pin to output

		if( 1 )					//Active high polarity
			porta = porta & ~64;
		else					//Active low polarity
			porta = porta | 64;

}

//Makroimplementationer

void FCM_Byteavprogram()
{
	
	//Beräkning
	//Beräkning:
	//  switch = 1
	FCV_SWITCH = 1;
	

	//Utgång
	//Utgång: 0 -> PORT A
	trisa = 0x00;
	porta = 0;


	//Utgång
	//Utgång: 1 -> A6
	trisa = trisa & 0xbf;
	if (1)
		porta = (porta & 0xbf) | 0x40;
	else
		porta = porta & 0xbf;


	//Kopplingspunkt
	//Kopplingspunkt: [A]: A
FCC_Byteavprogram_A:
;


	//Utgång
	//Utgång: 1 -> A2
	trisa = trisa & 0xfb;
	if (1)
		porta = (porta & 0xfb) | 0x04;
	else
		porta = porta & 0xfb;


	//Fördröjning
	//Fördröjning: plusspeed ms
	delay_ms(FCV_PLUSSPEED);


	//Utgång
	//Utgång: 1 -> A2
	trisa = trisa & 0xfb;
	if (1)
		porta = (porta & 0xfb) | 0x04;
	else
		porta = porta & 0xfb;


	//Ingång
	//Ingång: B1 -> switch1
	trisb = trisb | 0x02;
	FCV_SWITCH1 = ((portb & 0x02) == 0x02);


	//Ingång
	//Ingång: B2 -> plus
	trisb = trisb | 0x04;
	FCV_PLUS = ((portb & 0x04) == 0x04);


	//Ingång
	//Ingång: B0 -> begin
	trisb = trisb | 0x01;
	FCV_BEGIN = ((portb & 0x01) == 0x01);


	//Beslut
	//Beslut: switch1=0?
	if (FCV_SWITCH1==0)
	{
		//Beslut
		//Beslut: switch=2?
		if (FCV_SWITCH==2)
		{
			//Beräkning
			//Beräkning:
			//  switch = 1
			FCV_SWITCH = 1;
			

		} else {
			//Beräkning
			//Beräkning:
			//  switch = switch+1
			FCV_SWITCH = FCV_SWITCH+1;
			

		}


	}


	//Beslut
	//Beslut: plus=0?
	if (FCV_PLUS==0)
	{
		//Switch
		//Switch: switch?
		switch (FCV_SWITCH)
		{
			case 1:
			{
				//Beslut
				//Beslut: plusprog=6?
				if (FCV_PLUSPROG==6)
				{
					//Beräkning
					//Beräkning:
					//  plusprog = 1
					FCV_PLUSPROG = 1;
					

				} else {
					//Beräkning
					//Beräkning:
					//  plusprog = plusprog+1
					FCV_PLUSPROG = FCV_PLUSPROG+1;
					

				}


				break;
			}

			case 2:
			{
				//Beslut
				//Beslut: plusspeed=300?
				if (FCV_PLUSSPEED==300)
				{
					//Beräkning
					//Beräkning:
					//  plusspeed = 25
					FCV_PLUSSPEED = 25;
					

				} else {
					//Beräkning
					//Beräkning:
					//  plusspeed = plusspeed + 25
					FCV_PLUSSPEED = FCV_PLUSSPEED + 25;
					

				}


				break;
			}

		}


		//Utgång
		//Utgång: 1 -> A3
		trisa = trisa & 0xf7;
		if (1)
			porta = (porta & 0xf7) | 0x08;
		else
			porta = porta & 0xf7;


		//Fördröjning
		//Fördröjning: 320 ms
		delay_ms(255);
		delay_ms(65);


		//Utgång
		//Utgång: 0 -> A3
		trisa = trisa & 0xf7;
		if (0)
			porta = (porta & 0xf7) | 0x08;
		else
			porta = porta & 0xf7;


	}


	//Switch
	//Switch: switch?
	switch (FCV_SWITCH)
	{
		case 1:
		{
			//Utgång
			//Utgång: 1 -> A0
			trisa = trisa & 0xfe;
			if (1)
				porta = (porta & 0xfe) | 0x01;
			else
				porta = porta & 0xfe;


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = trisa & 0xf9;
			porta = (porta & 0xf9) | (0 & 0x06);


			//Fördröjning
			//Fördröjning: 120 ms
			delay_ms(120);


			break;
		}

		case 2:
		{
			//Utgång
			//Utgång: 1 -> A1
			trisa = trisa & 0xfd;
			if (1)
				porta = (porta & 0xfd) | 0x02;
			else
				porta = porta & 0xfd;


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = trisa & 0xfa;
			porta = (porta & 0xfa) | (0 & 0x05);


			//Fördröjning
			//Fördröjning: 120 ms
			delay_ms(120);


			break;
		}

		default:
		{
			//Fördröjning
			//Fördröjning: 60 ms
			delay_ms(60);


		}
	}


	//Beslut
	//Beslut: begin=0?
	if (FCV_BEGIN==0)
	{
		//Gå till kopplingspunkt
		//Gå till kopplingspunkt: [B]: B
		goto FCC_Byteavprogram_B;


	}


	//Gå till kopplingspunkt
	//Gå till kopplingspunkt: [A]: A
	goto FCC_Byteavprogram_A;


	//Kopplingspunkt
	//Kopplingspunkt: [B]: B
FCC_Byteavprogram_B:
;


	//Utgång
	//Utgång: 0 -> PORT A
	trisa = 0x00;
	porta = 0;


	//Utgång
	//Utgång: 0 -> PORT B
	trisb = trisb & 0x87;
	portb = (portb & 0x87) | (0 & 0x78);


	//Fördröjning
	//Fördröjning: 150 ms
	delay_ms(150);


}

void FCM_Ledprog()
{
	
	//Switch
	//Switch: plusprog?
	switch (FCV_PLUSPROG)
	{
		case 1:
		{
			//Utgång
			//Utgång: 1 -> B3
			trisb = trisb & 0xf7;
			if (1)
				portb = (portb & 0xf7) | 0x08;
			else
				portb = portb & 0xf7;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(0)::Lysdiod Till
			FCD_LED0_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(1)::Lysdiod Till
			FCD_LED1_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(2)::Lysdiod Till
			FCD_LED2_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Till
			FCD_LED3_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Till
			FCD_LED4_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Till
			FCD_LED5_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			break;
		}

		case 2:
		{
			//Utgång
			//Utgång: 1 -> B4
			trisb = trisb & 0xef;
			if (1)
				portb = (portb & 0xef) | 0x10;
			else
				portb = portb & 0xef;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(0)::Lysdiod Till
			FCD_LED0_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(1)::Lysdiod Till
			FCD_LED1_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(2)::Lysdiod Till
			FCD_LED2_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Till
			FCD_LED3_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Till
			FCD_LED4_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Till
			FCD_LED5_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Från
			FCD_LED5_LEDOff();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Från
			FCD_LED4_LEDOff();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Från
			FCD_LED3_LEDOff();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(2)::Lysdiod Från
			FCD_LED2_LEDOff();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(1)::Lysdiod Från
			FCD_LED1_LEDOff();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(0)::Lysdiod Från
			FCD_LED0_LEDOff();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			break;
		}

		case 3:
		{
			//Utgång
			//Utgång: 1 -> B3
			trisb = trisb & 0xf7;
			if (1)
				portb = (portb & 0xf7) | 0x08;
			else
				portb = portb & 0xf7;


			//Utgång
			//Utgång: 1 -> B4
			trisb = trisb & 0xef;
			if (1)
				portb = (portb & 0xef) | 0x10;
			else
				portb = portb & 0xef;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(0)::Lysdiod Till
			FCD_LED0_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(1)::Lysdiod Till
			FCD_LED1_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(2)::Lysdiod Till
			FCD_LED2_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(0)::Lysdiod Till
			FCD_LED0_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(1)::Lysdiod Till
			FCD_LED1_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(2)::Lysdiod Till
			FCD_LED2_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(0)::Lysdiod Till
			FCD_LED0_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(1)::Lysdiod Till
			FCD_LED1_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(2)::Lysdiod Till
			FCD_LED2_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(0)::Lysdiod Till
			FCD_LED0_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(1)::Lysdiod Till
			FCD_LED1_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(2)::Lysdiod Till
			FCD_LED2_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Till
			FCD_LED3_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Till
			FCD_LED4_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Till
			FCD_LED5_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Till
			FCD_LED3_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Till
			FCD_LED4_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Till
			FCD_LED5_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Till
			FCD_LED3_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Till
			FCD_LED4_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Till
			FCD_LED5_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Till
			FCD_LED3_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Till
			FCD_LED4_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Till
			FCD_LED5_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			break;
		}

		case 4:
		{
			//Utgång
			//Utgång: 1 -> B5
			trisb = trisb & 0xdf;
			if (1)
				portb = (portb & 0xdf) | 0x20;
			else
				portb = portb & 0xdf;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(0)::Lysdiod Till
			FCD_LED0_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(1)::Lysdiod Till
			FCD_LED1_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(2)::Lysdiod Till
			FCD_LED2_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Till
			FCD_LED3_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Till
			FCD_LED4_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Till
			FCD_LED5_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(0)::Lysdiod Till
			FCD_LED0_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> A0
			trisa = trisa & 0xfe;
			if (0)
				porta = (porta & 0xfe) | 0x01;
			else
				porta = porta & 0xfe;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(1)::Lysdiod Till
			FCD_LED1_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> A1
			trisa = trisa & 0xfd;
			if (0)
				porta = (porta & 0xfd) | 0x02;
			else
				porta = porta & 0xfd;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(2)::Lysdiod Till
			FCD_LED2_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> A2
			trisa = trisa & 0xfb;
			if (0)
				porta = (porta & 0xfb) | 0x04;
			else
				porta = porta & 0xfb;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Till
			FCD_LED3_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> A7
			trisa = trisa & 0x7f;
			if (0)
				porta = (porta & 0x7f) | 0x80;
			else
				porta = porta & 0x7f;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Till
			FCD_LED4_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(0)::Lysdiod Till
			FCD_LED0_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> A0
			trisa = trisa & 0xfe;
			if (0)
				porta = (porta & 0xfe) | 0x01;
			else
				porta = porta & 0xfe;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(1)::Lysdiod Till
			FCD_LED1_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> A1
			trisa = trisa & 0xfd;
			if (0)
				porta = (porta & 0xfd) | 0x02;
			else
				porta = porta & 0xfd;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(2)::Lysdiod Till
			FCD_LED2_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> A2
			trisa = trisa & 0xfb;
			if (0)
				porta = (porta & 0xfb) | 0x04;
			else
				porta = porta & 0xfb;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Till
			FCD_LED3_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(0)::Lysdiod Till
			FCD_LED0_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> A0
			trisa = trisa & 0xfe;
			if (0)
				porta = (porta & 0xfe) | 0x01;
			else
				porta = porta & 0xfe;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(1)::Lysdiod Till
			FCD_LED1_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> A1
			trisa = trisa & 0xfd;
			if (0)
				porta = (porta & 0xfd) | 0x02;
			else
				porta = porta & 0xfd;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(2)::Lysdiod Till
			FCD_LED2_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(0)::Lysdiod Till
			FCD_LED0_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> A0
			trisa = trisa & 0xfe;
			if (0)
				porta = (porta & 0xfe) | 0x01;
			else
				porta = porta & 0xfe;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(1)::Lysdiod Till
			FCD_LED1_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(0)::Lysdiod Till
			FCD_LED0_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Kommentar:
			//Börja ta isär


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Från
			FCD_LED5_LEDOff();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Från
			FCD_LED4_LEDOff();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Till
			FCD_LED5_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Från
			FCD_LED5_LEDOff();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Från
			FCD_LED3_LEDOff();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Till
			FCD_LED4_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Från
			FCD_LED4_LEDOff();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Till
			FCD_LED5_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Från
			FCD_LED5_LEDOff();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(2)::Lysdiod Från
			FCD_LED2_LEDOff();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Till
			FCD_LED3_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Från
			FCD_LED3_LEDOff();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Till
			FCD_LED4_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Från
			FCD_LED4_LEDOff();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Till
			FCD_LED5_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Från
			FCD_LED5_LEDOff();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(1)::Lysdiod Från
			FCD_LED1_LEDOff();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(2)::Lysdiod Till
			FCD_LED2_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(2)::Lysdiod Från
			FCD_LED2_LEDOff();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Till
			FCD_LED3_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Från
			FCD_LED3_LEDOff();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Till
			FCD_LED4_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Från
			FCD_LED4_LEDOff();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Till
			FCD_LED5_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Från
			FCD_LED5_LEDOff();


			break;
		}

		case 5:
		{
			//Utgång
			//Utgång: 1 -> B5
			trisb = trisb & 0xdf;
			if (1)
				portb = (portb & 0xdf) | 0x20;
			else
				portb = portb & 0xdf;


			//Utgång
			//Utgång: 1 -> B3
			trisb = trisb & 0xf7;
			if (1)
				portb = (portb & 0xf7) | 0x08;
			else
				portb = portb & 0xf7;


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(0)::Lysdiod Till
			FCD_LED0_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Till
			FCD_LED5_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(1)::Lysdiod Till
			FCD_LED1_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Till
			FCD_LED4_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(2)::Lysdiod Till
			FCD_LED2_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Till
			FCD_LED3_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(1)::Lysdiod Till
			FCD_LED1_LEDOn();


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Till
			FCD_LED4_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			break;
		}

		case 6:
		{
			//Utgång
			//Utgång: 1 -> B4
			trisb = trisb & 0xef;
			if (1)
				portb = (portb & 0xef) | 0x10;
			else
				portb = portb & 0xef;


			//Utgång
			//Utgång: 1 -> B5
			trisb = trisb & 0xdf;
			if (1)
				portb = (portb & 0xdf) | 0x20;
			else
				portb = portb & 0xdf;


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(0)::Lysdiod Till
			FCD_LED0_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(1)::Lysdiod Till
			FCD_LED1_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(2)::Lysdiod Till
			FCD_LED2_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Till
			FCD_LED3_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Till
			FCD_LED4_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(5)::Lysdiod Till
			FCD_LED5_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(4)::Lysdiod Till
			FCD_LED4_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(3)::Lysdiod Till
			FCD_LED3_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(2)::Lysdiod Till
			FCD_LED2_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			//Utgång
			//Utgång: 0 -> PORT A
			trisa = 0x00;
			porta = 0;


			//Anropa komponentmakro
			//Anropa komponentmakro: LED(1)::Lysdiod Till
			FCD_LED1_LEDOn();


			//Fördröjning
			//Fördröjning: plusspeed ms
			delay_ms(FCV_PLUSSPEED);


			break;
		}

	}


}

void main()
{
	
	//Initiering
	cmcon = 0x07;


	//Avbrottsinitieringskod
	option_reg = 0xC0;


	//Avbrott
	//Avbrott: Koppla till RB0INT
	st_bit(option_reg,INTEDG);
	st_bit(intcon,GIE);
	st_bit(intcon, INTE);


	//Beräkning
	//Beräkning:
	//  plusprog = 1
	//  plusspeed = 25
	FCV_PLUSPROG = 1;
	FCV_PLUSSPEED = 25;
	

	//Loop
	//Loop: While1
	while (1)
	{
		//Anropsmakro
		//Anropsmakro: Ledprog
		FCM_Ledprog();


	}


	mainendloop: goto mainendloop;
}

void MX_INTERRUPT_MACRO(void)
{
	//Handler code for [RB0INT]
	if (ts_bit(intcon, INTF) && ts_bit(intcon, INTE))
	{
		FCM_Byteavprogram();
		cr_bit(intcon, INTF);
	}


}



det blev en lång och kanske onödigt komplicerad kod, men i Flowcode så ser man det hela bättre. filmade en liten snutt också. på filmen är inte 7 segmentsdisplayen inkopplad. nästa steg är nog ett kort till denna krets.
OBS! stäng av ljudet... dryg låt...
Youtube klipp



Jag tänkte lägga upp lite mer PIC projekt här sen när man börjar få lite mer grepp.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Lite lek med pic

Inlägg av sodjan »

Problemet med verktyg typ Flowcode är att man kanske inte lär sig
hårdvaran (d.v.s processorn) "på riktigt". Man klarar av att "programmera"
så långt som Flowcode räcker till, men sen blir det problem. Men visst, om
det är allt man har planerat att göra så är väl det OK.

Koden har jag tittat på som hastigast, och den fungerar säkert. Dock
känns det lite mycket kod för det som du beskriver, men det är inte
helt ovanligt att dessa grafiska kod-generatorer ibland genererar
lite "tjock" kod... :-)
Användarvisningsbild
Icecap
Inlägg: 26654
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Lite lek med pic

Inlägg av Icecap »

Efter att ha kollat vad koden ska göra och resultatet ser jag ett lysande argument för att flowcode inte är aktuellt.
Elektro88
Inlägg: 270
Blev medlem: 14 februari 2006, 15:41:18
Skype: rmannby@live.se
Ort: Gryttby, Vendel

Re: Lite lek med pic

Inlägg av Elektro88 »

Sodjan: Det räcker gott och väl för mig då jag bara vill kunna styra lite lysdioder. sen om jag får mersmak så tänkte jag försöka lära mig assembler. men med lite problem med läsning så kommer det nog ta lite tid, men skam den som ger sig :P

icecap: funkar för en glad amatör som mig :). men jag kan hålla med om att det finns bättre sätt att programmera.

EDIT: Videoklippet borttaget. kommer upp på nytt senare i veckan.
Gustav180
Inlägg: 560
Blev medlem: 5 januari 2011, 22:17:11
Skype: anders_gust
Ort: Jönköping

Re: Lite lek med pic

Inlägg av Gustav180 »

Om du vill lära dig assembler har jag ett litet läromedel på en pdf som du kan få. Sänd ett mejl, så sänder jag på din returadress.
Skriv svar