Buen dia
Espero me puedan claborar a reducir lineas de codigo a este programa que me genera un Juego de luces en un Pic16f628A
// PIC16F628A Configuration Bit Settings
// 'C' source line config statements
// CONFIG
#pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <xc.h> //??????
#include<PIC16f628A.h>//???
#define _XTAL_FREQ 4000000//???
int i,j,k;
int main()
{
TRISA = 0X00;
TRISB = 0X00;
CMCON = 0X07;
PORTA = 0XFF;
PORTB = 0XFF;
__delay_ms(200);
PORTA = 0X00;
PORTB = 0X80;
__delay_ms(200);
do
{
/*------------------------------------1-----------------------------------------*/
for( i=0; i<7; i++ )
{
PORTB=PORTB>>1; //Rota el puerto B a la derecha una vez
__delay_ms(200);
}
PORTB = 0X00;
PORTA = 0X80;
__delay_ms(200);
for( i=0; i<7; i++ )
{
if(i == 3)
{
PORTA = 0X10;
__delay_ms(200);
PORTA = 0X8;
__delay_ms(200);
}
PORTA=PORTA>>1; //Rota el puerto A a la derecha una vez
__delay_ms(200);
}
//PORTA = 0X00;
PORTA = 0X01;
__delay_ms(200);
for( i=0; i<7; i++ )
{
if(i == 5)
{
//continue;
PORTA = 0X40;
__delay_ms(200);
}
PORTA = PORTA<<1; //Rota el puerto A a la izquierda una vez
__delay_ms(200);
}
PORTA = 0x00;
PORTB = 0X01;
__delay_ms(200);
for( i=0; i<7; i++ )
{
PORTB=PORTB<<1; //Rota el puerto B a la izquierda una vez
__delay_ms(200);
}
/*-------------------------------------2----------------------------------------*/
PORTA = 0X00;
PORTB = 0X00;
__delay_ms(200);
for( i=0; i<3; i++ ) // prende y apaga dos veces todos los led del puerto AyB
{
PORTA = 0XFF;
PORTB = 0XFF;
__delay_ms(200);
PORTA = 0X00;
PORTB = 0X00;
__delay_ms(200);
}
/*----------------------------------------3-------------------------------------*/
PORTA = 0X00;
PORTB = 0X00;
__delay_ms(200);
for( j=0; j<2; j++ )
{
PORTA = 0X00; // prende y apaga puerto A y puerto B enciende
PORTB = 0XFF;
__delay_ms(200);
PORTA = 0XFF; // prende y apaga puerto B y puerto A enciende
PORTB = 0X00;
__delay_ms(200);
}
PORTA = 0X00;
PORTB = 0X80;
__delay_ms(200);
/*-------------------------------------------4----------------------------------*/
for( i=0; i<1; i++ )
{
for( j=0; j<7; j++ )
{
PORTB=PORTB>>2; //Rota el puerto B a la derecha saltando impares
__delay_ms(500);
}
PORTA = 0X80; //Rota el puerto A a la derecha saltando impares
__delay_ms(500);
PORTA = 0X10;
__delay_ms(500);
PORTA = 0X04;
__delay_ms(500);
PORTA = 0X01;
__delay_ms(500);
}
/*--------------------------------------------5---------------------------------*/
PORTA = 0X00;
PORTB = 0XE0;
__delay_ms(200);
for( i=0; i<7; i++ ) // prenden de 3leds en puerto B a la derecha
{
PORTB = PORTB/2;
__delay_ms(200);
}
PORTB = 0X00; // prenden de 3leds en puerto A a la derecha
PORTA = 0X80; // con la continuacion del puerto A
__delay_ms(200);
PORTA = 0XC0;
__delay_ms(200);
PORTA = 0XD0;
__delay_ms(200);
PORTA = 0X58;
__delay_ms(200);
PORTA = 0X1C;
__delay_ms(200);
for( i=0; i<4; i++ )
{
PORTA = PORTA/2;
__delay_ms(200);
}
/*-------------------------------------------6----------------------------------*/
/*corre a la Izquieda de 2leds encendidos desde el Puerto A y hasta el Puerto B*/
PORTA = 0X03;
__delay_ms(200);
PORTA = 0X06;
__delay_ms(200);
PORTA = 0X0C;
__delay_ms(200);
PORTA = 0X18;
__delay_ms(200);
PORTA = 0X50;
__delay_ms(200);
PORTA = 0XC0;
__delay_ms(200);
PORTA = 0X80;
__delay_ms(200);
PORTA = 0X00;
__delay_ms(200);
PORTB = 0X01;
__delay_ms(200);
PORTB = 0X03;
__delay_ms(200);
PORTB = 0X06;
__delay_ms(200);
for( i=0; i<7; i++ )
{
PORTB = PORTB*2;
__delay_ms(200);
}
/*-------------------------------------------7----------------------------------*/
/*Puerto B encienden leds a la derecha y Puerto A a la izquierda*/
PORTB = 0X80 ; PORTA = 0X01;
__delay_ms(200);
PORTB = 0X40 ; PORTA = 0X02;
__delay_ms(200);
PORTB = 0X20 ; PORTA = 0X04;
__delay_ms(200);
PORTB = 0X10 ; PORTA = 0X08;
__delay_ms(200);
PORTB = 0X08 ; PORTA = 0X10;
__delay_ms(200);
PORTB = 0X04 ; PORTA = 0X40;
__delay_ms(200);
PORTB = 0X02 ; PORTA = 0X80;
__delay_ms(200);
PORTB = 0X01 ; PORTA = 0X80;
__delay_ms(200);
/*--------------------------------------------8---------------------------------*/
/*Puerto A encienden leds a la derecha y Puerto B a la izquierda*/
PORTB = 0X01 ; PORTA = 0X80;
__delay_ms(200);
PORTB = 0X02 ; PORTA = 0X80;
__delay_ms(200);
PORTB = 0X04 ; PORTA = 0X40;
__delay_ms(200);
PORTB = 0X08 ; PORTA = 0X10;
__delay_ms(200);
PORTB = 0X10 ; PORTA = 0X08;
__delay_ms(200);
PORTB = 0X20 ; PORTA = 0X04;
__delay_ms(200);
PORTB = 0X40 ; PORTA = 0X02;
__delay_ms(200);
PORTB = 0X80 ; PORTA = 0X01;
__delay_ms(200);
/*--------------------------------------------9---------------------------------*/
PORTA = 0X00;
PORTB = 0X00;
__delay_ms(200);
for( i=0; i<3; i++ ) // prende y apaga 3 veces p7,p6,p1,p0 de los puertos A y B
{
PORTA = 0XC3;
PORTB = 0XC3;
__delay_ms(200);
PORTA = 0X00;
PORTB = 0X00;
__delay_ms(200);
}
PORTB = 0X66 ; PORTA = 0X56; // se va encendiendo de a dos leds de los puertos A y B
__delay_ms(500); // paresca que se va juntando hasta la mitad de cada puerto individual
PORTB = 0X3C ; PORTA = 0X1C;
__delay_ms(500);
PORTB = 0X18 ; PORTA = 0X08;
__delay_ms(500);
PORTA = 0X00;
PORTB = 0X00;
__delay_ms(200);
/*--------------------------------------------10---------------------------------*/
PORTA = 0XFF;
PORTB = 0XFF;
__delay_ms(200);
for( i=0; i<7; i++ ) // prende de a uno leds
{ //dejando encendidos todos los anteriores los puertos A y B
if(i == 5)
{
//continue;
PORTA = 0X40;
__delay_ms(200);
}
PORTA= PORTA<<1;
PORTB= PORTB>>1;
__delay_ms(500);
}
/*-----------------------------------------------------------------------------*/
PORTA = 0X00;
PORTB = 0X80;
__delay_ms(200);
} while(1);
}