viernes, 19 de octubre de 2012

3.- Primer programa de prueba. Contador de 8bits

Bien, comenzamos con un circuito sencillo.
Lo que trataremos de realizar en esta ocasión es un contador de 8 bits, es decir, un circuito que cuente de 0 a 255 (8 bits) en binario y muestre esa cuenta por medio de un arreglo de leds.

Tenemos que poder ver esa cuenta, y sabemos que un Microcontrolador tiene una velocidad de 4MHz para este caso, por tanto, necesitamos que incremente su cuenta cada cierto tiempo para poder apreciar que demonios esta contando, así que, ocupamos un retardo de tiempo también.

Comenzamos por el circuito:


Esquemático



El código en assembler para pic (mpasm):


 1 ;Hazael Fernando Mojica García
 2 ;Villeurbanne, Francia
 3 ;18/10/2012
 4 ;GPL
 5
 6 #include <p16f628.inc>
 7
 8 ;Definicion de variables
 9 cblock 0x20             ;Inicio de la RAM disponible
10 COMPTE:1                ;Variable de un byte
11 VARDEL1:1               ;Variable de un byte
12 VARDEL2:1               ;Variable de un byte
13 endc
14
15 ;Comienza Programa
16     org 00h             ;Vector de reset
17     goto Start
18
19 Start
20
21     clrw                ;Limpia registro w (acumulador)
22     movwf PORTB         ;Limpia registro PORTB
23     bsf STATUS,RP0      ;Set bit RP0 (5) del registro STATUS (Acceso a bank 1)
24     movwf TRISB         ;Declaramos como salida el Puerto B colocando 0 en el
25     bcf STATUS,RP0      ;Clear bit RP0(5) del registro de STATUS (Acceso a bank 0)
26
27     ;El bit RP0 (bit 5), junto con RP1 (bit 6), son para activar/desactivar Lectura y Escritura
28     ;Recordar siempre colocar a 1 el bit PR0 de STATUS antes de modificar el modo (entrada/salida) de un puerto
29     ;Y después, al acabar, colocarlo de nuevo en 0
30
31 Init
32     clrf COMPTE         ;Limpiamos la variable COMPTE
33
34 IncCompte
35     incf COMPTE,F       ;Incrementamos COMPTE y guardamos resultado en COMPTE, igual sería: incf COMPTE,1. En C dería algo como COMPTE++ o COMPTE = COMPTE +1
36     movf COMPTE,W       ;Copiamos el valor de la variable COMPTE al acumulador W
37     movwf PORTB         ;Copiamos el valor del acumulador W al puerto B
38     call Delai          ;Entramos a la función delai
39     goto IncCompte      ;Regresamos a incrementar el contador, una vez que este se desborde, es decir, sobrepase el byte, regresará a 0
40
41 ;La función, si es que podemos llamarla función debido a que esto es assembler, de Delai, es crear un retardo de tiempo de unos cauntos milisengudos
42 ;lo suficiente para ver cambiar los leds
43 ;Si observamos bien la estructura de Delai, veremos que es algo así como un bucle for anidado dentro de otro.
44 Delai
45     movlw 0xFF          ;Copiamos una literal o constante al acumulador W, en este caso 0xFF
46     movwf VARDEL2       ;Copiamos el registro del acumulador W a VARDEL2
47
48 D0
49     movwf VARDEL1      
50
51 D1
52     decfsz VARDEL1,F
53     goto D1
54     decfsz VARDEL2,F
55     goto D0
56     return
57
58 end                     ;Fin del programa
59

Ver mejor: aqui

Descargas:
Proyecto completo (.DSN de proteus y proyecto de MPLABX): aqui




Tags:

  • Contador de 8 bits
  • Contador de un byte
  • Pic
  • Assembler
  • MPASM
  • MPLABX
  • Pic C
  • CCS
  • XC8

1 comentario: