Escolar Documentos
Profissional Documentos
Cultura Documentos
Laboratório 8
Bibliotecas de Operações Aritméticas
Engenharia Elétrica
Discentes:
Bárbara Morais Gianesini
Kaio Vinícius Vilerá
Turma: N1
Data da realização do laboratório:
18 de Março de 2016
1. Objetivos
2. Atividades
Realize as mudanças ou inclua as instruções necessárias, para o programa realizar operações
de precisão dupla, ou seja, com operandos de 16 bits. Ensamblar, simular e gravar no PIC o
conteúdo ‘.HEX’, e testar na placa física de desenvolvimento ou na protoboard.
;//////////////////////////////////////////////////
Código Kaio:
list p =16f877a Soma call bin_bcd
#include <p16f877a.inc> movlw '+' movfw dmil
__CONFIG H'3F32' movwf operacao addlw 0x30
ERRORLEVEL -305 call ptrResultadoLinha1 call EnviaCarLCD
ERRORLEVEL -302 call Soma16 movfw umil
cblock 0x20 movfw Op1_L addlw 0x30
conta,Loper movwf binario_L call EnviaCarLCD
endc movfw Op1_H movfw cent
org 0x00 movwf binario_H addlw 0x30
goto inicio btfsc Carry,1 call EnviaCarLCD
seq1 addwf PCL,F incf Binario3,F movfw deze
dt "OPERACAO: " ;10c goto prt_rpta addlw 0x30
call EnviaCarLCD
inicio: Subtrai movfw unit
movlw 0xF0 movlw '-' addlw 0x30
movwf PORTB movwf operacao call EnviaCarLCD
clrf PORTE call ptrResultadoLinha1 movlw ' '
clrf INTCON clrf seNeg call EnviaCarLCD
bsf STATUS,RP0 call Subtrai16 movlw 'R'
bcf OPTION_REG,7 movfw Op1_L call EnviaCarLCD
movlw B'11110000' movwf binario_L movlw ':'
movwf TRISB movfw Op1_H call EnviaCarLCD
bsf TRISA,0 movwf binario_H movfw Resto_L
movlw 0x0E goto prt_rpta movwf binario_L
movwf ADCON1 movfw Resto_H
bcf STATUS,RP0 Multiplica movwf binario_H
bsf INTCON,RBIE movlw '*' call bin_bcd
bsf INTCON,GIE movwf operacao movfw dmil
call inicio_LCD call ptrResultadoLinha1 addlw 0x30
call multi16 call EnviaCarLCD
menu movfw Rpta1 movfw umil
movlw .25 movwf binario_L addlw 0x30
movwf Op1_L movfw Rpta2 call EnviaCarLCD
movlw .0 movwf binario_H movfw cent
movwf Op1_H movfw Rpta3 addlw 0x30
movlw .65 movwf Binario3 call EnviaCarLCD
movwf Op2_L movfw Rpta4 movfw deze
movlw .0 movwf Binario4 addlw 0x30
movwf Op2_H goto prt_rpta call EnviaCarLCD
call LCD_limpar movfw unit
call prt1 Divide addlw 0x30
clrf binario_H movlw '/' call EnviaCarLCD
clrf binario_L movwf operacao call ret1s
clrf Binario3 call ptrResultadoLinha1 call ret1s
clrf Binario4 call divide16 btfss PORTB,4
clrf Binario5 goto prt_rptaDivide goto $-1
clrf operacao btfss PORTB,5
clrf seNeg prt_rptaDivide goto $-1
btfss PORTB,4 call LCD_cursor_linha_2 btfss PORTB,6
goto Soma movlw 'Q' goto $-1
btfss PORTB,5 call EnviaCarLCD btfss PORTB,7
goto Subtrai movlw ':' goto $-1
btfss PORTB,6 call EnviaCarLCD call ret1s
goto Multiplica movfw Quociente_L call ret1s
btfss PORTB,7 movwf binario_L goto menu
goto Divide movfw Quociente_H
goto $-8 movwf binario_H
prt_rpta call ret1s prtop2:
call LCD_cursor_linha_2 goto menu movfw Op2_L
btfsc seNeg,0 prt1: movwf binario_L
movlw '-' clrf conta movfw Op2_H
btfsc seNeg,0 movfw conta movwf binario_H
call EnviaCarLCD call seq1 call bin_bcd
call bin40_bcd call EnviaCarLCD movfw dmil
swapf BCD5,W incf conta,F addlw 0x30
andlw 0X0F movf conta,W call EnviaCarLCD
addlw 0x30 xorlw .10 movfw umil
call EnviaCarLCD btfss STATUS,Z addlw 0x30
movfw BCD5 goto $-7 call EnviaCarLCD
andlw 0X0F return movfw cent
addlw 0x30 addlw 0x30
call EnviaCarLCD cblock call EnviaCarLCD
swapf BCD4,W Op1_H, Op1_L movfw deze
andlw 0X0F Op2_H, Op2_L, Carry addlw 0x30
addlw 0x30 endc call EnviaCarLCD
call EnviaCarLCD prtop1: movfw unit
movfw BCD4 movfw Op1_L addlw 0x30
andlw 0X0F movwf binario_L call EnviaCarLCD
addlw 0x30 movfw Op1_H return
call EnviaCarLCD movwf binario_H
swapf BCD3,W call bin_bcd Subtrai16:
andlw 0X0F movfw dmil call neg_Oper2
addlw 0x30 addlw 0x30 call Soma16
call EnviaCarLCD call EnviaCarLCD btfsc Carry,1
movfw BCD3 movfw umil return
andlw 0X0F addlw 0x30 bsf seNeg,0 ;Mostra que o
addlw 0x30 call EnviaCarLCD numero e negativo
call EnviaCarLCD movfw cent call neg_Oper1
swapf BCD2,W addlw 0x30 return
andlw 0X0F call EnviaCarLCD
addlw 0x30 movfw deze Soma16:
call EnviaCarLCD addlw 0x30 clrf Carry
movfw BCD2 call EnviaCarLCD movfw Op2_L
andlw 0X0F movfw unit addwf Op1_L, F
addlw 0x30 addlw 0x30 btfsc STATUS, C
call EnviaCarLCD call EnviaCarLCD bsf Carry,0
swapf BCD1,W return movfw Op2_H
andlw 0X0F addwf Op1_H,F
addlw 0x30 ptrResultadoLinha1: btfsc STATUS,C
call EnviaCarLCD call LCD_cursor_linha_1 bsf Carry,1
movfw BCD1 call prtop1 btfss Carry,0
andlw 0X0F movlw ' ' return
addlw 0x30 call EnviaCarLCD incf Op1_H,F
call EnviaCarLCD movfw operacao btfsc STATUS,Z
call ret1s call EnviaCarLCD bsf Carry,1
call ret1s movlw ' ' return
btfss PORTB,4 call EnviaCarLCD
goto $-1 call prtop2 neg_Oper2:
btfss PORTB,5 movlw ' ' comf Op2_L,F
goto $-1 call EnviaCarLCD incf Op2_L,F
btfss PORTB,6 movlw '=' btfsc STATUS,Z
goto $-1 call EnviaCarLCD decf Op2_H,F
btfss PORTB,7 return comf Op2_H,F
goto $-1 return
call ret1s
neg_Oper1:
comf Op1_L,F
incf Op1_L,F
btfsc STATUS,Z
decf Op1_H,F
comf Op1_H,F
return
cblock
Mulcnd, Mulpdr,
conta8
Rpta2, Rpta1,
operacao
seNeg
endc
Multi8:
clrf Rpta1
clrf Rpta2
movlw .8
movwf conta8
movfw Mulcnd
bcf STATUS,C
lazo_m8:
rrf Mulpdr,F
btfsc STATUS,C
addwf Rpta2,F
rrf Rpta2,F
rrf Rpta1,F
decfsz conta8,F
goto lazo_m8
return
cblock
Divdnd, Divisor
endc
Quociente equ Divisor
Resto equ Divdnd
Divide8:
movfw Divisor
clrf Quociente
#include "up_atrasos.asm"
#include "up_bin16-bcd.asm"
#include "up_driver_lcd.asm"
#include "up_matemat.asm"
#include "up_bin40-bcd.asm"
End