Está en la página 1de 4

Secuenciador de luces con PIC16F877

U1
13 14 1 2 3 4 5 6 7 8 9 10 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 200 200 200 200 200 200 200 200

RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RE0/AN5/RD RC2/CCP1 RE1/AN6/WR RC3/SCK/SCL RE2/AN7/CS RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 PIC16F877

D1

D2

D3

D4

D5

D6

D7

D8

LED-RED LED-RED LED-RED LED-RED LED-RED LED-RED LED-RED LED-RED

; ******** DEFINICION DE REGISTROS UTILIZADOS pcl status ptoa ptob ptoc ptod ptoe pclath intcon pir1 rcsta txreg rcreg adresh adcon0 trisa trisb trisc trisd trise txsta spbrg adresl adcon1 equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ 02h 03 05 06 07 08 09 0ah 0bh 0ch 18h 19h 1ah 1eh 1fh 85h 86h 87h 88h 89h 98h 99h 9eh 9fh

;Definicion de bits utilizados rp0 equ 5 rp1 equ 6 irp equ 7 z equ 2 c equ 0 txif equ 4 go equ 2

;Variables del usuario loops equ loops2 equ buffer equ contador 30h 31h 32h equ

43h

; ************ Configuracion para el simulador Proteus list p=16f877 _CP_ALL _CP_HALF _CP_UPPER_256 _CP_OFF _DEBUG_ON _DEBUG_OFF _WRT_ENABLE_ON _WRT_ENABLE_OFF _CPD_ON _CPD_OFF _LVP_ON _LVP_OFF _BODEN_ON _BODEN_OFF _PWRTE_OFF _PWRTE_ON _WDT_ON _WDT_OFF _LP_OSC _XT_OSC _HS_OSC _RC_OSC EQU EQU EQU EQU H'37FF' EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU H'0FCF' H'1FDF' H'2FEF' H'3FFF' H'3FFF' H'3FFF' H'3DFF' H'3EFF' H'3FFF' H'3FFF' H'3F7F' H'3FFF' H'3FBF' H'3FFF' H'3FF7' H'3FFF' H'3FFB' H'3FFC' H'3FFD' H'3FFE' H'3FFF'

EQU

__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON ; ***** EMPIEZA EL PROGRAMA org goto 00 inicio ;Empieza ejecucion en direccion 000h ;subrutina de retardo en milisegundos ;el numero de milisegundos est ;cargado en el registro loops

retarms movlw d'255' movwf loops top2 movlw d'110' movwf loops2 top nop nop nop nop nop nop decfsz loops2,1 goto top decfsz loops,1 goto top2 return

;pregunta si termino 1 ms ;pregunta si termina el retardo

tabla

addwf retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw

pcl,1 b'10000000' b'01000000' b'00100000' b'00010000' b'00001000' b'00000100' b'00000010' b'00000001' b'00000001' b'00000010' b'00000100' b'00001000' b'00010000' b'00100000' b'01000000' b'10000000' b'10000001' b'01000010' b'00100100' b'00011000' b'00011000' b'00100100' b'01000010' b'10000001'

; ************ PROGRAMA PRINCIPAL *************** inicio clrf bsf status status,rp0 ;poner status en cero para asegurar banco 0 ;pasar al banco 1 de la RAM

movlw b'11111111' movwf trisa movlw b'00000000' movwf trisb movlw b'11111111' movwf trisc movlw b'11111111' movwf trisd movlw b'11101111' movwf trise movlw b'11110111' movwf adcon1 ;puerto E entradas ;puerto A como digital ;puerto D entradas ;puerto C entradas ;puerto B salidas ;puerto A entradas

bcf clrf clrf seguir movf call

status,rp0 ptob contador contador,0 tabla

;pasar al banco 0 ;Inicia LEDs apagados ;inicia contador en cero para leer 24 datos de la tabla ;pasa el dato del contador a W ;llama la tabla y lee el dato apuntado por contador ;lo que trae W de la tabla lo pasa al puerto B ;llama retardo para que se vean los LEDs encendidos ;incrementa el contador en uno para que pase al siguiente dato de la tabla ;como son 24 datos de tabla se compara contador con 23 ;xor para comparar si contador llego a 24 ;pregunta si operacion dio cer, es decir, si contador es igual a 24 ;si no ha llegado a 24 sigue leyendo la tabla ;Vuelve a empezar el ciclo

movwf ptob call incf retarms contador,1

movlw d'24' xorwf btfss goto goto end contador,0 status,z seguir inicio

También podría gustarte