;******************************************************************************
; This file is a basic code template for code generation *
; on the PIC16F88. This file contains the basic code building *
; blocks to build upon. *
; *
; Refer to the MPASM User's Guide for additional information on *
; features of the assembler. *
; *
; Refer to the respective data sheet for additional *
; information on the instruction set. *
; *
;******************************************************************************
; *
; Filename: xxx.asm *
; Date: *
; File Version: *
; *
; Author: *
; Company: *
; *
; *
;******************************************************************************
; *
; Files required: P16F88.INC *
; *
;******************************************************************************
; *
; Features of the 16F88: *
; *
; 1 10-bit PWM *
; 8 MHz Internal Oscillator *
; ICD support *
; 256 bytes of EEPROM data memory *
; Capture/Compare Module *
; *
;******************************************************************************
; *
; Notes: *
; *
;******************************************************************************
; *
; Revision History: *
; *
;******************************************************************************
;------------------------------------------------------------------------------
; PROCESSOR DECLARATION
;------------------------------------------------------------------------------
LIST p=16F88 ; list directive to define processor
#INCLUDE <p16f88.inc> ; processor specific variable definitions
;------------------------------------------------------------------------------
;
; CONFIGURATION WORD SETUP
;
; The 'CONFIG' directive is used to embed the configuration word within the
; .asm file. The lables following the directive are located in the respective
; .inc file. See the data sheet for additional information on configuration
; word settings.
;
;------------------------------------------------------------------------------
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_IO
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
;------------------------------------------------------------------------------
;
; VARIABLE DEFINITIONS
;
; Available Data Memory divided into Bank 0 through Bank 3. Each Bank contains
; Special Function Registers and General Purpose Registers at the locations
; below:
;
; SFR GPR SHARED GPR's
; Bank 0 0x00-0x1F 0x20-0x6F 0x70-0x7F
; Bank 1 0x80-0x9F 0xA0-0xEF 0xF0-0xFF
; Bank 2 0x100-0x10F 0x110-0x16F 0x170-0x17F
; Bank 3 0x180-0x18F 0x190-0x1EF 0x1F0-0x1FF
;
;------------------------------------------------------------------------------
; Example of using Shared Uninitialized Data Section
INT_VAR UDATA_SHR
W_TEMP RES 1 ; w register for context saving (ACCESS)
STATUS_TEMP RES 1 ; status used for context saving (ACCESS)
PCLATH_TEMP RES 1 ; variable used for context saving
; Example of using GPR Uninitialized Data
GPR_VAR UDATA
MYVAR1 RES 1 ; User variable placed by linker
MYVAR2 RES 1 ; User variable placed by linker
MYVAR3 RES 1 ; User variable placed by linker
; Definition Records
Led equ 0 ; Definimos Led como el bit 0 de un registro, en este caso PORTB
Pulsador equ 0 ; Definimos Pulsador como el bit 0 de un registro, en este caso PORTA
;------------------------------------------------------------------------------
; EEPROM INITIALIZATION
;
; The 16F88 has 256 bytes of non-volatile EEPROM, starting at address 0x2100
;
;------------------------------------------------------------------------------
DATAEE CODE 0x2100
DE "MIQUEL_S" ; Place 'M' 'I' 'Q' 'U' 'E' 'L' '_' 'S' at address 0,1,2,3,4,5,6,7
;------------------------------------------------------------------------------
; RESET VECTOR
;------------------------------------------------------------------------------
RESET CODE 0x0000 ; processor reset vector
pagesel START
GOTO START ; go to beginning of program
;------------------------------------------------------------------------------
; INTERRUPT SERVICE ROUTINE
;------------------------------------------------------------------------------
INT_VECT CODE 0x0004 ; interrupt vector location
; Context saving for ISR
MOVWF W_TEMP ; save off current W register contents
MOVF STATUS,W ; move status register into W register
MOVWF STATUS_TEMP ; save off contents of STATUS register
MOVF PCLATH,W ; move pclath register into W register
MOVWF PCLATH_TEMP ; save off contents of PCLATH register
;------------------------------------------------------------------------------
; USER INTERRUPT SERVICE ROUTINE GOES HERE
;------------------------------------------------------------------------------
; Restore context before returning from interrupt
MOVF PCLATH_TEMP,W ; retrieve copy of PCLATH register
MOVWF PCLATH ; restore pre-isr PCLATH register contents
MOVF STATUS_TEMP,W ; retrieve copy of STATUS register
MOVWF STATUS ; restore pre-isr STATUS register contents
SWAPF W_TEMP,F
SWAPF W_TEMP,W ; restore pre-isr W register contents
RETFIE ; return from interrupt
;------------------------------------------------------------------------------
; MAIN PROGRAM
;------------------------------------------------------------------------------
PROGRAM CODE
START ;**** Configuracion de Puertos ****
bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1.-
movlw b'1111111' ; Muevo a W.-
movwf TRISA ; Cargo en TRISA.-
movlw b'11111110'
movwf TRISB
bcf STATUS,RP0 ; Pasamos de Banco 1 a Banco 0.-
bcf PORTB,Led ; Comienza apagado.-
BUCLE ;**** Control del Led ****
btfsc PORTA,Pulsador ; Preguntamos si esta a 0 logico.-
goto APAGAR ; Esta a 1 logico, Apagamos led.-
bsf PORTB,Led ; Esta a 0 logico, Encendemos Led.-
goto BUCLE ; Testeamos nuevamente la condicion del Pulsador.-
APAGAR bcf PORTB,Led ; Apagamos Led.-
goto BUCLE ; Testeamos nuevamente la condicion del Pulsador.-
;------------------------------------------------------------------------------
; PLACE USER PROGRAM HERE
;------------------------------------------------------------------------------
GOTO $
END