contador binario con pic12f675

buenas tardes electronicos... necesito su ayuda con un programa que realice un conteo binario de 5 bits con un pic12f675. Tengo entendido que este pic tiene 6 puertos desd el GP0 hasta el GP5... capaz de ser configurados como analógicos o digitales. pero el GP3 solo sirve de entrada a causa de su funcion de entrada VPP y MCLR... Agradeceria su ayuda para solucionar el problema de como mostrar el contador sin usar el GP3.... es decir que el cuarto bit se muestre en el GP4 y no en el GP3. Agradesco mucho su ayuda... adjunto mi codigo hecho en mikropascal... agradesco tambien su ayuda en mikroC o mikrobasic....

Código:
program CONTADOR_12F675;
var cont : byte;
procedure osc_interno();
begin
CAL0_BIT:=1; 
CAL1_BIT:=1;
CAL2_BIT:=1;
CAL3_BIT:=1;
CAL4_BIT:=1;
CAL5_BIT:=1;
trisio.GP5:=false;
trisio.GP4:=false;
trisio.GP3:=false;
trisio.GP2:=false;
trisio.GP1:=false;
trisio.GP0:=false;
end;

procedure ALL_DIGITAL();     //configura los pines como salidas/entradas digitales
begin
ANS0_BIT:=0;
ANS1_BIT:=0;
ANS2_BIT:=0;
ANS3_BIT:=0;
CM0_BIT:=1;
CM1_BIT:=1;
CM2_BIT:=1;
end;

begin                           //programa principal
osc_interno();
cont:=0;
while true do                 //bucle infinito
begin
ALL_DIGITAL();
GPIO:=cont;
cont:=cont+1;
delay_ms(400);
end;
end. ...
 
Una idea, es necesario separar el valor y desplazar en bit a la izquierda.
Es un pseudo, lo acoplas al lenguaje pascal.

copia = (cont & 0xF8) << 1 // Quita 3 bits bajos (anterior a GP3) y rota 1 bit a la izquierda
GPIO = copia + (cont & 0x07) // Obtiene los 3 bits bajos y agrega a 'copia'

Saludos
 
Yo realice esto hace como 10 años
Código:
#include <12F675.h> 
#fuses INTRC_IO,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOMCLR,NOCPD 
#use delay(clock=4000000) 
 
#byte JVK = 0x20 
#byte TRISA = 0x85 
#byte PORTA = 0x05 
#BIT porta0 = PORTA.0 
#BIT porta1 = PORTA.1 
#BIT porta2 = PORTA.2 
#BIT porta4 = PORTA.4 
#BIT porta5 = PORTA.5 
#BIT jvk0 = JVK.0 
#BIT jvk1 = JVK.1 
#BIT jvk2 = JVK.2 
#BIT jvk3 = JVK.3 
#BIT jvk4 = JVK.4 
 
void main() 
{ 
    int cont; 
    TRISA = 0x00; 
    WHILE(TRUE) 
    { 
        cont=0x00; 
        JVK = cont; 
        WHILE(cont<0x20) 
        { 
            porta0 = jvk0; 
            porta1 = jvk1; 
            porta2 = jvk2; 
            porta4 = jvk3; 
            porta5 = jvk4; 
            DELAY_MS(1000); 
            cont = cont + 0x01; 
            JVK = cont; 
        } 
    } 
}
Atte
jvk85321
 
Atrás
Arriba