Sei sulla pagina 1di 11

int cnt;

void interrupt()
{
cnt++;
PIR1.TMR1IF=0;
TMR1H=0x80;
TMR1L=0x00;
}
void main()
{
PORTB=0xF0;
TRISB=0;
T1CON=1;
PIR1.TMR1IF=0;
TMR1H=0x80;
TMR1L=0x00;
PIE1.TMR1IE=1;
cnt=0;
INTCON = 0xC0;
while(1)
{
if(cnt>=3650)
PORTB=0;
else
{
PORTB=1;
delay_ms(500);
PORTB=3;
delay_ms(500);
PORTB=0;
delay_ms(500);
}
}
}

2)
unsigned short cnt;
void interrupt() {
if (TMR1IF_bit) {
cnt++;
TMR1IF_bit = 0;
TMR1H = 0x80;
TMR1L = 0x00;
}
}
void main() {
ANSEL = 0;

// increment counter
// clear TMR0IF

// Configure AN pins as digital

ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
PORTB = 0xFF;
TRISB = 0;
T1CON = 1;
TMR1IF_bit = 0;
TMR1H = 0x80;
TMR1L = 0x00;
TMR1IE_bit = 1;

// Disable comparators
//
//
//
//
//

Initialize PORTB
PORTB is output
Timer1 settings
clear TMR1IF
Initialize Timer1 register

// enable Timer1 interrupt

cnt =
0;
INTCON = 0xC0;

// initialize cnt
// Set GIE, PEIE

do {
if (cnt >= 72) {
PORTB = ~PORTB;
cnt = 0;
}
} while (1);

// Toggle PORTB LEDs


// Reset cnt

;*******************************************************************
; INTERFAZ SERIE RS232 - ECO Y DISPLAY EN LEDS
; CONVERTIDOR SERIE RS232 - PARALELO 8 BITS
;*******************************************************************
LIST P=16F628, R=DEC

; Usar el PIC16F628 y sistema decimal

#include "P16F628A.INC"

; Incluye datos de PIC16F628A

__CONFIG
_CP_OFF & _WDT_OFF & _LVP_OFF & _PWRTE_ON &
_INTRC_OSC_NOCLKOUT & _MCLRE_OFF
;*******************************************************************
; CONFIGURACION
;*******************************************************************
;
;
;
;
;

El PIC es configurado para usar todas las entradas y salidas


posibles = 16. Por eso no se usa el oscilador con cristal externo,
lo que deja libres las patas 15 y 16 para usar como bits de puerto.
Se define el clock interno a 4 MHz. No se usa el master reset
(pata 4), que queda convertida en el puerto A, bit 5 (entrada).

;*******************************************************************
; VARIABLES
;*******************************************************************
contador
dato_serie

EQU

0x28
EQU

0x29

; variable
; dato serie desde la PC

;*******************************************************************
ORG

0x000

; El programa empieza en 0x000

;*******************************************************************

; Inhibe comparadores
;*******************************************************************
movlw 7
movwf CMCON

; CMCON=7 inhibir los comparadores

;*******************************************************************
; Inicializar Ports
;*******************************************************************
movlw
movwf
movlw
movwf

b'00000000'
PORTA
b'00000000'
PORTB

; valor inicial portA


; valor inicial portB

bsf STATUS,RP0
movlw b'00000000'
movwf TRISA

; Pg 1 RAM
; salidas (para mostrar el dato en LEDS)
; de estas salidas, no usaremos
; PORTA 4, que tiene salida open drain,

y
; PORTA 5, que slo puede ser entrada
movlw b'11001011'

;
;
;
;
;
;
;

RB0
RB1
RB2
RB3
RB2
RB5
RB6

entrada
(RX) = entrada
(TX) = salida
= entrada
= salida del bit 4 del dato a LEDS
= salida del bit 5 del dato a LEDS
y RB7 = entradas

movwf TRISB
;*******************************************************************
; BAUD RATE para la comunicacin RS232
; y otras definiciones para USART
;*******************************************************************
; Baud Rate = 9600, Sin Paridad, 1 Bit parada
;
movlw
movwf
movlw
movwf

0x19
SPBRG
b'00100100'
TXSTA

; 0x19=9600 bps (0x0C=19200 bps)


;
; habilita la transmisin Async

bcf STATUS,RP0

; RAM PAGE 0

movlw b'10010000'
movwf RCSTA

; habilita de recepcin Async

;*******************************************************************
; TIEMPO DE ESTABILIZACION
;*******************************************************************
estab

clrf contador
decfsz contador,F
goto estab
movf RCREG,W
movf RCREG,W
movf RCREG,W

; vaca el buffer de recepcin

call Bienvenida

; enva mensaje de bienvenida

;*******************************************************************
; LAZO PRINCIPAL
;*******************************************************************
loop
clrw
btfss PIR1,RCIF
goto loop
call recibeRS232
movwf dato_serie

; (5) se fija si hay dato RS232


; no, no lleg
; s, hay
; guarda dato (para uso de cualquier

rutina)
call enviaRS232
call muestra
goto loop

; enva el eco a la PC
; muestra el caracter recibido en LEDS

;*********************************************************************
**************
; RECIBE CARACTER SERIE - RS232 - DESDE LA PC
;*********************************************************************
**************
recibeRS232
movf RCREG,W
return

; guarda dato recibido en acumulador

;*********************************************************************
**************
; ENVIA CARACTER SERIE - RS232 - A LA PC Y ESPERA A QUE HAYA SALIDO
;*********************************************************************
**************
enviaRS232
movwf TXREG
bsf STATUS,RP0
Espere btfss TXSTA,TRMT
goto Espere
bcf STATUS,RP0
return

; envo el dato en acunulador w


; Pg 1 RAM
; transmision completa si es alto
; Pg 0 RAM

;*********************************************************************
**************
; MUESTRA DATO
;*********************************************************************
**************
muestra
movf dato_serie,w
movwf PORTA
btfss dato_serie,4

; recupera el dato guardado


; exhibe el dato en LEDS en PORTA
; pero, como el PORTA tiene el bit 4 que

bcf PORTB,4
btfsc dato_serie,4
bsf PORTB,4
btfss dato_serie,5

;
;
;
;

bcf PORTB,5

; slo usable como entrada, tenemos que

btfsc dato_serie,5

; el bit 5 del dato en alguna salida;

es
open drain, nos conviene poner
el bit 4 del dato en otra salida;
lo hacemos en el bit 4 del PORTB.
y , como el PORTA tiene el bit 5 que

es
poner

bsf PORTB,5
return

; lo hacemos en el bit 5 del PORTB.

;*********************************************************************
**************
; MENSAJES
;*********************************************************************
**************
Bienvenida
; los primeros caracteres 0x00 son
; para estabilizacin del circuito
movlw
0x00
call
enviaRS232
movlw
0x00
call
enviaRS232
movlw
0x00
call
enviaRS232
movlw
0x00
call
enviaRS232
movlw
0x00
call
enviaRS232
call
msgCR
movlw
'H'
call
enviaRS232
movlw
'o'
call
enviaRS232
movlw
'l'
call
enviaRS232
movlw
'a'
call
enviaRS232
movlw
' '
call
enviaRS232
movlw
'a'
call
enviaRS232
movlw
'm'
call
enviaRS232
movlw
'i'
call
enviaRS232
movlw
'g'
call
enviaRS232
movlw
'o'
call
enviaRS232
msgCR
movlw
0x0D
call
enviaRS232
movlw
0x0A
goto
enviaRS232
END

:020000040000FA
:1000000007309F00003085000030860083160030E6
:100010008500CB3086001930990024309800831277
:1000200090309800A801A80B13281A081A081A087B
:10003000342003018C1E19282120A9002320292007
:1000400019281A08080099008316981C252883127D
:10005000080029088500291E0612291A0616A91E5D
:100060008612A91A861608000030232000302320AB
:10007000003023200030232000302320532048303C

:1000800023206F3023206C30232061302320203048
:100090002320613023206D302320693023206730F6
:0E00A00023206F3023200D3023200A30232828
:02400E00503F21
:00000001FF

LIST
; P16F628A.INC Standard Header File, Version 1.10
Technology, Inc.
NOLIST

Microchip

; This header file defines configurations, registers, and other useful


bits of
; information for the PIC16F628A microcontroller. These names are
taken to match
; the data sheets as closely as possible.
; Note that the processor must be selected before this file is
; included. The processor may be selected the following ways:
;
;
;
;
;

1. Command line switch:


C:\ MPASM MYFILE.ASM /PIC16F628A
2. LIST directive in the source file
LIST
P=PIC16F628A
3. Processor Type entry in the MPASM full-screen interface

;=====================================================================
=====
;
;
Revision History
;
;=====================================================================
=====
;Rev:
;1.01
;1.00

Date:
Reason:
14 Nov 2002 Updated to reflect BOD terminology changed to BOR
22 Aug 2002 Initial Release

;=====================================================================
=====
;
;
Verify Processor
;
;=====================================================================
=====
IFNDEF __16F628A
MESSG "Processor-header file mismatch.
processor."
ENDIF

Verify selected

;=====================================================================
=====
;
;
Register Definitions
;
;=====================================================================
=====

W
F

EQU
EQU

H'0000'
H'0001'

;----- Register Files----------------------------------------------------INDF


TMR0
PCL
STATUS
FSR
PORTA
PORTB
PCLATH
INTCON
PIR1
TMR1L
TMR1H
T1CON
TMR2
T2CON
CCPR1L
CCPR1H
CCP1CON
RCSTA
TXREG
RCREG
CMCON

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

H'0000'
H'0001'
H'0002'
H'0003'
H'0004'
H'0005'
H'0006'
H'000A'
H'000B'
H'000C'
H'000E'
H'000F'
H'0010'
H'0011'
H'0012'
H'0015'
H'0016'
H'0017'
H'0018'
H'0019'
H'001A'
H'001F'

OPTION_REG
TRISA
TRISB
PIE1
PCON
PR2
TXSTA
SPBRG
EEDATA
EEADR
EECON1
EECON2
VRCON

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

H'0081'
H'0085'
H'0086'
H'008C'
H'008E'
H'0092'
H'0098'
H'0099'
H'009A'
H'009B'
H'009C'
H'009D'
H'009F'

;----- STATUS Bits ------------------------------------------------------IRP


RP1
RP0
NOT_TO
NOT_PD
Z
DC
C

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

H'0007'
H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'0000'

;----- INTCON Bits ------------------------------------------------------GIE


PEIE

EQU
EQU

H'0007'
H'0006'

T0IE
INTE
RBIE
T0IF
INTF
RBIF

EQU
EQU
EQU
EQU
EQU
EQU

H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'0000'

;----- PIR1 Bits --------------------------------------------------------EEIF


CMIF
RCIF
TXIF
CCP1IF
TMR2IF
TMR1IF

EQU
EQU
EQU
EQU
EQU
EQU
EQU

H'0007'
H'0006'
H'0005'
H'0004'
H'0002'
H'0001'
H'0000'

;----- T1CON Bits -------------------------------------------------------T1CKPS1


EQU
H'0005'
T1CKPS0
EQU
H'0004'
T1OSCEN
EQU
H'0003'
NOT_T1SYNC
EQU
H'0002'
TMR1CS
EQU
H'0001'
TMR1ON
EQU
H'0000'
;----- T2CON Bits -------------------------------------------------------TOUTPS3
EQU
H'0006'
TOUTPS2
EQU
H'0005'
TOUTPS1
EQU
H'0004'
TOUTPS0
EQU
H'0003'
TMR2ON
EQU
H'0002'
T2CKPS1
EQU
H'0001'
T2CKPS0
EQU
H'0000'
;----- CCP1CON Bits -------------------------------------------------------CCP1X
EQU
H'0005'
CCP1Y
EQU
H'0004'
CCP1M3
EQU
H'0003'
CCP1M2
EQU
H'0002'
CCP1M1
EQU
H'0001'
CCP1M0
EQU
H'0000'
;----- RCSTA Bits -------------------------------------------------------SPEN
EQU
H'0007'
RX9
EQU
H'0006'
SREN
EQU
H'0005'
CREN
EQU
H'0004'
ADEN
EQU
H'0003'
FERR
EQU
H'0002'
OERR
EQU
H'0001'
RX9D
EQU
H'0000'
;----- CMCON Bits -------------------------------------------------------C2OUT

EQU

H'0007'

C1OUT
C2INV
C1INV
CIS
CM2
CM1
CM0

EQU
EQU
EQU
EQU
EQU
EQU
EQU

H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'0000'

;----- OPTION Bits ------------------------------------------------------NOT_RBPU


INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

H'0007'
H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'0000'

;----- PIE1 Bits --------------------------------------------------------EEIE


CMIE
RCIE
TXIE
CCP1IE
TMR2IE
TMR1IE

EQU
EQU
EQU
EQU
EQU
EQU
EQU

H'0007'
H'0006'
H'0005'
H'0004'
H'0002'
H'0001'
H'0000'

;----- PCON Bits --------------------------------------------------------OSCF


NOT_POR
NOT_BO
NOT_BOR
NOT_BOD
to 16F62X

EQU
EQU
EQU
EQU
EQU

H'0003'
H'0001'
H'0000'
H'0000'
H'0000' ;Backwards compatability

;----- TXSTA Bits --------------------------------------------------------CSRC


EQU
H'0007'
TX9
EQU
H'0006'
TXEN
EQU
H'0005'
SYNC
EQU
H'0004'
BRGH
EQU
H'0002'
TRMT
EQU
H'0001'
TX9D
EQU
H'0000'
;----- EECON1 Bits -------------------------------------------------------WRERR
EQU
H'0003'
WREN
EQU
H'0002'
WR
EQU
H'0001'
RD
EQU
H'0000'
;----- VRCON Bits --------------------------------------------------------

VREN
VROE
VRR
VR3
VR2
VR1
VR0

EQU
EQU
EQU
EQU
EQU
EQU
EQU

H'0007'
H'0006'
H'0005'
H'0003'
H'0002'
H'0001'
H'0000'

;=====================================================================
=====
;
;
RAM Definition
;
;=====================================================================
=====
__MAXRAM
__BADRAM
__BADRAM
__BADRAM
__BADRAM

H'01FF'
H'07'-H'09', H'0D', H'13'-H'14', H'1B'-H'1E'
H'87'-H'89', H'8D', H'8F'-H'91', H'93'-H'97', H'9E'
H'105', H'107'-H'109', H'10C'-H'11F', H'150'-H'16F'
H'185', H'187'-H'189', H'18C'-H'1EF'

;=====================================================================
=====
;
;
Configuration Bits
;
;=====================================================================
=====
_BODEN_ON
to 16F62X
_BODEN_OFF
to 16F62X
_BOREN_ON
_BOREN_OFF
_CP_ON
_CP_OFF
_DATA_CP_ON
_DATA_CP_OFF
_PWRTE_OFF
_PWRTE_ON
_WDT_ON
_WDT_OFF
_LVP_ON
_LVP_OFF
_MCLRE_ON
_MCLRE_OFF
_RC_OSC_CLKOUT
_RC_OSC_NOCLKOUT
_ER_OSC_CLKOUT
to 16F62X
_ER_OSC_NOCLKOUT
to 16F62X
_INTOSC_OSC_CLKOUT
_INTOSC_OSC_NOCLKOUT
_INTRC_OSC_CLKOUT
to 16F62X
_INTRC_OSC_NOCLKOUT
to 16F62X
_EXTCLK_OSC

EQU

H'3FFF' ;Backwards compatability

EQU

H'3FBF' ;Backwards compatability

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

H'3FFF'
H'3FBF'
H'1FFF'
H'3FFF'
H'3EFF'
H'3FFF'
H'3FFF'
H'3FF7'
H'3FFF'
H'3FFB'
H'3FFF'
H'3F7F'
H'3FFF'
H'3FDF'
H'3FFF'
H'3FFE'
H'3FFF' ;Backwards compatability

EQU

H'3FFE' ;Backwards compatability

EQU
EQU
EQU

H'3FFD'
H'3FFC'
H'3FFD' ;Backwards compatability

EQU

H'3FFC' ;Backwards compatability

EQU

H'3FEF'

_HS_OSC
_XT_OSC
_LP_OSC

EQU
EQU
EQU
LIST

H'3FEE'
H'3FED'
H'3FEC'

Potrebbero piacerti anche