Circuitos Digitales - Ayuda con assembler en pic

   
Vista:
Imágen de perfil de Chriska

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:

proteuss

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder