Ejemplos mplab con pic
Sumar dos numeros de 16 bits cada uno. Además restar 2 números de 16 bits cada uno.
1.1 Diagrama de Flujo de la Suma
[pic]
1.2 Código fuente de la Suma
;********************************************************************
; MICROCONTROLADORES
; Nombre: Edison Naranjo
; Curso: Sexto " B" DEE;********************************************************************
;********************************************************************
; Ejercicio 1.- Suma de 2 números de 16 bits
; FFFF + FFFF = 1FFFE
; Los números se encuentran cargados en el PIC
;********************************************************************
LIST P=16F877A
INCLUDE "P16F877A.INC"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
DATOA_H EQU 0X20 ; Partemás significativa del número A
DATOA_L EQU 0X21 ; Parte menos significativa del número A
DATOB_H EQU 0X22 ; Parte más significativa del número B
DATOB_L EQU 0X23 ; Parte menos significativa del número B
RESULTADO_H EQU 0X24 ; Parte más significativa del resultado
RESULTADO_L EQU 0X25 ; Parte más significativa del número A
AUX EQU 0X26
AUX2 EQU 0X27
ORG 0X00
BSF STATUS,RP0
BCFSTATUS,RP1
movlw 0x00
movwf TRISB ; Configuración del puerto B como salida
movlw 0x00
movwf TRISC ; Configuración del puerto C como salida
movlw 0xFE
movwf TRISD ; Configuración del bit 0 del puerto D
; como salida
BCF STATUS,RP0
INICIO
movlw 0XFF
movwf DATOB_L ; DATOB_L=FF
movlw 0XFF
movwf DATOB_H ; DATOB_H=FF
movlw 0XFF
movwf DATOA_L ; DATOA_L=FFmovlw 0XFF
movwf DATOA_H ; DATOA_H=FF
call SUMA_L ; Llamada a la subrutina SUMA_L
btfss STATUS,C
movlw 0X00 ; SI C=O, W=0
movlw 0X01 ; SI C=1, W=1
call SUMA_H ; Llamada a la subrutina SUMA_H
btfss STATUS,C
movlw 0X00 ; SI C=O, W=0
movlw 0X01 ; SI C=1, W=1
call MOSTRAR ; Llamada a la subrutina MOSTRAR
goto INICIO
SUMA_L
movf DATOA_L,0
addwfDATOB_L,0 ; W=DATOA_L + DATOB_L
movwf RESULTADO_L
return
SUMA_H
addwf DATOA_H,0 ; W= DATOA_H + (0/1)
addwf DATOB_H,0 ; W= W + DATOB_H
movwf RESULTADO_H
return
MOSTRAR
movwf AUX ; AUX=W
movf RESULTADO_L,0
movwf PORTB ; Parte menos significativa del resultado
; mostrada por el puerto B
movf RESULTADO_H,0
movwf PORTC ; Parte más significativa delresultado
; mostrada por el puerto B
movf AUX,0
movwf PORTD ; Carry mostrado por el bit 0 del puerto D
return
end
1.3 Diagrama de Flujo de la Resta
[pic]
4. Código fuente de la resta
;********************************************************************
; MICROCONTROLADORES
; Nombre: Edison Naranjo
; Curso: Sexto " B" DEE;********************************************************************
;********************************************************************
; Ejercicio 1.- Resta de 2 números de 16 bits
; EBEB - 1111 = DADA
; Los números se encuentran cargados en el PIC
;********************************************************************
LIST P=16F877A
INCLUDE "P16F877A.INC"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
DATOA_HEQU 0X20 ; Parte más significativa del número A
DATOA_L EQU 0X21 ; Parte menos significativa del número A
DATOB_H EQU 0X22 ; Parte más significativa del número B
DATOB_L EQU 0X23 ; Parte menos significativa del número B
RESULTADO_H EQU 0X24
RESULTADO_L EQU 0X25
COMP1_H EQU 0X28 ; Parte más significativa B'
COMP1_L EQU 0X29 ; Parte menos significativa B'
ORG 0X00
BSFSTATUS,RP0
BCF STATUS,RP1
movlw 0x00 ; Configuración del puerto B como salida
movwf TRISB
movlw 0x00 ; Configuración del puerto C como salida
movwf TRISC
BCF STATUS,RP0
INICIO
movlw 0X11
movwf DATOB_L; DATOB_L=0X11
movlw 0X11
movwf DATOB_H; DATOB_H=0X11
call COMP1 ; Llamada a la subruitina COMP1
movlw 0XEB
movwf DATOA_L ; DATOA_L=0XEB
movlw 0XEB...
Regístrate para leer el documento completo.