You are on page 1of 11

Practica 1

Prender un led



Programa LED parpadeante

main:

ANSEL = 0 ' Configure AN pins as digital
ANSELH = 0
C1ON_bit = 0
C2ON_bit = 0

TRISA = 0x00 ' set direction to be output

While TRUE
PORTA = 0x00 ' Turn OFF diodes on PORTA
Delay_ms(1000) ' 1 second delay

PORTA = 0xFF ' Turn ON diodes on PORTA
Delay_ms(1000) ' 1 second delay
wend ' Endless loop
end.


































Practica 2
Datos A en puerto B



// PIC16F877A Configuration Bit Settings

// 'C' source line config statements

#include <xc.h>

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

// CONFIG
#pragma config FOSC = XT // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = ON // Low-Voltage (Single-Supply) In-Circuit Serial
Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming
enabled)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data
EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write
protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code
protection off)


void main(void){

ADCON1 = 0X00; //SOLO PUERTOS DIGITALES
TRISB = 0X00; //Puerto B como salida
TRISA = 0b00111111; //RA0 como entrada
PORTB = 0X00;
{
PORTB = PORTA;
}
}








Practica 3
Sumador base

list p=16F877A
#include <p16f877A.INC>
__CONFIG _WDT_OFF & _HS_OSC & _PWRTE_OFF & _BODEN_OFF & _LVP_OFF &
_CPD_OFF & _CP_OFF & _DEBUG_OFF

SUMADO EQU 0X20
ORG 0X00
goto Inicio
ORG 0x05

Inicio

bsf STATUS,RP0
bcf STATUS ,RP1 ;TRISB CONFIGURACION PARA DATOS DE SALIDA
clrf PORTB
movlw 0x07 ;B'00000111'
movwf ADCON1
movlw 0XFF
movwf PORTA
bcf STATUS, RP0 ; salto al banco 1
bcf STATUS, RP1 ; salto al banco 0

PRINCIPAL
movlw 0X0A
movwf SUMADO

movf PORTA,W
addwf SUMADO,W
movwf PORTB
goto PRINCIPAL

end ;final del programa













Practica 4
Sumador

list p=16F877A
#include <p16f877A.INC>
__CONFIG _WDT_OFF & _HS_OSC & _PWRTE_OFF & _BODEN_OFF & _LVP_OFF &
_CPD_OFF & _CP_OFF & _DEBUG_OFF

VAR1 EQU 0X20
VAR2 EQU 0X21

ORG 0X00
goto Inicio
ORG 0x05
Inicio

bsf STATUS,RP0
movlw b'00000110'
movwf ADCON1 ; se configuran la terminales
clrf PORTA
movlw b'11111111'
movwf PORTB ; se configura como salida
bcf STATUS, RP0 ; salto al banco 1


Ciclo
movf PORTB,W
andlw b'00001111'
movwf VAR1
movf PORTB,W
andlw b'11110000'
movwf VAR2
swapf VAR2
movfW VAR2
addwf VAR1,W
movwf PORTA
goto Ciclo
end ;final del programa











Practica 5
Restador


list p=16f877a
#include <p16f877a.INC>
__CONFIG _WDT_OFF & _HS_OSC & _PWRTE_OFF & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF &
_DEBUG_OFF

DATOS EQU 0X20
DATOA EQU 0X21
DATOB EQU 0X22
RESUL EQU 0X23

ORG 0x00
goto Inicio
ORG 0x05

Inicio

bsf STATUS, RP0
bcf STATUS, RP1
movlw 0X07 ;B'00000111'
movwf ADCON1 ;0X9F
clrf TRISA
movlw 0xFF ;B'11111111'
movwf TRISB
bcf STATUS,RP0
bcf STATUS, RP1

Principal
movf PORTB,W
movwf DATOS
andlw b'00001111' ;SELECCIONA A
movwf DATOA
swapf DATOS,W ;ROTA LOS NIBBLES
andlw b'00001111' ;SELECCIONA B
movwf DATOB ;ESTA PARTE SE PUEDE OMITIR
movfw DATOB
subwf DATOA,W ; RESTA F-W, A-B
btfsc STATUS,DC ;DC=0 ES -, DC=1 ES +
goto Fin ;ES POSITIVO
xorlw b'11111111' ;ES NEGATIVO
addlw b'00000001'
movwf RESUL
bsf RESUL,5
movf RESUL,W
Fin movwf PORTA ;ENVIAR RESULTADO A LA SALIDA
goto Principal

END





Practica 6
Sumador restador

list p=16f877a
#include <p16f877a.INC>
__CONFIG _WDT_OFF & _HS_OSC & _PWRTE_OFF & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF &
_DEBUG_OFF

DATOS EQU 0X20
DATOA EQU 0X21
DATOB EQU 0X22
RESUL EQU 0X23
ORG 0x00
goto Inicio
ORG 0x05
Inicio
bsf STATUS, RP0
bcf STATUS, RP1
movlw 0X07 ;B'00000111'
movwf ADCON1 ;0X9F
clrf TRISA
movlw 0xFF ;B'11111111'
movwf TRISB
movlw 0xFF
movwf TRISC
bcf STATUS,RP0
bcf STATUS, RP1
Principal
movf PORTB,W
movwf DATOS
andlw b'00001111' ;SELECCIONA A
movwf DATOA
swapf DATOS,W ;ROTA LOS NIBBLES
andlw b'00001111' ;SELECCIONA B
movwf DATOB ;ESTA PARTE SE PUEDE OMITIR
movfw DATOB
btfsc PORTC,1
goto n
;SUMA
addwf DATOA,DATOB
goto Fin
;RESTA
n subwf DATOA,W ; RESTA F-W, A-B
btfsc STATUS,DC ;DC=0 ES -, DC=1 ES +
goto Fin ;ES POSITIVO
xorlw b'11111111' ;ES NEGATIVO
addlw b'00000001'
movwf RESUL
bsf RESUL,5
movf RESUL,W
Fin movwf PORTA ;ENVIAR RESULTADO A LA SALIDA
goto Principal

END

You might also like