Hola gente
Sobre las ideas que aporta el currelo, me he desarrollado un semáforo peatonal de una sola vía para auto, y un solo destino del peatón. La idea se basa en dos controladores, los cuales podrían ser sensores pero para simularlo basta con un par de pulsadores. Eso si, el pulsador en RB0 coincide con la realidad de que lleag un viandante dispuesto a cruzar la calle. Éste se encuentra con un monitor de anuncios que podría bien ser un panel de leds pero que yo desarrollo en mi LCD del PICDEM 2 PLUS demo board del de los micros. Además de ésto, es necesario saber para entender mejor el código, que RA4 es un pulsador el cuál debe ser utilizado de manera lógica e inteligente. Es decir con éste pulsador tendremos que simular dos sensores muy distintos pero muy relacionados. En la prmera parte del código assembler debemos considerar RA4 tal como expecifica brevemenente en la sinapsis, es decir, si pulsamos RA4 significa que no hay coches advirtiendo en éste caso el peatón que puede cruzar libremente la calzada bajo ninguna sospecha y sobreentendida indemnización. En la segunda parte del código, RA4 sirve para controlar totalmente lo contrario, es decir, que el sensor que tengamos para advertir la presencia de algun coche nos comunica lo inevitable, un auto entra en la escena. Por lo cual RA4 es delicado de presentar en el siguiente esquema:
Si os falta alguna librería o rutinas para la pantalla, delays u otros, mirar en los descargables en .asm de la página del que los fabrica y que los desarrolla en ésta demo board. El demo source code me ha servido bien para reiniciarme con los micros hehehe
list p=18f452
#include p18f452.inc
CONFIG OSC = HS
CONFIG WDT = OFF
CONFIG LVP = OFF
CONFIG DEBUG = ON
#define scroll_dir TRISA,4 ; "Doble control" para adivinar si viene un coche
#define scroll PORTA,4 ;Push-button RA4 on PCB
#define select_dir TRISB,0 ; Control para peatones dispuestos a cruzar
#define select PORTB,0 ;Push-button RB0 on PCB
EXTERN LCDInit, temp_wr, d_write, i_write, LCDLine_1, LCDLine_2
variables UDATA
ptr_pos RES 1
ptr_count RES 1
temp_1 RES 1
temp_2 RES 1
temp_3 RES 1
temp_4 RES 1
LSD RES 1
MsD RES 1
MSD RES 1
NumH RES 1
NumL RES 1
TenK RES 1
Thou RES 1
Hund RES 1
Tens RES 1
Ones RES 1
STARTUP CODE 0x04
NOP
goto start
NOP
NOP
NOP
PROG1 CODE
stan_table ;table for standard code
; "XXXXXXXXXXXXXXXX"
; ptr:
data " HELLO " ;0
data "ARE U ALL RIGHT?" ;16
data " DO U WANNA " ;32
data " ACROSS STREET? " ;48
data " PLEASE WAIT " ;64
data " ONLY A SECONDS " ;80
data "CONTINUE THANKS!" ;96
data " HAPPY DAY " ;112
data " CARS TRAFFIC " ;128
data " COME ON!! " ;144
data " MUST BE FAST " ;160
data " LOOK FOR CARS " ;176
data " BE CAREFULLY " ;192
data "AJRubio@Uclan.ac.uk"
start
MOVLW B'00000001' ; carga 00000000 en W
MOVWF TRISB ; puerto b todos salidaS menos RB1
bsf TRISA,4 ;make switch RA4 an Input
bsf TRISB,0 ;make switch RB0 an Input
movlw B'10100100' ;initialize USART
movwf TXSTA ;8-bit, Async, High Speed
movlw .25
movwf SPBRG ;9.6kbaud @ 4MHz
movlw B'10010000'
movwf RCSTA
call LCDInit
;**************** CÓDIGO PARA SEMÁFORO DEL PEATÓN ****************
OLE ;Introduction al cargar el programa
bcf TRISB,1 ; semáforo rojo para peatón encendido
bsf TRISB,2 ; semáforo verde para peatón apagado
bsf TRISB,3 ; semáforo rojo para coches apagado
movlw .0 ;send " Bienvenida" to LCD
movwf ptr_pos
call stan_char_1
movlw .16 ;send " Coordialidad " to LCD
movwf ptr_pos
call stan_char_2
call delay_1s ;delay for display
call delay_1s ;delay for display
movlw .32 ; pregunta al peatón si quiere pasar
movwf ptr_pos
call stan_char_1
movlw .48 ;
movwf ptr_pos
call stan_char_2
call delay_1s ;delay for display
call delay_1s ;delay for display
goto v_wait1
CALM
btfss scroll ;wait for RA4 release
goto $-2
movlw .64 ;send " Coordialidad " to LCD
movwf ptr_pos
call stan_char_1
movlw .80 ;send " Advertencia " to LCD
movwf ptr_pos
call stan_char_2
btfss scroll ;No hay coches en la calzada
goto YEAH ; Se disponen a cruzar los peatones
goto v_wait2
OTRO
btfss scroll ;wait for RA4 release
goto $-2
movlw .64 ;send " Coordialidad " to LCD
movwf ptr_pos
call stan_char_1
movlw .128 ;send " Advertencia " to LCD
movwf ptr_pos
call stan_char_2
v_wait4
btfss select ; Bienvenida a otro peatón
bra CALM
btfsc scroll ; Hay coches cruzando la calle
bra v_wait4
btfss scroll ; No existen coches en la calzada
goto YEAH ;wait for RA4 release
v_wait2
btfss select ; Bienvenida a otro peatón
bra OTRO
btfsc scroll
bra v_wait2
btfss scroll ; no existen coches en la calzada
goto YEAH ;wait for RA4 release
v_wait1
btfss select ; bienvenida del peatón a la invitación
bra CALM
btfsc scroll ; hay coches en la calzada
bra v_wait1
btfss scroll ; no hay coches en la calzada
bra $-2 ; espera que RA4 sea selecionado como control (NO HAY COCHES)
YEAH
btfss scroll ;wait for RA4 release
goto $-2
btfss select ;wait for RB0 release
goto $-2
bcf TRISB,3 ; coche con semáforo rojo
call delay_1s ; Comienza un tiempo de demora
call delay_1s ; Tiempo de reacción de un carro que viene despistado
call delay_1s
call delay_1s
bsf TRISB,1 ; Apaga semáforo rojo peatón
bcf TRISB,2 ; Peatón con semáforo verde
movlw .96 ;send " Consejo " to LCD
movwf ptr_pos
call stan_char_1
movlw .112 ;send " Amabilidad " to LCD
movwf ptr_pos
call stan_char_2
call delay_1s ; Tiempo para cruzar la via
call delay_1s ; El peatón sale de la calzada
goto v_wait3
RUN
movlw .144 ;send "Microchip" to LCD
movwf ptr_pos
call stan_char_1
movlw .160 ;send "PICDEM 2 PLUS" to LCD
movwf ptr_pos
call stan_char_2
call delay_1s ; Tiempo para que el peatón salga de la vía
call delay_1s
goto v_wait5
RUNNING
movlw .176 ;send "Microchip" to LCD
movwf ptr_pos
call stan_char_1
movlw .192 ;send "PICDEM 2 PLUS" to LCD
movwf ptr_pos
call stan_char_2
call delay_1s ; Tiempo para que el peatón salga de la vía
call delay_1s
goto v_wait3
v_wait5
btfss select ;un peatón entrando en la calzada
bra RUNNING
btfsc scroll ;mientras no haya coches
bra v_wait5
btfss scroll ;YES hay coches-->INICIO
bra $-2 ;wait for RA4 release
bcf TRISB,1 ; Enciende semáforo rojo del peatón
bsf TRISB,2 ; Apaga semáforo verde el peatón
call delay_1s ; Tiempo de seguridad y reacción del peatón
call delay_1s
goto OLE
v_wait3
btfss select ; Un peatón entrando en la calzada
bra RUN
btfsc scroll ; Mientras no haya coches
bra v_wait3
btfss scroll ;YES hay coches-->INICIO
bra $-2 ;wait for RA4 release
bcf TRISB,1 ; Enciende semáforo rojo del peatón
bsf TRISB,2 ; Apaga semáforo verde el peatón
call delay_1s ; Tiempo de seguridad y reacción
call delay_1s ; Para un peatón despistado o valiente
goto OLE