Autor Tema: semáforo peatonal sobre PIC18f542 en assembler  (Leído 4341 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado shagui

  • PIC10
  • *
  • Mensajes: 12
semáforo peatonal sobre PIC18f542 en assembler
« en: 09 de Noviembre de 2007, 14:14:33 »
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




 

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: semáforo peatonal sobre PIC18f542 en assembler
« Respuesta #1 en: 09 de Noviembre de 2007, 15:43:54 »
Que es esa mezcla de comentarios en varios idiomas?? :shock:
Falta el Alemán !! :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.


 

anything