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
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
Muchas Gracias me es muy util
ResponderEliminar