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

Temas similares

22/08/2012 #1


Problema en codigo CCS PIC 16F84A
Hola a todos, soy nuevo en programacion de micros con CCS, y tengo el siguiente problema, hice un codigo para encender una serie de de 4 led a traves del puerto B del pic 16F84. Al hacerlo manualmente con OUTPUT_HIGH(PIN_xx) para cada secuencia no hay problemas, pero al querer hacerlo mas automatizado, creando un registro de 8 bit y ponerlo en el puerto B, no me funciona bien, no me prenden los led como dice el codigo. Alguien podria ayudarme e indicarme que estoy haciendo mal? copio el codigo en CCS:

Código:
#include "C:\Program Files\PICC\Examples\Proyectos\led1.h"
#byte port_a = 0x05
#byte port_b = 0x06
#byte set_tris_a = 0x85
#byte set_tris_b = 0x86
#byte dato1 = 0x0C
#byte dato2 = 0x0F
#byte dato3 = 0x10
#byte dato4 = 0x11

void main()
{
set_tris_a=0b00000000;
set_tris_b=0b00000000;
dato1=0b10000000;
dato2=0b01000000;
dato3=0b00100000;
dato4=0b00010000;
while(true){
port_b=dato1;
delay_ms(200);
port_b=dato2;
delay_ms(200);
port_b=dato3;
delay_ms(200);
port_b=dato4;
delay_ms(200);
}
}

Codigo con el cual me funciona perfecto:

Código:
#include "C:\Program Files\PICC\Examples\Proyectos\led1.h"
#byte port_a = 0x05
#byte port_b = 0x06
#byte set_tris_a = 0x85
#byte set_tris_b = 0x86
#byte dato1 = 0x0C
#byte dato2 = 0x0F
#byte dato3 = 0x10
#byte dato4 = 0x11

void main()
{
set_tris_a=0b00000000;
set_tris_b=0b00000000;
dato1=0b10000000;
dato2=0b01000000;
dato3=0b00100000;
dato4=0b00010000;
while(true){
output_high(PIN_B7);
output_low(PIN_B6);
output_low(PIN_B5);
output_low(PIN_B4);
output_low(PIN_B3);
output_low(PIN_B2);
output_low(PIN_B1);
output_low(PIN_B0);
delay_ms(200);
output_low(PIN_B7);
output_high(PIN_B6);
output_low(PIN_B5);
output_low(PIN_B4);
output_low(PIN_B3);
output_low(PIN_B2);
output_low(PIN_B1);
output_low(PIN_B0);
delay_ms(200);
output_low(PIN_B7);
output_low(PIN_B6);
output_high(PIN_B5);
output_low(PIN_B4);
output_low(PIN_B3);
output_low(PIN_B2);
output_low(PIN_B1);
output_low(PIN_B0);
delay_ms(200);
output_low(PIN_B7);
output_low(PIN_B6);
output_low(PIN_B5);
output_high(PIN_B4);
output_low(PIN_B3);
output_low(PIN_B2);
output_low(PIN_B1);
output_low(PIN_B0);
delay_ms(200);
}
}
24/08/2012 #2

Avatar de Saint_

Hola, el problema esta en #byte xx
26/08/2012 #3


definitivo el uso de C es una de las peores desiciones

---------- Actualizado después de 9 minutos ----------

c es lo menos aconsejable para este micro
26/08/2012 #4


el problema no es c, es no saber usarlo correctamente xD o por lo menos desde mi punto de vista.
si pruebas a poner en vez de:
port_b=dato1
OUTPUT_B(dato1);
y una pregunta... por que les pones valor cuando los defines, y luego otro viaje valor? o has copiado algun programa sin saber muy bien como funciona?
02/09/2012 #5


Gracias por su ayuda!!! voy a probar si me funciona. El programa lo hice yo investigando y leyendo, en CCS, tutoriales y ejemplos en la web.
11/12/2014 #6


Problema en codigo CCS PIC 16F84A
Al montarlo en el protoboard no me funciona.
Una ayuda. ¿Cual es la razón?
Código:
/*
Este programa  permite controlar 4 leds con 4 pulsadores
*/
#include <16f84a.h>
#use delay (clock=4M)
#fuses xt,nowdt

//#include <stdio.h>
//#byte pa=0x05
#byte pa=0x05
#byte pb=0x06

/*
int push=pin_b4; 
int pusha=pin_b5; 
int pushb=pin_b6; 
int pushc=pin_b7; 
*/


void main(){

int estado=0;
int estadoa=0; 
int estadob=0; 
int estadoc=0; 
int salida=0; 
int salidaa=0; 
int salidab=0; 
int salidac=0; 
int estadoant=0; 
int estadoanta=0; 
int estadoantb=0; 
int estadoantc=0;

 set_tris_a(0b00000);
 output_a(0b00000);
 
 set_tris_b(0b11111111);
 output_b(0b00000000);
 
 while(true){
 
 estado=input(pin_b4);
 estadoa=input(pin_b5);
 estadob=input(pin_b6);
 estadoc=input(pin_b7);

 if((estado==0)&&(estadoant==1)) {   //1 //Operador logico AND(&&;
    salida=1-salida;   //1                      //HIGH=1 y LOW=0
    delay_ms(20); 
  }
    estadoant=estado;  //0

  if((estadoa==0)&&(estadoanta==1)) {  //1 0
    salidaa=1-salidaa;  //1
    delay_ms(20);                              //Espera de 20ms para evitar el efecto rebote del pulsador
  }
  estadoanta=estadoa;  //1

  if((estadob==0)&&(estadoantb==1)) {  //1 0
    salidab=1-salidab;  //1
    delay_ms(20);                              //Espera de 20ms para evitar el efecto rebote del pulsador
  }
  estadoantb=estadob;  //1

  if((estadoc==0)&&(estadoantc==1)) {  //1 0
    salidac=1-salidac;  //1
    delay_ms(20);                              //Espera de 20ms para evitar el efecto rebote del pulsador
  }
  estadoantc=estadoc;  //1
  
    if((salida==0)&&(salidaa==0)&&(salidab==0)&&(salidac==0)){  //1
    output_low(PIN_a0);
    delay_ms(10);
    output_low(PIN_a1);
    delay_ms(10);
    output_low(PIN_a2);
    delay_ms(10);
    output_low(PIN_a3);
    delay_ms(10);
  }
  
    if((salida==0)&&(salidaa==0)&&(salidab==0)&&(salidac==1)){  //2
    output_low(PIN_a0);
    delay_ms(10);
    output_low(PIN_a1);
    delay_ms(10);
    output_low(PIN_a2);
    delay_ms(10);
    output_high(PIN_a3);
    delay_ms(10);
  }
    
    if((salida==0)&&(salidaa==0)&&(salidab==1)&&(salidac==0)){  //3
    output_low(PIN_a0);
    delay_ms(10);
    output_low(PIN_a1);
    delay_ms(10);
    output_high(PIN_a2);
    delay_ms(10);
    output_low(PIN_a3);
    delay_ms(10);
  }
    
    if((salida==0)&&(salidaa==0)&&(salidab==1)&&(salidac==1)){  //4
    output_low(PIN_a0);
    delay_ms(10);
    output_low(PIN_a1);
    delay_ms(10);
    output_high(PIN_a2);
    delay_ms(10);
    output_high(PIN_a3);
    delay_ms(10);
  }
    
    if((salida==0)&&(salidaa==1)&&(salidab==0)&&(salidac==0)){  //5
    output_low(PIN_a0);
    delay_ms(10);
    output_high(PIN_a1);
    delay_ms(10);
    output_low(PIN_a2);
    delay_ms(10);
    output_low(PIN_a3);
    delay_ms(10);
  }
    
    if((salida==0)&&(salidaa==1)&&(salidab==0)&&(salidac==1)){  //6
    output_low(PIN_a0);
    delay_ms(10);
    output_high(PIN_a1);
    delay_ms(10);
    output_low(PIN_a2);
    delay_ms(10);
    output_high(PIN_a3);
    delay_ms(10);
  }
    
    if((salida==0)&&(salidaa==1)&&(salidab==1)&&(salidac==0)){  //7
    output_low(PIN_a0);
    delay_ms(10);
    output_high(PIN_a1);
    delay_ms(10);
    output_high(PIN_a2);
    delay_ms(10);
    output_low(PIN_a3);
    delay_ms(10);
  }
    
    if((salida==0)&&(salidaa==1)&&(salidab==1)&&(salidac==1)){  //8
    output_low(PIN_a0);
    delay_ms(10);
    output_high(PIN_a1);
    delay_ms(10);
    output_high(PIN_a2);
    delay_ms(10);
    output_high(PIN_a3);
    delay_ms(10);
  }
    
    if((salida==1)&&(salidaa==0)&&(salidab==0)&&(salidac==0)){  //9
    output_high(PIN_a0);
    delay_ms(10);
    output_low(PIN_a1);
    delay_ms(10);
    output_low(PIN_a2);
    delay_ms(10);
    output_low(PIN_a3);
    delay_ms(10);
  }
    
    if((salida==1)&&(salidaa==0)&&(salidab==0)&&(salidac==1)){  //10
    output_high(PIN_a0);
    delay_ms(10);
    output_low(PIN_a1);
    delay_ms(10);
    output_low(PIN_a2);
    delay_ms(10);
    output_high(PIN_a3);
    delay_ms(10);
  }
    
    if((salida==1)&&(salidaa==0)&&(salidab==1)&&(salidac==0)){  //11
    output_high(PIN_a0);
    delay_ms(10);
    output_low(PIN_a1);
    delay_ms(10);
    output_high(PIN_a2);
    delay_ms(10);
    output_low(PIN_a3);
    delay_ms(10);
  }
    
    if((salida==1)&&(salidaa==0)&&(salidab==1)&&(salidac==1)){  //12
    output_high(PIN_a0);
    delay_ms(10);
    output_low(PIN_a1);
    delay_ms(10);
    output_high(PIN_a2);
    delay_ms(10);
    output_high(PIN_a3);
    delay_ms(10);
  }
    
    if((salida==1)&&(salidaa==1)&&(salidab==0)&&(salidac==0)){  //13
    output_high(PIN_a0);
    delay_ms(10);
    output_high(PIN_a1);
    delay_ms(10);
    output_low(PIN_a2);
    delay_ms(10);
    output_low(PIN_a3);
    delay_ms(10);
  }
    
    if((salida==1)&&(salidaa==1)&&(salidab==0)&&(salidac==1)){  //14
    output_high(PIN_a0);
    delay_ms(10);
    output_high(PIN_a1);
    delay_ms(10);
    output_low(PIN_a2);
    delay_ms(10);
    output_high(PIN_a3);
    delay_ms(10);
  }
    }
    if((salida==1)&&(salidaa==1)&&(salidab==1)&&(salidac==0)){  //15
    output_high(PIN_a0);
    delay_ms(10);
    output_high(PIN_a1);
    delay_ms(10);
    output_high(PIN_a2);
    delay_ms(10);
    output_low(PIN_a3);
    delay_ms(10);
  }
    
    if((salida==1)&&(salidaa==1)&&(salidab==1)&&(salidac==1)){  //16
    output_high(PIN_a0);
    delay_ms(10);
    output_high(PIN_a1);
    delay_ms(10);
    output_high(PIN_a2);
    delay_ms(10);
    output_high(PIN_a3);
    delay_ms(10);
  }
  }
12/12/2014 #7
Moderador

Avatar de D@rkbytes

fjlq dijo: Ver Mensaje
Al montarlo en el protoboard no me funciona.
Una ayuda. ¿Cual es la razón?
Seguramente no colocaste resistencias pull-up en el los pines RB7<>RB4
Te convendría utilizar las resistencias internas del puerto B.

Mira este programa, es similar a lo que estás haciendo, pero más sencillo.
Este programa utiliza las resistencias pull-up internas del puerto B.
Código PHP:
#include <16f84a.h>
#use     delay(crystal = 4MHz)
#use     fast_io(a)

void main (void)
{
   
port_b_pullups(true);
   
set_tris_a(0xF0);             // RA3<>RA0 como salidas.
   
output_a(0x00);               // Pines de salida en 0
   
   
while (true)
   {
      if(!
input(pin_b7))         // Si RB7 = 0...
      
{
         
output_toggle(pin_a3);  // Cambia de estado RA3
         
while(!input(pin_b7));  // Esperar a que se suelte el pulsador.
      
}
      
      if(!
input(pin_b6))         // Se repite, pero con los otros pines...
      
{
         
output_toggle(pin_a2);
         while(!
input(pin_b6));
      }
      
      if(!
input(pin_b5))
      {
         
output_toggle(pin_a1);
         while(!
input(pin_b5));
      }
      
      if(!
input(pin_b4))
      {
         
output_toggle(pin_a0);
         while(!
input(pin_b4));
      }
   }

Este es el esquema: 16F84A 4 Toggle LED's.jpg
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.