
Ayuda con assembler en pic
Publicado por Chriska (1 intervención) el 29/09/2015 01:31:08
Hola, estoy haciendo un contador de 00 a 99, con un pulsador conectado a la patita rb0 y los displays en ra0, cuando ra0 es 1 muestra unidad y cuando es 0 muestra decena. Compila perfectamente en mplab, pero en proteus me muestra la siguiente simulación:

Codigo:
NECESITO AYUDA, por favor!!
Y GRACIAS.
Codigo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
org 0x00
goto INICIO
org 0x04
INTERRUPCION:
btfss INTCON,1 ;Chequea el bit 1 de INTCON
retfie
CONTAR:
incf ContUnidad ;Incremento el contador
movlw d'10' ;Le asigno 10 a w
subwf ContUnidad,W ;Hago una resta entre el contador y lo que hay en W.
btfsc STATUS,Z ;z=0 salta, z=1 limpia el contador.
goto FLAG
goto LIMPIAR_UNIDAD ;Va a reiniciar el contador de unidad.
CONTAR_DECENA:
incf ContDecena,F ;Incremento el contador de decena.
movlw d'10' ;Le asigno 10 a w
subwf ContDecena,W ;Realiza una resta.
btfsc STATUS,Z ; z=0 salta, z=1 limpia el contador.
goto FLAG
clrf ContDecena ;Limpia contador decena.
goto FLAG
LIMPIAR_UNIDAD:
clrf ContUnidad ;Limpia el contador de unidad.
goto CONTAR_DECENA ;Va a la subrutina del contador de decena.
FLAG:
bcf INTCON,1 ;Pone en cero el flag del pin RB0
retfie ;y sale de la rutina de interrupción.
;-------------------------------------------
INICIO:
Banco1
bsf OPTION_REG,7 ;Se activa el pull-up
bcf OPTION_REG,6 ;Se pone en 0 el bit 6 del reg. Option eligiendo flanco ascendente
;para la interrupción del pin RB0.
movlw 0x07
movwf CMCON
movlw 0x01 ;Inidicamos que el puerto 0 de trisa y trisb será de salida
movwf TRISA
movwf TRISB
Banco0
bsf INTCON,7 ;Se pone a 1 el bit 7 del registro intcon que activa las interrupciones
;globales.
bsf INTCON,4 ;Se pone a 1 el bit 4 del reg, Intcon activando las interrupciones
;por pin RB0.
clrf ContUnidad ;Inicia contador unidad en cero.
clrf ContDecena ;Inicia contador unidad en cero.
;--------------------------------------------------
PROGRAMA:
movf ContUnidad,W ;Mueve lo que hay en ContUnidad a w.
call TABLA_VALORES ;Busca el valor de W en la tabla.
movwf PORTB ;Lo muestra en el puerto b.
DisplayUni ;Pone a RA0 en 1
call RETARDO ;Realiza un retardo
SALIDA1:
movf ContDecena,W
call TABLA_VALORES
movwf PORTB
DisplayDec ;Pone a RA0 en 0
call RETARDO2
;-----------------------------------------------------
TABLA_VALORES:
addwf PCL,W
retlw b'1111110' ;0
retlw b'0110000' ;1
retlw b'1101101' ;2
retlw b'1111001' ;3
retlw b'0110011' ;4
retlw b'1011011' ;5
retlw b'1011111' ;6
retlw b'1110000' ;7
retlw b'1111111' ;8
retlw b'1110111' ;9
;---------------------------------------------------
NECESITO AYUDA, por favor!!
Y GRACIAS.
Valora esta pregunta


1