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

Temas similares

17/11/2008 #1


Contador con PIC16F628 y salida a display de 7 segmentos
Hola expertos necesito una pequeña ayuda necesito realizar un programa tal que: a) Al apretar una tecla ejemplo A incremente el valor mostrado en un DISPLAY de 7 segmentos a una frecuencia de 1 hz. b) Al apretar otra tecla ejem D decremente el DISPLAY. c) Al apretar otra ejem C el DISPLAY se hará cero. ayuda con el asm....
Muchas gracias ......
17/11/2008 #2

Avatar de Moyano Jonathan

yo en una de esas si queres te puedo pegar una mano con el código pero en c porque el asm no lo manejo bien todavía
19/11/2008 #3


gracias amigo de todas formas pero ...necesito el asm gracias igual....
19/11/2008 #4

Avatar de Meta

Lo que pides puedes buscarlo aquí pero es del 16F84A así que no te costará adaptarlo a 16F628A
La clave es:
D.P.E.

http://www.pic16f84a.org/index.php?o...d=66&Itemid=87
19/11/2008 #5


Muchas Gracias Amigo muy buena referencia ..MUchas Gracias
24/11/2008 #6


Contador + 16f628a
Hola este es un pequeño programa espero que te sirva, te mando ambos codigos en C y en Assembler y la simulacion en proteus.

Código:
#include <16f628a.h>
#use delay (clock=4000000)
#byte portb=0x06
#byte porta=0x05

#bit ra0=0x05.0
#bit ra1=0x05.1
#bit ra2=0x05.2

void main()
{
 set_tris_a(255);
 set_tris_b(0);
 
 portb=0;
 while(1)
 {
  if(ra0==0)
  {
   portb++;
   delay_ms(300);
   if(portb==9)
    portb=0;
  }
  if(ra1==0)
  {
  if (portb==0){
    portb=0b00001001;
     delay_ms(300);}
   else
   portb--;
   delay_ms(300);
   
  }
  if(ra2==0)
  {
   portb=0;
   delay_ms(300);
  } 
 }
} 


Ahora en Assembler:

ROM used: 85 words (4%)
                         Largest free fragment is 1963
               RAM used: 7 (3%) at main() level
                         8 (4%) worst case
               Stack:    1 locations

*
0000:  MOVLW  00
0001:  MOVWF  0A
0002:  GOTO   019
0003:  NOP
.................... #include <16f628a.h> 
.................... //////// Standard Header file for the PIC16F628A device //////////////// 
.................... #device PIC16F628A 
.................... #list 
....................  
.................... #use delay (clock=4000000) 
0004:  MOVLW  22
0005:  MOVWF  04
0006:  BCF    03.7
0007:  MOVF   00,W
0008:  BTFSC  03.2
0009:  GOTO   018
000A:  MOVLW  01
000B:  MOVWF  78
000C:  CLRF   77
000D:  DECFSZ 77,F
000E:  GOTO   00D
000F:  DECFSZ 78,F
0010:  GOTO   00C
0011:  MOVLW  4A
0012:  MOVWF  77
0013:  DECFSZ 77,F
0014:  GOTO   013
0015:  GOTO   016
0016:  DECFSZ 00,F
0017:  GOTO   00A
0018:  RETLW  00
.................... #byte portb=0x06 
.................... #byte porta=0x05 
....................  
.................... #bit ra0=0x05.0 
.................... #bit ra1=0x05.1 
.................... #bit ra2=0x05.2 
....................  
.................... void main() 
.................... { 
0019:  CLRF   04
001A:  BCF    03.7
001B:  MOVLW  1F
001C:  ANDWF  03,F
001D:  MOVLW  07
001E:  MOVWF  1F
....................  set_tris_a(255); 
001F:  MOVLW  FF
0020:  TRIS   5
....................  set_tris_b(0); 
0021:  MOVLW  00
0022:  TRIS   6
....................   
....................  portb=0; 
0023:  CLRF   06
....................  while(1) 
....................  { 
....................   if(ra0==0) 
0024:  BTFSC  05.0
0025:  GOTO   032
....................   { 
....................    portb++; 
0026:  INCF   06,F
....................    delay_ms(300); 
0027:  MOVLW  02
0028:  MOVWF  21
0029:  MOVLW  96
002A:  MOVWF  22
002B:  CALL   004
002C:  DECFSZ 21,F
002D:  GOTO   029
....................    if(portb==9) 
002E:  MOVF   06,W
002F:  SUBLW  09
0030:  BTFSC  03.2
....................     portb=0; 
0031:  CLRF   06
....................   } 
....................   if(ra1==0) 
0032:  BTFSC  05.1
0033:  GOTO   049
....................   { 
....................   if (portb==0){ 
0034:  MOVF   06,F
0035:  BTFSS  03.2
0036:  GOTO   041
....................     portb=0b00001001; 
0037:  MOVLW  09
0038:  MOVWF  06
....................      delay_ms(300);} 
0039:  MOVLW  02
003A:  MOVWF  21
003B:  MOVLW  96
003C:  MOVWF  22
003D:  CALL   004
003E:  DECFSZ 21,F
003F:  GOTO   03B
....................    else 
0040:  GOTO   042
....................    portb--; 
0041:  DECF   06,F
....................    delay_ms(300); 
0042:  MOVLW  02
0043:  MOVWF  21
0044:  MOVLW  96
0045:  MOVWF  22
0046:  CALL   004
0047:  DECFSZ 21,F
0048:  GOTO   044
....................     
....................   } 
....................   if(ra2==0) 
0049:  BTFSC  05.2
004A:  GOTO   053
....................   { 
....................    portb=0; 
004B:  CLRF   06
....................    delay_ms(300); 
004C:  MOVLW  02
004D:  MOVWF  21
004E:  MOVLW  96
004F:  MOVWF  22
0050:  CALL   004
0051:  DECFSZ 21,F
0052:  GOTO   04E
....................   }  
....................  } 
0053:  GOTO   024
.................... }  
0054:  SLEEP

Configuration Fuses:
   Word  1: 3F73   NOWDT PUT NOPROTECT BROWNOUT MCLR NOLVP RC NOCPD
Archivos Adjuntos
Tipo de Archivo: rar inc_dec_700.rar (38,0 KB (Kilobytes), 939 visitas)
26/11/2008 #7



te quedo muy agradecido amigo , deverdad me has salvado la vida ....de verdad te lo agradezco .....Saludos
17/06/2009 #8


muchas gracias gemetzelgott me sirvio mucho tu programa, ademas le hice un cambio porque el 7448 cuenta hasta 16 y yo puse el 4511 cmos porque este cuenta hasta 9.
y le hice un cambio al prgrama por que cuando contaba hacia arriba y te detienes , y sigues para abajo desde 8 o 9
y vuelves a subir el display te muestra 10 para arriba pero en caracteres errados propios del 7448.
de todas modos esta genial este programa.
me costo corregirlo porque yo manejo mas asm .
si no fuera mucha la patudez podrias hacer un pograma para 4 segmentos?
Archivos Adjuntos
Tipo de Archivo: rar ascdec_new_107.rar (16,0 KB (Kilobytes), 491 visitas)
06/06/2012 #9


muy buen proyecto pero seria preferible que la progra estuviera en PIC Simulator IDE pero muy buen trabajo felicidades
30/03/2013 #10


Hola a todos, estoy trabajando con un proyecto parecido al del amigo aggonzal, solo que este cuenta hata 99. Ya llevo una buena parte, sin embargo, estoy pegado con una condición, paso a describirla. El contador debe ascender cada vez que pulse un pulsador digamos en RC0, esto está bien por lo que llevo, pero he aquí donde encuentro el problema, debo implementar un switch digamos en RE0 que si normalmente está abierto, permite que cada vez que presione el pulsador el contador funcione de forma ascendente, pero si lo cierro, cada vez que pulse nuevamente el pulsador el contador descienda, digamos de 99 a 0. Si me pueden ayudar, les agradezco mucho. Saludos.
30/03/2013 #11

Avatar de fdesergio

Antes de incrementar o decrementar revisa el estado del switch y desde ahi te direccionas a 2 lados diferentes UP y DOWN, sencillo, chauuuuuuuuuuuuu
30/03/2013 #12

Avatar de Meta

Te refieres a un contador como este:

https://www.youtube.com/watch?v=lB9TyErcVU4

Saludo.
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.