;Ejercicio4.
s multiplicar el valor introducido mediante 3 interuptores conectado a las lineas RA1-RA3
del puerto A
;con el introducido por 3 interuptores conectados a las lineas RB0-RB2 DEL PUERTO B
;EL RESULTADO DE ESA MULTIPLICATION DEBERA VISUALISARSE EN LAS LINEAS RB3-RB7 DEL PURTO
B
PROCESSOR 16F877A ; INDICA EL MODELO DE PIC QUE SE USA ES UNA DIRECTIVA DEL
ENSAMBLADOR
#include <[Link]> ; DIRECTIVA DEL ENSAMBLADOR QUE INCLUYE ARCHIVO DE CABECERA QUE
CONTIENE LOS REGISTROS DE FUNCION ESPECIALESDE LOS DIFERENTES
; CONFIG
CONFIG FOSC = HS ; Oscillator Selection bits (HS oscillator)
CONFIG WDTE = OFF ; Watchdog Timer Enable bit (WDT disabled)
CONFIG PWRTE = OFF ; Power-up Timer Enable bit (PWRT disabled)
CONFIG BOREN = ON ; Brown-out Reset Enable bit (BOR enabled)
CONFIG LVP = OFF ; Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit
(RB3 is digital I/O, HV on MCLR must be used for programming)
CONFIG CPD = OFF ; Data EEPROM Memory Code Protection bit (Data EEPROM code
protection off)
CONFIG WRT = OFF ; Flash Program Memory Write Enable bits (Write protection off; all
program memory may be written to by EECON control)
CONFIG CP = OFF ; Flash Program Memory Code Protection bit (Code protection off)
RADIX HEX ; los valores se representan en hexadecimales
PSECT udata ;DIRECTIVA DE ENSAMBLADOR QUE DEFINE LA SECCION DE MEMORIA A UTILIZAR
CONSIDERANDO
;VARIABLES EN CUALQUIER LOCALIDAD DE LA MEMORIA RAM CON LA EXCEPTION DE LOS
ESPACIOS
;COMPARTIDOS (UNBANKED MEMORY)
VAR1 EQU 0X20
VAR2 EQU 0X21
RESULTADO EQU 0X22
PSECT code, delta=2, abs ;DIRECTIVA DE ENSAMBLADOR QUE DEFINE LA SECCION DE MEMORIA
PARA LA ESCRITURA DE CODIGO EN MEMORIA DE PROGRAMA
ORG 0X0000 ; comando que indica al ensamblador direccion en la memoria donde se situara
la siguiente
; instruccion
; CONFIGURACION DE PUERTOS DIGITALES
bsf STATUS,5 ;PONE A 1 EL BIT 5 DE ESTADO PARA DIRECCIONAR BANCO 1
MOVLW 0X06 ;CONFIGURA TODAS LAS TERMINALES DEL PUERTO A
MOVWF ADCON1 ;COMO DIGITALES
MOVLW 0XFF ;CONFIGURA TODAS LAS TERMINALES DEL PUERTO A
MOVWF TRISA ;COMO ENTRADAS DIGITALES
MOVLW 00000111B
MOVWF TRISB ;COMO SALIDAS DIGITALES
BCF STATUS,5 ;PONE A 0 EL BIT 5 DE ESTADO PASANDO A BANCO 0
CICLO:
CLRF PORTA ;SE INICIALIZAN LOS VALORES DEL PUERTO A
CLRF PORTB ;SE INICIALIZAN LOS VALORES DEL PUERTO B
CLRF VAR1
CLRF VAR2
CLRF RESULTADO
MOVF PORTA,0 ;LEE EL DATO EN EL PUERTO B Y LO GUARDA EN EL REGISTRO DE TRABAJO W
MOVWF VAR1
RRF VAR1,1
MOVF PORTB,0
MOVWF VAR2
MOVLW 0
;PROGRAMA PRINCIPAL
INICIO:
ADDWF VAR1,0
MOVWF RESULTADO
DECFSZ VAR2,1
GOTO INICIO ;SE REINICIA EL CICLO
RLF RESULTADO,1
RLF RESULTADO,1
RLF RESULTADO,1
MOVF RESULTADO,0
movwf PORTB
goto CICLO
end
SEGUNDO problema.s Programa que lee el numero binario
;introducido mediante 3 interuptores conectados a la
; puerta PA (RA0,RA1,RA2), luego suma 2 unidades a ese
;valor y visualiza el resultado mediante 4 diodos led
;conectados a la puerta PB ; (RB0, RB2, RB3).
PROCESSOR 16F877A
#include <[Link]>
; CONFIG
CONFIG FOSC = HS ; Oscillator Selection bits (HS oscillator)
CONFIG WDTE = OFF ; Watchdog Timer Enable bit (WDT disabled)
CONFIG PWRTE = OFF ; Power-up Timer Enable bit (PWRT disabled)
CONFIG BOREN = ON ; Brown-out Reset Enable bit (BOR enabled)
CONFIG LVP = OFF ; Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit
(RB3 is digital I/O, HV on MCLR must be used for programming)
CONFIG CPD = OFF ; Data EEPROM Memory Code Protection bit (Data EEPROM code
protection off)
CONFIG WRT = OFF ; Flash Program Memory Write Enable bits (Write protection off; all
program memory may be written to by EECON control)
CONFIG CP = OFF ; Flash Program Memory Code Protection bit (Code protection off)
RADIX HEX ; los valores se representan en hexadecimales
PSECT udata
PSECT code, delta=2, abs
ORG 0X0000 ; comando que indica al ensamblador
; direccion en la memoria donde se situara la siguiente instruccion
bsf STATUS,5
bcf STATUS,6 ; pone A o el bit 6 del registro status para direccionar la pagina 1 de la
; memoria de datos
movlw 0x06 ;configura todas las terminales de puerto A
movwf ADCON1 ; como digitales
movlw 0xff ; configura todas las terminales de puerto A
movwf TRISA ; como entrada digital
movlw 0x00 ; configura todas las terminales del puerto B
movwf TRISB ; como salidadas digitales
bcf STATUS,5 ; regresa al banco 0
clrf PORTA ; se inician los valores del puerto A
clrf PORTB ; se inician los valores del puerto B
inicio:
movf PORTA,0
addlw 8
movwf PORTB
goto inicio
END
Libry included
PROCESSOR 16F877A
#include <[Link]> ;ESTE
; Configuration words
; CONFIG
CONFIG FOSC = HS ; Oscillator Selection bits (HS oscillator)
CONFIG WDTE = OFF ; Watchdog Timer Enable bit (WDT disabled)
CONFIG PWRTE = OFF ; Power-up Timer Enable bit (PWRT disabled)
CONFIG BOREN = ON ; Brown-out Reset Enable bit (BOR enabled)
CONFIG LVP = OFF ; Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit
(RB3 is digital I/O, HV on MCLR must be used for programming)
CONFIG CPD = OFF ; Data EEPROM Memory Code Protection bit (Data EEPROM code
protection off)
CONFIG WRT = OFF ; Flash Program Memory Write Enable bits (Write protection off; all
program memory may be written to by EECON control)
CONFIG CP = OFF ; Flash Program Memory Code Protection bit (Code protection off)
PSECT udata
OPERANDO1 EQU 0x20 ; define la posicion del operador 1
OPERANDO2 EQU 0x21 ; OPERADOR 2
OPERANDO3 EQU 0x22 ; OPERADOR 3
RESULTADO EQU 0x23 ; RESULTADO
PSECT code, delta=2, abs
ORG 0x0000 ; comando que indica al esamblador
;la dirrecion de la memoria de programa
; donde situa la siguiente intrucion
movlw 05 ; 5-> W (primera instruccion)
movwf OPERANDO1 ; W -> operando 1
movlw 02 ; 2 -> W
movwf OPERANDO2 ; W -> operando 2
movlw 04 ; 4 -> W
movwf OPERANDO3 ; W -> operando 3
movf OPERANDO1,0 ; operando 1 -> W
addwf OPERANDO2,1 ; W + operando 2 -> operando 2
movf OPERANDO2,0 ; operando 2 -> W
addwf OPERANDO3,0 ; W + operando 2 -> W
movwf RESULTADO ; W -> resultando
END
Examen, ejercicio 9. Se colocan tres interruptores en las lineas RB2-RB4
;del puerto B del microcontrolador PIC16f877a y cinco diodos led
;en las lineas RC1-RC5 del puerto C.
;Se trata de diseñar un programa que comienza leyendo el número binario de 3 bits
;introducido por los interruptores, luego se suma 10 unidades a este valor,
;visualizando en los diodos led la salida correspondiente.
#include "[Link]"
RADIX HEX ; LOS VALORES SE REPRESENTARAN EN HEXADECIMAL
ORG 0 ; COMANDO QUE INCDICA AL ENSAMBLADOR
; LA DIRECCION DE L AMEMORIA DONDE SE SITUARA
;LA SIGUIENTE INSTRUCCION
bsf STATUS,5 ; PONE A 1 EL BIT 5 DEL REGISTRO STATUS PARA DIRECCIONAR LA PAGINA
;1 DE LA MEMORIA DE DATOS
bcf STATUS,6 ; PONE A 0 EL BIT 6 DEL REGUSTRO STATUS PARA DIRECCIONAR LA PAGINA1
; DE LA MEMORIA DE DATOS
movlw 0xff ; configura todas las terminales del puerto B
movwf TRISB ; COMO SALIDAS DIGITALES
movlw 0x00 ;configura todas las terminales del puerto C
movwf TRISC ; COMO SALIDAS DIGITALES
bcf STATUS,5 ; REGRESA AL BANCO 0
clrf PORTB ; se inicializan los valores del puerto B
clrf PORTC ; SE INICIALIZAN LOS VALORS DEL PUERTO C
inicio movf PORTB,0 ; LEE EL DATO EN EL PUERTO C Y LO GUARDA EN EL REGISTRO DE TRABSJO W
addlw 10 ; suma el valor de 10 al registro de trabajo W y el resultado se almacena el
w
movwf PORTC ; el valor almacenado en el registro de rabajo w se envia al puerto C
goto inicio ; se reinicia el ciclo
END ; directriva de fin de programa