CODIGO EN ASSEMBLER

Anuncio
CODIGO EN ASSEMBLER
RECEPTOR
;************************************************************************
list
p=16f84A
radix hex
;selecion de pic
; codigo hex
pc
status equ
portb equ
PORTA
PIR1 equ
RCSTA
RCREG
trisb equ
TRISA
TXSTA
SPBRG
t1
t2
t3
t4
var1 equ
tem
tem1 equ
loops equ
loops2 equ
datos equ
dato1 equ
r0e
equ
conta equ
conta1 equ
e
rs
equ 02h
03h
06h
equ 05h
0ch
equ 18h
equ 1ah
86h
equ 85h
equ 98h
equ 99h
equ 20h
equ 21h
equ 22h
equ 23h
24h
equ 25h
26h
27h
28h
29h
2Ah
2Bh
2ch
2Dh
equ 1h
equ 0h
org
goto
org
0X05
0x00
inicio
inicio
clrf status
bsf
bcf
movlw 0x0C
movwftrisb
bsf
bcf
bcf
clrf t1
clrf t2
clrf t3
status,5
status,6
TRISA,0
TRISA,1
status,5
;
;seleciona banco 1
;w=0000 1100
;portb=0000 1100 para el lcd
;de salida portc.0
clrf
t4
call
call
call
LCD
retardo
LCD1
xxyy
bcf
PORTA,1
datos / despues de mostrar datos en LCD
call retardo
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
rutina de recepcion
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
recibir1
rcvr1
siguient1
nop
clrf dato1
btfsc PORTA,0
goto recibir1
call unoymedio
movlw 8
movwf conta
bcf
btfsc
bsf
rrf
call
decfsz
goto
status,0
PORTA,0
status,0
dato1
delayl
conta
rnext1
movf dato1,0
movwft1
recibir2
rcvr2
siguient2
nop
clrf dato1
btfsc PORTA,0
goto recibir2
call unoymedio
movlw 8
movwf conta
bcf
status,0
btfsc PORTA,0
bsf
status,0
rrf
dato1
call delayl
decfsz conta
goto rnext2
movf dato1,0
;envia señal que esta listo para recibir
movwft2
recibir3
rcvr3
siguient3
nop
clrf dato1
btfsc PORTA,0
goto recibir3
call unoymedio
movlw 8
movwf conta
bcf
status,0
btfsc PORTA,0
bsf
status,0
rrf
dato1
call delayl
decfsz conta
goto rnext3
movf dato1,0
movwft3
recibir4
rcvr4
siguient4
nop
clrf dato1
btfsc PORTA,0
goto recibir4
call unoymedio
movlw 8
movwf conta
bcf
status,0
btfsc PORTA,0
bsf
status,0
rrf
dato1
call delayl
decfsz conta
goto rnext4
movf dato1,0
movwft4
bsf
call
goto
PORTA,1
LCD1
xxyy
unoymedio
movlw
.249
goto startup
delayl movlw
.166
startup movwf
r0e
redo nop
nop
decfsz r0e
goto redo
retlw 0
;;;;;;;;;;;;;;;;;;;;;;;rutinas de muestreo en el LCD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
control
bcf
portb,rs
;rs=0 ,bit.0=1 selecciona registro
control...portb= 0000 0000
goto dato2
dato
bsf
portb= 0000 0001
portb,rs
dato2 bsf
portb= 0000 0011
portb,e
movwfdatos
variable dato....dato=0010 0011
movlw 0xF0
andwf datos,0
iorwf portb,1
call retardo
bcf
portb,e
call retardo
bsf
portb,e
movlw 0x0f
andwf portb,1
swapf datos,0
andlw 0xF0
iorwf portb,1
call retardo
bcf
portb,e
call retardo
clrf portb
retlw 0
tabla addwf pc,1
;rs=1, selecciona registro de datos
;e=1, bit.1=1 habilita lcd.............
;copia el valor del registro dato/control en la
;w=1111 0000
;w=0010 0000
;portb=0010 0011
;portb=0010 0001
;w
;w
;portb=0010 0011
=0000 1111
;portb=0000 0011
;w =0011 0010
=0011 0000
;portb=0011 0011
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
"T"
"1"
":"
"T"
"2"
":"
"T"
"3"
":"
"T"
"4"
":"
0
;1
;2
;3
;4
;5
;6
;7
;8
;9
;10
;11
;12
LCD ;;;;;;;;;;;;; muestra los valores de t1 /t2/t3/t4=0
begin
movlw 01h
call control
movlw 02h
limpia pantalla
call control
movlw 28h
call control
movlw 0Ch
call control
movlw 06h
call control
muestra
mensaje
clrf var1
movlw 0x80
call control
xxx1 movf var1,0
; n=w
call tabla
call dato
call retardo
incf var1,1
movlw 0x03
xorwf var1,0
btfss status,2
goto xxx1
;
; (2) definicion de bus de 4 bits , w=0000 0010
; (3) w=0010 1000 ratifica datos de 4 bits y 2lineas
; (4) w=0000 1100 activa pantalla
; (5) w=0000 0110 mensaje fijo n pantalla y
;(5) ciclo de lectura de la tabala q contiene el
;variable n para que aparezca la cantidad de datos
;ubica el cursor en la posicion
;copio el valor de n en W
;operacion logica entre el w y la variable pulso
;op=0 =>z=1 y op=1 =>z=0
movlw 0x89
;ubica el cursor en la posicion
call control
xxx2 movf var1,0
; n=w
call tabla
call dato
call retardo
incf var1,1
movlw 0x06
;copio el valor de n en W
xorwf var1,0
btfss status,2
goto xxx2
movlw 0xc0
call control
xxx3 movf var1,0
; n=w
call tabla
call dato
call retardo
incf var1,1
movlw 0x09
xorwf var1,0
btfss status,2
goto xxx3
;operacion logica entre el w y la variable pulso
;op=0 =>z=1 y op=1 =>z=0
;ubica el cursor en la posicion
;copio el valor de n en W
;operacion logica entre el w y la variable pulso
;op=0 =>z=1 y op=1 =>z=0
movlw 0xc9
;ubica el cursor en la posicion
call control
xxx4 movf var1,0
; n=w
call tabla
call dato
call retardo
incf var1,1
movlw 0x0c
;copio el valor de n en W
xorwf var1,0
;operacion logica entre el w y la variable pulso
btfss status,2
;op=0 =>z=1 y op=1 =>z=0
goto xxx4
retlw 0
;;;;;;;;;;;;;;;;;;;;;;;; muestra valores
LCD1 movlw 0x83
;ubica el cursor en la posicion
call control
movf t1,0
;copio t1 en w
movwftem
;guardo w en tem
call decena
movf tem1,0
call dato
call retardo
movf tem,0
call dato
call retardo
movlw b'11011111'
call dato
call retardo
movlw b'01000011'
call dato
call retardo
movlw 0x8C
call control
movf t2,0
movwftem
call decena
;ubica el cursor en la posicion
;copio t1 en w
;guardo w en tem
movf tem1,0
call dato
call retardo
movf tem,0
call dato
call retardo
movlw b'11011111'
call dato
call retardo
movlw b'01000011'
call dato
call retardo
movlw 0xc3
;ubica el cursor en la posicion
call control
movf t3,0
;copio t1 en w
movwftem
;guardo w en tem
call decena
movf tem1,0
call dato
call retardo
movf tem,0
call dato
call retardo
movlw b'11011111'
call dato
call retardo
movlw b'01000011'
call dato
call retardo
;;;
movlw 0xcc
;ubica el cursor en la posicion
call control
movf t4,0
;copio t1 en w
movwftem
;guardo w en tem
call decena
movf tem1,0
call dato
call retardo
movf tem,0
call dato
call retardo
movlw b'11011111'
call dato
call retardo
movlw b'01000011'
call dato
call retardo
call retardo
retlw 0
aqui viene el valor de t1 ò t2 ò t3 ò t4 en la variable 'tem'
decenamovlw 0x5a
subwf tem,0
btfsc status,0
goto unidad1
unidad1
;90
;f-w=w
;c=0 acarreo /c=1 no acarreo
movlw 0x50
subwf tem,0
btfsc status,0
goto unidad2
;80
;f-w=w
;c=0 acarreo /c=1 no acarreo
movlw 0x46
subwf tem,0
btfsc status,0
goto unidad3
;70
;f-w=w
;c=0 acarreo /c=1 no acarreo
movlw 0x3c
subwf tem,0
btfsc status,0
goto unidad4
;60
;f-w=w
;c=0 acarreo /c=1 no acarreo
movlw 0x32
subwf tem,0
btfsc status,0
goto unidad5
;50
;f-w=w
;c=0 acarreo /c=1 no acarreo
movlw 0x28
subwf tem,0
btfsc status,0
goto unidad6
;40
;f-w=w
;c=0 acarreo /c=1 no acarreo
movlw 0x1e
subwf tem,0
btfsc status,0
goto unidad7
;30
;f-w=w
;c=0 acarreo /c=1 no acarreo
movlw 0x14
subwf tem,0
btfsc status,0
goto unidad8
;20
;f-w=w
;c=0 acarreo /c=1 no acarreo
movlw 0x0a
subwf tem,0
btfsc status,0
goto unidad9
goto unidadA
;10
;f-w=w
;c=0 acarreo /c=1 no acarreo
movlw 0x5a
subwf tem,1
movlw 0x30
addwf tem,1
movlw 0x09
;w=90
;f-w=f guardamos resultado(unidades en tem)
;valor 0 en ascii
;sumamos w+tem=tem
;w=04
movwftem1
movlw 0x30
addwf tem1,1
retlw 0
;copiamos 4 en tem(decena)
;valor 0 en ascii
;sumamos w+tem1=tem1
unidad2
movlw 0x50
subwf tem,1
movlw 0x30
addwf tem,1
movlw 0x08
movwftem1
movlw 0x30
addwf tem1,1
retlw 0
;w=80
;f-w=f guardamos resultado(unidades en tem)
;valor 0 en ascii
;sumamos w+tem=tem
;w=08
;copiamos 8 en tem(decena)
;valor 0 en ascii
;sumamos w+tem1=tem1
unidad3
movlw 0x46
subwf tem,1
movlw 0x30
addwf tem,1
movlw 0x07
movwftem1
movlw 0x30
addwf tem1,1
retlw 0
;w=70
;f-w=f guardamos resultado(unidades en tem)
;valor 0 en ascii
;sumamos w+tem=tem
;w=07
;copiamos 4 en tem(decena)
;valor 0 en ascii
;sumamos w+tem1=tem
unidad4
movlw 0x3c
subwf tem,1
movlw 0x30
addwf tem,1
movlw 0x06
movwftem1
movlw 0x30
addwf tem1,1
retlw 0
;w=60
;f-w=f guardamos resultado(unidades en tem)
;valor 0 en ascii
;sumamos w+tem=tem
;w=04
;copiamos 6 en tem(decena)
;valor 0 en ascii
;sumamos w+tem=tem
unidad5
movlw 0x32
subwf tem,1
movlw 0x30
addwf tem,1
movlw 0x05
movwftem1
movlw 0x30
addwf tem1,1
retlw 0
;w=50
;f-w=f guardamos resultado(unidades en tem)
;valor 0 en ascii
;sumamos w+tem=tem
;w=05
;copiamos 5 en tem(decena)
;valor 0 en ascii
;sumamos w+tem=tem
unidad6
movlw 0x28
subwf tem,1
movlw 0x30
addwf tem,1
;w=40
;f-w=f guardamos resultado(unidades en tem)
;valor 0 en ascii
;sumamos w+tem=tem
movlw 0x04
movwftem1
movlw 0x30
addwf tem1,1
retlw 0
;w=04
;copiamos 4 en tem(decena)
;valor 0 en ascii
;sumamos w+tem=tem
unidad7
movlw 0x1e
subwf tem,1
movlw 0x30
addwf tem,1
movlw 0x03
movwftem1
movlw 0x30
addwf tem1,1
retlw 0
;w=30
;f-w=f guardamos resultado(unidades en tem)
;valor 0 en ascii
;sumamos w+tem=tem
;w=03
;copiamos 3 en tem(decena)
;valor 0 en ascii
;sumamos w+tem=tem
unidad8
movlw 0x14
subwf tem,1
movlw 0x30
addwf tem,1
movlw 0x02
movwftem1
movlw 0x30
addwf tem1,1
retlw 0
;w=20
;f-w=f guardamos resultado(unidades en tem)
;valor 0 en ascii
;sumamos w+tem=tem
;w=02
;copiamos 2 en tem(decena)
;valor 0 en ascii
;sumamos w+tem=tem
unidad9
movlw 0x0a
subwf tem,1
movlw 0x30
addwf tem,1
movlw 0x01
movwftem1
movlw 0x30
addwf tem1,1
retlw 0
;w=10
;f-w=f guardamos resultado(unidades en tem)
;valor 0 en ascii
;sumamos w+tem=tem
;w=01
;copiamos 1 en tem(decena)
;valor 0 en ascii
;sumamos w+tem=tem
unidadA
movlw 0x30
addwf tem,1
movlw 0x30
movwftem1
retlw 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
retardo
MOVLW
MOVWF
top2
top
D'50' ;el registro contiene el nº
loops ; de ms de retardo
MOVLW
D'100'
MOVWF
loops2
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ
GOTO
DECFSZ
GOTO
retlw 0
end
loops2 ; pregunta si termino 1ms
top
loops ; pregunta si termina el retardo
top2
Documentos relacionados
Descargar