miércoles, 22 de julio de 2009

Programando pic's desde linux. (código)

En este punto, aún puedo escuchar un viejo reclamo de una amiga muy querida que solía decirnos a su novio y a mi: 'Estas como medio obsesionado con la programación. Me das miedo...'

Y siguiendo esa línea y en el mismo mood, se me ha dado la idea de hacer y poner todo un programa comentado para compartirlo con la comunidad estudiantil que lo necesite.

Espero que les pueda servir de algo.
; Programa de muestra hecho para el estudio de mi enanisima!!!

;Bits de configuración.
;LVD_OFF=Programa de voltaje bajo apagado.

;CP_OFF=Protección de código
;PWRTE_ON=habilita el reset mediante power up timer
;XT_OSC=Se utiliza un cristal de cuarzo
;BODEN_OFF=desabilita el reset por caida de tención.
;WDT_OFF= DESABILITA EL PERRO GUARDIAN.

__CONFIG _LVP_OFF & _CP_OFF & _PWRTE_ON & _XT_OSC & _BODEN_OFF & _WDT_OFF

;Generador de archivos list y llamada a librerias.

list p=pic16f877
;RADIX HEX
include<p16f877.inc>

;Declaración de variables
;b'00000111' Este valor pasa al registro OPTION_REG para configurar el divisor de frecuencia.
Prescaler equ d'256'
TMR_50ms equ d'56'

Cont equ 0x20
Cont1 equ 0x21
Temp equ 0x22


;indicadores del pic16f877

org 0x00
;Llamando a la rutina de configuración del pic.
call Init

;Llamando a la rutina principal del programa.
goto Principal
org 4
retfie
org 5

;rutinas

Init
;Cambiando al banco0.
bcf STATUS,RP0
bcf STATUS,RP1

;limpiando los puertos
clrf PORTA
clrf PORTB
clrf PORTC

clrf PORTE
;Cambiando al banco1
bsf STATUS,RP0
;Cambiando puertos de entrada a salida

;clrf TRISA
clrf TRISB
clrf TRISC
clrf TRISD

clrf TRISE
;Cambiando al banco0
bcf STATUS,RP0
return

confPrescaler
bcf STATUS,RP1
bcf STATUS,RP0
movlw b'00000001'

movwf OPTION_REG

;Algoritmo proporcionado por Labra Porthela Victor Manuel
;Lazo anidado.
delay10mS
movlw d'21'

call dmS
return

dmS
movwf Cont

ciclo
decfsz Cont,F
goto dmS1
return

dmS1

call d500uS
nop
goto ciclo

d500uS
movlw d'163'

call duS
return

duS
movwf Cont1


ciclo1
decfsz Cont1,F
goto ciclo1
return

;Programa principal.

Principal
;Usaremos el puerto A como entrada y el puesto B como salida.
movlw PORTA
movf PORTB
call delay10mS
goto Principal
end