TODOPIC
Otros Microcontroladores / Dispositivos programables => Microcontroladores ARM => Mensaje iniciado por: scientist en 13 de Marzo de 2009, 15:49:33
-
hola amigos del foro, estoy haciendo un programa de un semaforo muy sencillo, lo simulo en THRSim11 y me simula bien, pero es muy lento debido a su naturaleza, y como hago un delay grande, me tardo mucho tiempo viendo los cambios, quise hacerlo en proteus pero me sale un error, que se repite muchas veces, es algo asi como write read only address $XXXX consecutivamente, aqui pongo el codigo, por que ya no se que hacer para que se simule, saludos
;
;SEMAFORO
;LOCALIZACION DE SEMAFORO EN EL PUERTO D
;DOS SEMAFOROS
;PINES CORRESPONDIENTES D0,D1,D2 SEMAFORO 1
;PINES CORRESPONDIENTES D3,D4,D5 SEMAFORO 2
;D0- VERDE, D1-AMARILLO, D2 ROJO
;D3-VERDE, D4-AMARILLO, D5 ROJO
; el semaforo se encuentra en 4 fases
;fase uno semaforo2 esta en verde semaforo uno en rojo
;fase dos semaforo2 en amarillo, semaforo1 en rojo
;fase tres semaforo2 en rojo, semaforo1 en verde
;fase cuatro semaforo2 en rojo, semaforo1 en amarillo
TMSK1 EQU $22
TFLG1 EQU $23
TCTL1 EQU $20
TOC5 EQU $1E
TMSK2 EQU $24
TCNT EQU $0E
PORTD EQU $08 ; Dirección del puerto D
DDRD EQU $09 ; Configuración del puerto D
DOSSEG EQU $C8 ;VALOR PARA 2 SEGUNDOS
UNO EQU $0C ;fase 1
DOS EQU $14 ;fase 2
TRES EQU $21 ;fase 3
CUATRO EQU $22 ;fase 4
TIEMPO EQU 20000 ; Número de tics de reloj necesarios para generar un
; retraso de 10 ms. Cada tic de reloj son 500ns = 0.5microseg
; 20000*0.5 = 10000microseg = 10mseg.
ORG $010
LDX #$1000
INIT LDAA #$FF
STAA DDRD,X ;CONFIGURAMOS EL PUERTO D COMO SALIDA
CLRA
STAA PORTD,X ;PONEMOS A CEROS TODO EL PUERTO D
LDAA #50 ; Esperar 50 unidades de tiempo = 500mseg
BSR delay
bucle LDAA #UNO
STAA PORTD,X ; PONEMOS FASE 1 EN EL PUERTO D
LDAB #5
DE10 LDAA #DOSSEG
BSR delay ;esperamos 10 segundos con el semaforo 2 con verde
DECB
BNE DE10
LDAA #DOS
STAA PORTD,X ;DESPLEGAMOS EN PUERTO D SEGUNDA FASE
LDAA #DOSSEG ;guardamos los 2 segundos en registro A
BSR delay ;saltamos a subrutina delay
LDAA #TRES guardamos fase 3 en registro A
STAA PORTD,X ;ponemos el valor de registro A en la direccion donde se localiza el puerto D
LDAB #5
DEC11 LDAA #DOSSEG ;cargamos los 10 segundos en A
BSR delay ;saltamos a subrutina delay para que haga el retardo de tiempo
DECB
BNE DEC11
LDAA #CUATRO ;cargamos fase 4 en A
STAA PORTD,X ;desplegamos el valor de fase4 en puerto A
LDAA #DOSSEG ;cargamos 2 segundos en A
BSR delay ;saltamos a subrutina delay
BRA bucle
;+-----------------------------------------------------------------+
;¦ Subrutina para de espera. ¦
;¦ ENTRADAS: Acumulador A contiene el número de unidades de tiempo ¦
;¦ a esperar. Cada unidad de tiempo son 10ms. ¦
;+-----------------------------------------------------------------+
delay
CMPA #0 ; ¿Queda alguna unidad de tiempo por esperar ?
BEQ fin_delay ; No--> terminar
DECA ; Si--> queda una unidad menos
BSR delay10 ; Esperar una unidad de tiempo
BRA delay ; Repetir
fin_delay
RTS
;+---------------------------------+
;¦ Subrutina para esperar 10ms. ¦
;+---------------------------------+
delay10
PSHA
PSHB
LDD TCNT,X ; Escribir en comparador 5 el valor del
ADDD #TIEMPO ; temporizador principal más el número de
STD TOC5,X ; tics de reloj necesarios para una pausa
; de 10ms.
BSET TFLG1,X $08 ; Poner a cero flag del comparador 5
oc5 BRCLR TFLG1,X $08 oc5 ; Esperar a que se activa flag del comparador
PULA
PULB
RTS ; Terminar
END
-
No conozco proteus y quiero probarlo pero deseo saber
Que microcontroladores de Freescale simula proteus?
Puedo programar en C o solo en ensamblador?
Esta es la web principal de proteus?
http://www.labcenter.co.uk/index.cfm
gracias
-
Holacdrpo, proteus es bueno con microcontroladores microchip y varias marcas, pero no tiene mucho de freescale, solo tienen algunos modelos de hc11, y no maneja las nuevas arquitecturas de freescale con nucleo HCS08 y HCS12, te recomiendo que cheques como utilzar el visual tools de codewarrior, no se compara a proteus, pero ya es algo al menos en simulacion grafica, saludos