Professional Documents
Culture Documents
Program It A
Program It A
p=16f648A
#include <p16F648A.inc>
errorlevel -302
__CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON &
_WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT
; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file.
; See data sheet for additional information on configuration word settings.
;**********************************************************************
ORG
0x000
; processor reset vector
goto
main
; go to beginning of program
ORG
movwf
movf
movwf
movf
movwf
0x004
w_temp
STATUS,w
status_temp
PCLATH,w
pclath_temp
;
;
;
;
;
;
contents
register
register
register
register
pclath_temp,w
PCLATH
status_temp,w
STATUS
w_temp,f
w_temp,w
;
;
;
;
main
clrf
STATUS
;se borra todo lo que se tenga en
STATUS para poder acceder a un banco
bsf
STATUS,5
;se accede al banco 1
movlw B'00000011'
;solo se activan 2 bits que son lo
s que trabajaremos para controlar las velocidades
movwf TRISA
;movemos lo que tenemos en el regi
stro de trabajo a TRISA para que slo se trabajen con estas 2
clrf
TRISB
;se borra TRISB para que funcionen
como salidas y ocupemos cualquier pin
clrf
STATUS
;accedemos al banco 0
movlw 0x07
;cargamos el dato 0x07
movwf CMCON
;movemos ese numero al registro CM
CON para desactivar las entradas analgicas y convertirlas en digitales
clrf
porta
;limpiamos porta para asegurarnos
que no tenga nada
clrf
portb
;limpiamos portb para asegurarnos
que no tenga nada
principal
movf
RTA al registro
andlw
miento para que
or estos
call
goto
ita esta accin
PORTA,w
;aqu moveremos lo que tenemos en PO
W
b'00000011'
;realizamos lo que es el enmascara
solo nuestros datos cargados en TRISA puedan ser multiplicados p
tabla
principal
todo el tiempo
tabla
addwf PCL,f
PCL al registro f
goto
cero
ama cero
goto
cincuenta
ama cincuenta
goto
setenta
ama setenta
goto
cien
ama cien
cero
BCF PORTA,2
;iniciamos el programa cero coloca
ndo un cero en el pin 2 de PORTA que es para mantener apagado el motor
movlw B'10110000'
;indicaremos que nuestro display e
s de catodo por eso el 1011 y los 0000 para que no haya interferencia entre sali
da del motor y display
movwf PORTA
;lo moveremos a porta
movlw b'00111111' ;O
;cargamos el dato 00111111 que rep
resenta la O
movwf PORTB
;lo movemo a portb para que pueda
ser visualizado
call tiempo
;llamamos a nuestra subrutina de t
iempo
movlw B'01110000'
;indicaremos que nuestro display e
s de catodo por eso el 0111 y los 0000 para que no haya interferencia entre sali
da del motor y display
movwf PORTA
;volvemos a mandar ese dato a port
a
movlw b'01110001' ;F
;escribimos los bits que represent
an la letra f
movwf PORTB
;movemos el dato escrito a portb
call tiempo
;mandamos a llamar a nuestra rutin
a de tiempo
return
brutina
cincuenta
movlw B'10110000'
s de catodo por eso el 1011 y los 0000 para que no haya interferencia entre sali
da del motor y display
movwf PORTA
;moveremos el dato escrito a porta
movlw b'01101101' ;5
sentaremos el 5 en el display
movwf PORTB
pueda ser visualizado
call tiempo
iempo
bsf
PORTA,2
ta
call
tiempo50
;llamaremos a nuestra segunda ruti
na de tiempo que ser de 10 ms
movlw B'01110000'
;indicaremos que nuestro display e
s de catodo por eso el 0111 y los 0000 para que no haya interferencia entre sali
da del motor y display
movwf PORTA
;lo moveremos a porta
movlw b'00111111' ;0
;cargaremos el dato con el que rep
resentaremos el 0 en el display
movwf PORTB
;lo moveremos ahora al puerto b pa
ra que pueda ser visualizado
call tiempo
;llamaremos a nuestra primera ruti
na de tiempo
bcf
PORTA,2
2 de porta
call
tiempo50
na de tiempo de nuevo
return
a subrutina
setenta
movlw B'10110000'
;indicaremos que nuestro display e
s de catodo por eso el 1011 y los 0000 para que no haya interferencia entre sali
da del motor y display
movwf PORTA
;moveremos el dato a PORTA
movlw b'00000111' ;7
;cargaremos el dato con el que rep
resentaremos el 7 en el display
movwf PORTB
;moveremos ese dato a portb
call tiempo
;llamaremos a la rutina de tiempo
bsf
PORTA,2
de porta
call
catorcemili
a, sta es de 14ms
movlw B'01110000'
;indicaremos que nuestro display e
s de catodo por eso el 0111 y los 0000 para que no haya interferencia entre sali
da del motor y displayind
movwf PORTA
;lo moveremos a porta
movlw b'00111111' ;0
;cargaremos el dato con el que rep
resentaremos el 0 en el display
movwf PORTB
;y este dato lo moveremos a portb
call tiempo
;llamaremos a nuesta rutina de tie
mpo
bcf
PORTA,2
;pondremos un cero en la terminal
2 de porta
call
tina de 6ms
seismili
return
ubrutina
cien
bsf
PORTA,2
de porta
movlw B'10111111'
s de catodo por eso el 1011 y 1111 porque la
alidas de nuestro motor para trabajar al 100
movwf PORTA
movlw b'00111111' ;O
tara la O en el display
movwf PORTB
call tiempo
empo
movlw B'01111111'
s de catodo por eso el 0111 y 1111 porque la
alidas de nuestro motor para trabajar al 100
movwf PORTA
movlw b'01010100' ;N
ribiremos la letra n en el display
movwf PORTB
call tiempo
mpo
return
la subrutina
tiempo50
movlw d'10'
en este caso ponemos el 10 porque al trabajar
mpo alto de 10 ms
movwf 0XAA
oria
BB
movlw d'250'
stro de trabajo
movwf 0XAB
a
AA
nop
decfsz 0XAB
ue sea 0
goto
AA
egresar a AA
nop
decfsz 0XAA
ue sea 0
goto
BB
o esta vez regresar desde BB pasando por AA
return
a subrutina
catorcemili
movlw
d'14'
seismili
movlw d'6'
, en este caso el 6 porque
on 6 ms
movwf 0XAE
gistro de memoria
FF
movlw d'250'
movwf 0XAF
a
EE
nop
decfsz 0XAF
1 hasta que sea 0
goto
EE
ue sea 0, despus se ira a
nop
decfsz 0XAE
ro de 1 en 1 hasta que sea
goto
FF
oto, una vez en 0 se ir a
return
a rutina
tiempo
movlw d'75'
;se carga un dato que queramos, en
este caso pusimos el 75
movwf 0x20
;se manda a un registro de memoria
GG
;en este caso nadamas se agrega un
a letra porque el tiempo es muy pequeo, porque al momento de visualizarlo se ver e
sttico
nop
;se estabiliza la instruccion
decfsz 0x20
;se decrementa el registro de 1 en
1 hasta que sea 0
goto GG
;no saltara la instruccion hasta q
ue sea 0, una vez en 0 se saltar a GG
return
a rutina
END