Hola!
Al fin me decidi, y estoy haciendo los primeros pinitos en CCS. Como no podia ser de otra manera, tengo un pequeño problema:
Tengo un programa que debe secuenciar las salidas del puerto B dependiendo del estado de A0 y A1 (que me permiten elegir el programa 1, 2, 3 o 4 y del estado de A2 y A3, que me permiten elegir cuatro velocidades distintas.
He programado todo con funciones, pero ponga como ponga los jumpers en A0, A1, A2 y A3, me toma el programa 0 con velocidad 0, por lo que deduzco que no me esta leyendo el PORTA, o bien las funciones que escribi para leer el puerto no funcionan como quiero.
El codigo es algo extenso, pero lo posteo completo por que puedo haber metido la pata en las directivas de principio, o dios sabe donde.
Por ultimo: el programa lo pruebo sobre el pic mismo, ya que como estoy aprendiendo, tome un proyecto que tenia terminado en BASIC, que funcionana ok, y lo estoy reprogramando en CCS.
Este es el codigo. Me gustaria me reten un poco, y vean si encuentran el error. Gracias!

//------Directivas para el compilador--------
#include <16f627a.h> //PIC utilizado
#fuses INTRC,NOWDT,NOPROTECT,PUT //Configuramos los fuses
#use delay (clock=4000000) //Oscilador a 4Mhz
#use fast_io(a) //Optimizamos E/S del PORTA
#use fast_io(b) //Optimizamos E/S del PORTB
#byte portb = 0x6 //Direccion del PORTB
//#define CCP_OFF //Desabilito comparadores
//------Prototipos de funciones-----
int leo_prog(void);
int leo_demora(void);
void prog1(int demora);
void prog2(int demora);
void prog3(int demora);
void prog4(int demora);
void salidas_off( void);
//------------------------------------------------------------------------------
//------Programa principal----------
//------------------------------------------------------------------------------
void main(void)
{
int programa = 0, demora = 10, tiempo = 10;
set_tris_a(0xFF); //Todo el puerto como entrada.
set_tris_b(0x00); //Todo el puerto como salida.
disable_interrupts(GLOBAL); //todas las interrupciones desactivadas
//Comienzo el bucle infinito.
do{
programa = leo_prog(); //Guardo en programa el numero de prog. selecc.
demora = leo_demora(); //Guardo en demora el tiempo de demora elegido (en segundos)
//----ejecuto el programa elegido---
if (programa == 0) prog1(demora);
if (programa == 1) prog2(demora);
if (programa == 2) prog3(demora);
if (programa == 3) prog4(demora);
}while(TRUE); //Repito el bucle
}
//------------------------------------------------------------------------------
//Funcion leo_prog. Lee el estado de los switchs
// 1 y 2 (PIN_A0 y PIN_A1)
int leo_prog(void) {
int programa_aux=0;
if (PIN_A1==1) programa_aux = programa_aux++;
if (PIN_A0==1) programa_aux = programa_aux+2;
return programa_aux;
}
//Funcion leo_demora. Lee el estado de los switchs
// 3 y 4 (PIN_A2 y PIN_A3)
int leo_demora(void) {
int demora_aux=0;
int tiempo;
if (PIN_A3==1) demora_aux = demora_aux++;
if (PIN_A2==1) demora_aux = demora_aux+2;
switch (demora_aux) {
case 0: tiempo = 1;
break;
case 1: tiempo = 3;
break;
case 2: tiempo = 6;
break;
case 3: tiempo = 12;
break; }
return tiempo;
}
//Funcion Prog1. Ejecuta el programa numero 1 con la
//demora que recive como parametro.
void prog1(int demora) {
portb = 0x01;
delay_ms(demora);
portb = 0x02;
delay_ms(demora);
portb = 0x04;
delay_ms(demora);
portb = 0x08;
delay_ms(demora);
portb = 0x10;
delay_ms(demora);
portb = 0x20;
delay_ms(demora);
portb = 0x40;
delay_ms(demora);
portb = 0x80;
delay_ms(demora);
}
//Funcion Prog2. Ejecuta el programa numero 2 con la
//demora que recive como parametro.
void prog2(int demora) {
portb = 0x03;
delay_ms(demora);
portb = 0x0C;
delay_ms(demora);
portb = 0x30;
delay_ms(demora);
portb = 0xC0;
}
//Funcion Prog3. Ejecuta el programa numero 3 con la
//demora que recive como parametro.
void prog3(int demora) {
portb = 0x81;
delay_ms(demora);
portb = 0x03;
delay_ms(demora);
portb = 0x06;
delay_ms(demora);
portb = 0x0C;
delay_ms(demora);
portb = 0x18;
delay_ms(demora);
portb = 0x30;
delay_ms(demora);
portb = 0x60;
delay_ms(demora);
}
//Funcion Prog4. Ejecuta el programa numero 4 con la
//demora que recive como parametro.
void prog4(int demora) {
portb = 0x0F;
delay_ms(demora);
portb = 0xF0;
}
//Funcion salidas_off. Apaga todas las luces.
void salidas_off(void) {
portb = 0x00;
}