Sei sulla pagina 1di 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 equ status equ ptoa equ ptob equ ptoc equ ptod equ ptoe equ pclath equ intcon equ pir1 equ rcsta equ txreg equ rcreg equ adresh equ adcon0 trisa equ trisb equ trisc equ trisd equ trise equ txsta equ spbrg equ adresl equ adcon1 02h 03 05 06 07 08 09 0ah 0bh 0ch 18h 19h 1ah 1eh equ 85h 86h 87h 88h 89h 98h 99h 9eh equ

1fh

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 EQU 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'37FF' 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'

__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON ; ***** EMPIEZA EL PROGRAMA org goto 00 inicio ;Empieza ejecucion en direccion 000h

retarms movlw d'255' ;subrutina de retardo en milisegundos movwf loops top2 movlw d'110' ;el numero de milisegundos est movwf loops2 ;cargado en el registro loops top nop nop nop nop nop nop decfsz loops2,1 ;pregunta si termino 1 ms goto top decfsz loops,1 ;pregunta si termina el retardo goto top2 return tabla addwf retlw retlw retlw pcl,1 b'10000000' b'01000000' b'00100000'

retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw

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 ;puerto E entradas ;puerto D entradas ;puerto C entradas ;puerto B salidas ;puerto A entradas

movlw b'11110111' ;puerto A como digital movwf adcon1 bcf clrf clrf seguir movf status,rp0 ptob contador contador,0 ;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

call

tabla

;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

movwf ptob call incf de la tabla retarms contador,1

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

;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 ;si no ha llegado a 24 sigue leyendo la tabla ;Vuelve a empezar el ciclo

Potrebbero piacerti anche