Ensamblador - Encender un solo segmento de un display cada 300 micro-segundos sin usar interrupciones

 
Vista:
sin imagen de perfil

Encender un solo segmento de un display cada 300 micro-segundos sin usar interrupciones

Publicado por Marcos (2 intervenciones) el 10/09/2014 23:31:43
¿Que tal? La cuestión es que estoy intentando encender un solo segmento de un display cada 300 micro-segundos sin usar interrupciones mediante la siguiente forma. El código compila, pero no funciona correctamente en proteus, por ende algo estoy haciendo mal. La idea es poder identificar como hacer esto para luego ir haciéndolo uno a uno con cada segmento del display. Desde ya, muchas 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
list p=16F628A
#include <p16f628a.inc>
 
BIT EQU 0X20
 
org 0x05
 
	   bsf STATUS,RP0                                    ;Configuro el puerto B como salida
	   clrf TRISB
	   bcf STATUS,RP0
	   movlw 0x30				    ;Configuro el prescaler para dividir por 8 y el TMR1 con 300 microsegundos
	   movwf T1CON
	   movlw 0x6D
	   movwf TMR1H
	   movlw 0x84
	   movwf TMR1L
 
NADA   btfss PIR1, TMR1IF                ;SI SE LEVANTO LA BANDERA DEL TMR1, VA A ENCENDER EL LED 
	     goto NADA
	    goto LEDS
 
LEDS
	   movlw 0x01                                         ;ENCIENDE EL SEGMENTO ANTERIOR MENCIONADO
	   movwf PORTB
	   clrf  PORTB                                              ; LO APAGA
	   goto  TMR1	  			                  ; SE DIRIGE A CARGAR NUEVAMENTE EL TEMPORIZADOR
 
TMR1
       bcf PIR1, TMR1IF				                 ;LIMPIA LA BANDERA DEL TMR1
	   movlw 0x6D                                                 ;CARGO NUEVAMENTE CON 300 MICROSEGUNDOS
	   movwf TMR1H
	   movlw 0x84
	   movwf TMR1L
	   goto  NADA		   	                         ;VUELVO A ESPERAR HASTA QUE SE LEVANTE LA BANDERA
 
	   end
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder