Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

02/12/2014 #1


¿Cómo puedo utilizar el puerto E del PIC16F877A como entrada?
El tema es que estoy en un proyecto de contador de puntos para tennis de mesa, el problema que tengo es que al realizar la programacion en microc y simularlo en Proteus funciona todo bien pero no cuenta al oprimir el pulsador conectado a RE0, ya he probado de diversas formas pero nada. ¿ Existe alguna forma especial de configurar ese puerto?. Necesito como mínimo conectar dos pulsadores para realizar los conteos pero ni con uno solo me ha funcionado. Desde ya les agradezco si me pudieran brindar alguna mano. Probe el mismo codigo para leer la entrada pero a traves de RB0 y funciona el codigo pero cuando lo quiero utilizar con RE0, RE1 o RE2 no funciona.
www .dropbox.com/s/mus0g9myg8ivr0y/TENNIS.DSN?dl=0
www .dropbox.com/s/6yoogfe59vgazsb/TENNISdos.mcppi?dl=0
Este es el código. Saludos:
Código:
 unsigned short c1;
unsigned short c2;
unsigned short c11;
unsigned short c22;
unsigned short var;
char Display(char digito);
char c1=0, estado=1;
void main() {
     TRISA=0;
     TRISB=0;
     TRISC=0;
     TRISD=0;
     TRISE.F0=1;
     PORTA=0b000000;
     PORTB=0b00000000;
     PORTC=0b00000000;
     PORTD=0b00000000;
while(1)     
 {
             PORTC=63;
             PORTA=0b0000;
             PORTB=0;
             PORTD=63;
             PORTE=0b000;
             Delay_ms(1500);
     while(1){
     if(Button(&PORTE,0,1,0)) estado =0;         /*Verifica si se pulso
        el boton por el puerto RE0 con 1 ms de retardo, y se pregunta por un
        nivel bajo(0) debido a la forma en la que esta conectada el boton
        (siempre a un nivel logico 1 con la resistencia) */

        if(estado==0 && Button(&PORTE,0,1,1)){      /*El programa no incremen-
        tara el contador sino hasta que se suelte el pulsador(pregunta
        nuevamente por el nivel logico 1)*/
            c1++;                             // incrementa contador
            if(c1>9) c1=0;              // resetea contador
            estado =1;                              // regresa el estado
        }
     Delay_ms(1000);
     if (c1==0){
     PORTC=63;
     }
     if (c1==1) {
     PORTC=6;
     }
     if (c1==2) {
     PORTC=91;
     }
     if (c1==3) {
     PORTC=79;
     }
     if (c1==4) {
     PORTC=102;
     }
     if (c1==5) {
     PORTC=109;
     }
     if (c1==6) {
     PORTC=125;
     }
     if (c1==7) {
     PORTC=7;
     }
     if (c1==8) {
     PORTC=127;
     }
     if (c1==9) {
     PORTC=111;
     }
     if(c1>9){
     c1=0;
     PORTC=63;
     c11=c11+1;
     }
     if (c2==0){
     PORTD=63;
     }
     if (c2==1) {
     PORTD=6;
     }
     if (c2==2) {
     PORTD=91;
     }
     if (c2==3) {
     PORTD=79;
     }
     if (c2==4) {
     PORTD=102;
     }
     if (c2==5) {
     PORTD=109;
     }
     if (c2==6) {
     PORTD=125;
     }
     if (c2==7) {
     PORTD=7;
     }
     if (c2==8) {
     PORTD=127;
     }
     if (c2==9) {
     PORTD=111;
     }
     if(c2>9){
     c2=0;
     PORTD=63;
     c22=c22+1;
     }
     if (c11==0){
     PORTB=0b0111111;
     }
     if (c11==1) {
     PORTB=0b0000110;
     }
     if (c11==2) {
     PORTB=0b1011011;
     }
     if (c11==3) {
     PORTB=0b1001111;
     }
     if (c11==4) {
     PORTB=0b1100110;
     }
     if (c11==5) {
     PORTB=0b1101101;
     }
     if (c11==6) {
     PORTB=0b1111101;
     }
     if (c11==7) {
     PORTB=0b0000111;
     }
     if (c11==8) {
     PORTB=0b1111111;
     }
     if (c11==9) {
     PORTB=0b1101111;
     }
     if(c11>9){
     c11=0;
     }
     if (c22==0){
     PORTA=0b000000;
     }
     if (c22==1) {
     PORTA=0b000001;
     }
     if (c22==2) {
     PORTA=0b000010;
     }
     if (c22==3) {
     PORTA=0b000011;
     }
     if (c22==4) {
     PORTA=0b000100;
     }
     if (c22==5) {
     PORTA=0b000101;
     }
     if (c22==6) {
     PORTA=0b000110;
     }
     if (c22==7) {
     PORTA=0b000111;
     }
     if (c22==8) {
     PORTA=0b001000;
     }
     if (c22==9) {
     PORTA=0b001001;
     }
     if(c22>9){
     c22=0;
     }
     }
     }
                      }
...
02/12/2014 #2

Avatar de aguevara

Asegura que en el registro TRISE el bit 4 este a 0, con los bits 0,1 y 2 les asignas la direccion (si son entrada o salida) ademas asegura que en el registro ADCON1 con los bits 0,1,2 y 3 asignes los pines del puerto E como D (i/o digital) y con ello tienes disponibles los pines del puerto E para entradas o salidas.
02/12/2014 #3


Gracias aguevara, efectivamente faltaba configurar ADCON1=0x06, osea, todos los puertos como I/O digitales. Y nuevamente gracias por responder. problema solucionado.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.