gabisomi
Usuario (Argentina)
;**************************************************************************************** ;semaforo ;**************************************************************************************** LIST p=16f84A ;Uso el pic 16f84a RADIX hex ;Programo en hexadecimal #INCLUDE "p16f84a.inc" ;**************************************************************************************** ;ASIGNACIONES ;**************************************************************************************** LEDR EQU 04H LEDV EQU 05H LEDA EQU 06H REG0 EQU 0CH REG1 EQU 0DH REG2 EQU 0EH REG3 EQU 0FH REG4 EQU 10H REG5 EQU 11H REG6 EQU 12H REG7 EQU 13H REG8 EQU 14H REG9 EQU 15H REG10 EQU 16H REG11 EQU 17H ;**************************************************************************************** ;origen ;**************************************************************************************** ORG 0000H GOTO Inicio ORG 0005H ;**************************************************************************************** ;SUB RUTINAS DE RETARDO ;**************************************************************************************** ;******************************** ;ROJO 20S ;******************************** RET20S movlw .71 ; 1 set numero de repeticion (C) movwf REG0 ; 1 | PLoop0 movlw .254 ; 1 set numero de repeticion (B) movwf REG1 ; 1 | PLoop1 movlw .221 ; 1 set numero de repeticion (A) movwf REG2 ; 1 | PLoop2 clrwdt ; 1 clear watchdog clrwdt ; 1 ciclo delay decfsz REG2, 1 ; 1 + (1) es el tiempo 0 ? (A) goto PLoop2 ; 2 no, loop decfsz REG1, 1 ; 1 + (1) es el tiempo 0 ? (B) goto PLoop1 ; 2 no, loop decfsz REG0, 1 ; 1 + (1) es el tiempo 0 ? (C) goto PLoop0 ; 2 no, loop PDelL1 goto PDelL2 ; 2 ciclos delay PDelL2 goto PDelL3 ; 2 ciclos delay PDelL3 clrwdt ; 1 ciclo delay return ; 2+2 Fin. ;***************************************************** ;VERDE 14S ;***************************************************** RET14S movlw .177 ; 1 set numero de repeticion (C) movwf REG3 ; 1 | MU0 movlw .117 ; 1 set numero de repeticion (B) movwf REG4 ; 1 | MU1 movlw .168 ; 1 set numero de repeticion (A) movwf REG5 ; 1 | MU2 clrwdt ; 1 clear watchdog decfsz REG5, 1 ; 1 + (1) es el tiempo 0 ? (A) goto MU2 ; 2 no, loop decfsz REG4, 1 ; 1 + (1) es el tiempo 0 ? (B) goto MU1 ; 2 no, loop decfsz REG3, 1 ; 1 + (1) es el tiempo 0 ? (C) goto MU0 ; 2 no, loop PDelL1 goto MU4 ; 2 ciclos delay MU4 clrwdt ; 1 ciclo delay return ; 2+2 Fin. ;************************************************************ ;INTEMITENTE VERDE 6S ;************************************************************ RET06S movlw .91 ; 1 set numero de repeticion (C) movwf REG6 ; 1 | M0 movlw .95 ; 1 set numero de repeticion (B) movwf REG7 ; 1 | M1 movlw .138 ; 1 set numero de repeticion (A) movwf REG8 ; 1 | M2 clrwdt ; 1 clear watchdog clrwdt ; 1 ciclo delay decfsz REG8, 1 ; 1 + (1) es el tiempo 0 ? (A) goto M2 ; 2 no, loop decfsz REG7, 1 ; 1 + (1) es el tiempo 0 ? (B) goto M1 ; 2 no, loop decfsz REG6, 1 ; 1 + (1) es el tiempo 0 ? (C) goto M0 ; 2 no, loop clrwdt ; 1 ciclo delay return ; 2+2 Fin. ;************************************ ;AM 3S ;************************************ RET03S movlw .67 ; 1 set numero de repeticion (C) movwf REG9 ; 1 | MUI0 movlw .91 ; 1 set numero de repeticion (B) movwf REG10 ; 1 | MUI1 movlw .122 ; 1 set numero de repeticion (A) movwf REG11 ; 1 | MUI2 clrwdt ; 1 clear watchdog decfsz REG11, 1 ; 1 + (1) es el tiempo 0 ? (A) goto MUI2 ; 2 no, loop decfsz REG10, 1 ; 1 + (1) es el tiempo 0 ? (B) goto MUI1 ; 2 no, loop decfsz REG9, 1 ; 1 + (1) es el tiempo 0 ? (C) goto MUI0 ; 2 no, loop PDelL1 goto MUI3 ; 2 ciclos delay MUI3 clrwdt ; 1 ciclo delay return ; 2+2 Fin. ;*********************************************************************************** ; RUTINAS ;*********************************************************************************** CLRF PORTA ; CLRF PORTB ;BORRO EL PUERTO A Y B BSF STATUS,RP0 ;SALTO AL BANCO 1 CLRF PORTB ;PONGO TODO EL PUERTO B COMO SALIDA BCF STATUS,RP0 ;SALTO AL BANCO 0PARA PROGRAMAR SALTO1 BSF PORTB,LEDR ;PRENDO LED ROJO CALL RET20S ;LLAMO AL RETARDO DE 20 SEG BCF PORTB,LEDR ;APAGO LED ROJO BSF PORTB,LEDV ;PRENDO LED VERDE CALL RET14S ;LLAMO AL RETARDO DE 14 SEG BCF PORTB,LEDV ;APAGO EL LED VERDE BSF PORTB,LEDV ;PRENDO EL LED VERDE PARA QUE TITILE CALL RET06S ;TITILA 06 S BCF PORTB,LEDV ;APAGO EL LED VERDE BSF PORTB,LEDA ;PRENDO LED A CALL RET03S ;RETARDO DE 3SEG BCF PORTB,LEDA ;APAGO LED A GOTO SALTO1 END
;--------------------------------------------------------------------------;*********** MANEJO DE LCD 2X16 A 8 BITS *********;-------------------------------------------------------------------------- LIST P=16F84A RADIX HEX #INCLUDE "P16F84A.INC";--------------------------------------------------------------------------;*********** ASIGNACIONES *******************;--------------------------------------------------------------------------ret0 equ 20hret1 equ 21hret2 equ 22hregreg equ 23hregdato equ 24hreg1 equ 28hreg2 equ 29hrs equ 01hrw equ 02he equ 03hrb0 equ 00hrb1 equ 01hrb2 equ 02hrb3 equ 03hrb4 equ 04hrb5 equ 05hrb6 equ 06hrb7 equ 07h;--------------------------------------------------------------------------------;********* ORIGEN **************;-------------------------------------------------------------------------------- ORG 00H GOTO INICIO;--------------------------------------------------------------------------------;********* SUBRUTINAS **************;-------------------------------------------------------------------------------- ORG 05H;--------------------------------------------------------------------; RETARDO DE 0,5 SEGUNDOS;--------------------------------------------------------------------ret05s movlw .239 movwf ret0salto42 movlw .232 movwf ret1salto43 clrwdtsalto44 goto salto45salto45 goto salto46salto46 clrwdt decfsz ret1,f goto salto43 decfsz ret0,f goto salto42 goto salto47 salto47 goto salto48 salto48 goto salto49 salto49 clrwdt return ;-------------------------------------------------------------------; RETARDO DE 10 uS;-------------------------------------------------------------------retardo movlw 05h movwf ret0salto11 decfsz ret0,f goto salto11 return ;--------------------------------------------------------------------; RETARDO DE 5 MILISEGUNDOS;--------------------------------------------------------------------ret5ms movlw .6 movwf ret0salto91 movlw .207 movwf ret1salto92 clrwdt decfsz ret1,f goto salto92 decfsz ret0,f goto salto91 goto salto93salto93 clrwdt return ;-------------------------------------------------------------------; RETARDO DE 200 mS;-------------------------------------------------------------------r200ms movlw .156 movwf ret0salto31 movlw .213 movwf ret1salto32 clrwdt clrwdt decfsz ret1,f goto salto32 decfsz ret0,f goto salto31 goto salto33salto33 goto salto34salto34 clrwdt return;------------------------------------------------------------------------------------;******************* rutina de control del lcd ********************************;------------------------------------------------------------------------------------lcd_e bsf porta,e nop bcf porta,e return lcd_busy bcf porta,rs bsf porta,rw bsf porta,e nopl_busy btfsc portb,rb7 goto l_busy bcf porta,e bcf porta,rs bcf porta,rw returnlcd_reg call lcd_busy movf regreg,w movwf portb bcf porta,rs call lcd_e nop returnlcd_dato call lcd_busy movf regdato,w movwf portb bsf porta,rs call lcd_e nop return;--------------------------------------------------------------------------------;**********************programa principal******************************;--------------------------------------------------------------------------------inicio call ret05s ;esperar 0,5 segundos bcf status,rp1 bsf status,rp0 ;seleccionar banco 1 movlw xxh movwf trisa clrf trisb bcf status,rp0 ;volver al banco 0 clrf portb call ret05s call ret05s ;esperar 1 segundo;LLAMAR A SUBRUTINA DE INICIALIZACION DE LCD jump1 movlw 01h movwf regreg call lcd_reg ;cursor en primer lineamues1 clrf reg1ciclo1 movf reg1,w call tabla1 movwf regdato call lcd_dato movlw 5fh ;retardo entre caracteres movwf reg2salto1 call retardo call retardo decfsz reg2,f goto salto1 incf reg1,f movlw 10h subwf reg1,w btfss status,z goto ciclo1 movlw 0c0h movwf regreg call lcd_reg ;cursor en segunda lineamues2 clrf reg1ciclo2 movf reg1,w call tabla2 movwf regdato call lcd_dato movlw 5fh ;retardo entre caracteres movwf reg2salto2 call retardo call retardo decfsz reg2,f goto salto2 incf reg1,f movlw 10h subwf reg1,w btfss status,z goto ciclo2 ;--------------------------------------------------------------------------------------;********** tablas de mesajes a mostrar en lcd ****************************************;-------------------------------------------------------------------------------------- org xxxxh TABLA1 ADDWF PCL,F RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " "TABLA2 ADDWF PCL,F RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " RETLW " " end