Académique Documents
Professionnel Documents
Culture Documents
MPIAIIICE E""-"a'a<
PIOCAS TEfl
1
PIC16F84
PIC16F84A
PIC16F873
PIC16F874
PIC16F87&
PIC16F877 -'
PIC1GC923
O Desde Options>Development Mode. se obtiene esta caja de dilogo con
diferentes opciones.
\
J } >'
....
MPASM and MPLINK
PICmicro
QUICK REFERENCE GUIDE
~
MICRDCHIP
The Embedded Control SoluUons Compan.r-
MPASM Quick Reference Guide
Thls Qulck Reference Guide glves all the lnstructlons, dlnectlves, and command
llne optlons for the Microchip MPASM Aseembler.
MPASM Dlrectlve Language Summary
MPASM Dlrectlve Language Summary (Contlnued)
MPLINK Command Llne Optlons
Key to 12, 14, and 16-bit
PICmicro Family lnstruction Sets
) ) ) ) ) ) )
12-Bit Core lnstruction Set:
14-Bit Core lnstruction Set
12-Bit Core Literal and Control Operatlons
14-Bit Core Literal and Control Operatlons
12-Bit Core Byte Orlented File Reglster Operatlons
12-Bit Core Bit Orlented File Reglster Operatlons
)
~
12-Bit/14-Bit Core Speclallnstructlon Mnemonlcs
BDC k 1 Branch on Dign 1 BTFSC 3,1
ClOTO k
BNC k Branch on No Carry BTFSS 3,0
ClOTO k
BNDC k Branch on No Digit BTFSS 3,1
Carry GOTO k
BNZ k Branch on No Zero BTFSS 3,2
GOTO k
~
MICROCHIP
Mlcrochlp Teohnology lnc.
2355 West Chandler Blvd.
Chandler, AZ 85224
Tel: 480.786.7200 Fax: 480.899.9210
Web Slte Address: www.mlcrochlp.com
The Mleroohlp and logo, PIC, and PICmlero are regislered trademarks of Microchlp
Technology lncorporated in !he U .S.A. and other countries. MPLAB is a tradamark
of Microchlp Technology In !he U.S.A. and othar countrie&.
e 1999 Mlcrochip Technology lncorporated. All rights reservad.
Printed In the U.S.A. 4/99 05304000
J
)
'
16-Bit Core lnstruction Set 16-Bit Core Arlthmetlc and Loglcallnstructlon
16-Bit Core Data Movement lnstructlons
16-Bit Core Bit Handling lnstructlons
16-Bit Core Program Controllnstructlons
1
16-Bit Core Program Controllnstructlons
16-Bit Core Speclal Controllnstructions
Key to Enhanced 16-Bit Core
lnstruction Set
Enhanced 16-Bit Core lnstruction
Set
Enhanced 16-Bit Core Literal Operatlons
Enhancecl 16-Bit Core Memory Operatlons
lo)
Enhanceci16-Bit Core Control Operatlons
0003 ISLEEP
nd 1 Unconditional relatlve 1 PC+2+2'nd...; PC
branch
Enter SLEEP Mode
~ Z=1, PC+J1+2'nn->PC,
elsePC+2->PC
PC+4-tTOS,
mm:ml-+ PC<20:1>,
h=1, W-tWS,
STATUS -+ STATUSS,
...;BSRS
Enhanceci16-Bit Core Bit Operatlons
Enhanceci16-Bit Core File Reglster Operatlon
Enhanced 16-Bit Core File Reglster Operatlon
t,a 1 Test f, skip
18! 1 XORWF f,d,a Exclusive OR WREG 1 W .XOR. f..., dest
withf
PIC18CXXX Core Special
Function Register Files
PRODH FF4 JNDF1 FE7
PRODL FF3 POSTINC1 FES
TOSU FFF POSTDEC1 FES
TOSH FFE PREINC1 FE4
TOS l. FFD PI.USW1 FE3
STKPTR FFC FSR1H FE2
PCLATU FFB FSR1L FE1
PCLATH FFA INDF2 FDF
PCL FF9 POSTINC2 FDE
TBLPTRU FFS POSTDEC2 FDD
TBLPTRH FF7 PREINC2 FDC
TBLPTRL FF6 PLUSW2 FOB
TABLAT FF5 FSR2H FOA
JNDFO FEF FSR2L FD9
POSTINCO FEE WREG FES
POSTDECO FED BSR FEO
PREJNCO FEC STATUS FDS
PLUSWO FEB JNTCON FF2
FSROH FEA JNTCON2 FF1
FSROL FE9 INTCON3 FFO
---- - ---
)
ASCII Character Set
MPLIB Usage Format
MPLIB Js invoked wfth the foUowing syntax:
mplib [/q) /{ctdrx) LIBRARY [MilMBER ,]
options:
le create library;
creates a new LIBRARY wllh lhe listad MEM-
BER(s)
/t list members;
ptints a tabla showing the names of the members
In lhe UBRARY
Id delate member;
delates MEMBER(s) from lhe LIBRARY; ff no
MEMBER is specified lhe UBRARY is no1 allered
Ir member;
W MEMBER(s) existln the LIBRARY,then they
are replaced, otherwlse MEMBER is appendad
to the end of lhe LIBRARY
/x extract member;
if MEMBER(s) exist in the LIBRARY, then they
are extractad. JI no MEMBER is sp&CWJad, au
members will be extractad
/q quietmode; no output is displayed
MPLIB Usage Examples
Suppose a library named dsp .lib is to be creatad from three object modules
named fft .o, fir .o, and iir .o. The followlng oommand line would produce
the desired resuhs:
mplib /e dsp.lib fft.o fir.o iir.o
To display ltle names of the object modules contained in a Jibrary file names
dsp, lib. the folowlng oommand Unewould be appropriate:
mplib /t dsp .lib
;
8.4 Numeric Constants and Radix
MPASM supports the following radix forms: hexadecimal, decimal, octal, binary, and ASCII. The
default radix is hexadecimal; the default radix determines what value will be assigned to constants in
the object file when a radix is not explicitly specified by a base descriptor.
Constants can be optionally preceded by a plus or minus sign. lf unsigned, the value is assumed to
be positiva.
NOTE: lntermediate values in constant expressions are treated as 32-bit unsigned integers.
Whenever an attempt is made to place a constant in a field for which it is too larga, a truncation
warning will be issued.
The following tabla presents the various radix specifications:
Table 8.2: Radix Specifications
Type Syntax Example
Decimal
D! <digits>' D'100'
.<digits> .100
Hexadecimal
H' <hex_digits>'' H' 9f'
Ox<hex_digits> Ox9f
Octal
O'<octal_digits>' 0'777'
Binary
B'<binary_digits>' B' 00111001'
ASCII
A' <character>' A'C'
'<character>' e
Table 8.3: Arithmatic Operators and Precedence
Operator
$ CurrentJRetum program
counter
high
low
upper
*
/
+
>=
>
<
Left Parenthesis
Right Parenthesis
ltem NOT {logical complement)
Negation {2's complement)
Complement
Retum high byte
Retum low byte
Retum upper byte
Multiply
Divide
Modulus
Add
Subtract
Left shift
Right shift
Greater or equal
Greater than
Less than
Example
gota $ + 3
1 + (d * 4)
(Length + 1) * 256
if 1 (a == b)
-1 * Length
flags = ~ f l a g s
movlw high CTR_Table
movlw low CTR_Table
movlw upper CTR_Table
a = b / e
entry_len = tot_len % 16
tot_len = entry_len * 8
+ 1
entry_len = (tot - 1) / 8
flags = flags << 1
flags = flags >> 1
if entry_idx >=
num_entries
if entry_idx >
num_entries
if entry_idx <
<-
&
&&
11
+=
*=
/=
=
&=
1"'
++
Lessthan
Less or equal
Equalto
Notequal to
BitwiseAND
Bitwise exclusive OR
Bitwise inclusive OR
LogicaiAND
Logical OR
Setequalto
Add to, set equal
Subtract, set equal
Multiply, set equal
Divide, set equal
Modulus, set equal
Left shift, set equal
Right shift, set equal
ANO, set equal
Inclusive OR, set equal
Exclusive OR, set equal
lncrement
Decrement
nUJ1Lentries
if entry_idx <
nUJ1Lentries
if entry_idx
nUJILentries
if entry_idx !
nu!ILentries
flags = flags & ERROR_BIT
flags - flags ~ ERROR_BIT
flags flags 1 ERROR_BIT
if (len 512) && (b
e)
if (len
e)
512) 11 (b
entry_index = O
entry_index + 1
entry_index 1
entry_index &
entry_length
entry_total /
entry_length
entry_index ~ = 8
flags 3
flags 3
flags & ERROR_FLAG
flags 1= ERROR_FLAG
flags "'& ERROR_FLAG
i ++
i --
This file is a basic coda template for assembly coda generation
on PICmicro PIC16F84A. This file contains the basic coda
building blocks to build upon.
,
;
,
;
;
;
If interrupts are not usad all coda presentad between the ORG
Ox004 directiva and the label main can be removed. In addition
the variable assignments for 'w_temp' and 'status_temp' can
be removed.
Refer to the MPASM User's Guide for additional infor.mation on
features of the assembler (Document DS33014).
Refer to the respective PICmicro data sheet for additional
infor.mation on the instruction set.
Template file assembled with MPLAB V4.00.00 and MPASM V2.20.12.
*
..
*
..
..
*
..
..
..
*
*
*
..
..
*
..
*
..
; Filename: xxx.asm
..
; Date:
..
File Version:
..
..
;
Author: * ;
Company:
..
* ;
..
;
,
Files required:
..
*
*
..
*
*
Notes:
*
*
*
;
*
*
list pl6F84A ; list directiva to define processor
#include <p16F84A.inc> ; processor specific variable definitions
_CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _RC_OSC
'_CONFIG' directiva is usad to embed configuration data within .asm file.
The lables following the directiva are located in the respective .inc file
See respective data sheet for additional infor.mation on configuration word.
.--.._;***** VARIABLE DEFINITIONS
w_temp
/'.:;tatus_temp
EQU OxOC
EQU OxOD
; variable used for context saving
; variable used for context saving
;**********************************************************************
ORG OxOOO ; processor reset vector
goto main ; go to beginning of program
ORG Ox004 ; interrupt vector location
Il'?VWf w_temp ; save off current W register
movf STAUJS,w ; move status register into W
movwf status_temp ; save off contents of STATUS
i.sr code can go here or be located as a cal! subroutine elsewhere
contents
register
register
rnovf status_ternp,w ; retrieve copy of STATUS register
~ m a i n
movwf
swapf
swapf
retfie
STATIJS
w_temp,f
w_temp,w
; remaining coda goes here
END
; restare pre-isr STATUS regster contente
; restare pre-isr W register contenta
; return from interrupt
; directive 'end of program'
LIST
P16F84.INC Standard Header File, Version 2.00
Technology, Inc.
NOLIST
Microchip
; This header file defines configurations, registers, and other
useful bits of
; information for the PIC16F84 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:
; l. Command line switch:
; C:\ MPASM MYFILE.ASM /PIC16F84
2. LIST directive in the source file
; LIST P=PIC16F84
3. Processor Type entry in the MPASM full-screen interface
;====================================================================
;
; Revision History
;
; = = = = = = = ~ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
======
;Rev: Date: Reason:
;2.00
; l. 01
;1.00
07/24/96 Renamed to reflect the name change to PIC16F84.
05/17/96 Corrected BADRAM map
10/31/95 Initial Release
;====================================================================
======
;
; Verify Processor
;
;====================================================================
IFNDEF 16F84
MESSG"Processor-header file mismatch. Verify selected
processor."
ENDIF
;====================================================================
;
; Register Definitions
;
;====================================================================
======
w
F
;----- Register
EQU
EQU
H'OOOO'
H'0001'
Files------------------------------------------------------
INDF
TMRO
PCL
STATUS
EQU
EQU
EQU
EQU
H'OOOO'
H'0001'
H'0002'
H'0003'
~
FSR
EQU H'0004'
PORTA
EQU H'0005'
PORTB
EQU H'0006'
EEDATA
EQU H'0008'
EEADR
EQU H'0009'
PeLATH
EQU H'OOOA'
INTeON
EQU H'OOOB'
OPTION REG
EQU H'0081'
TRISA
EQU H'0085'
TRISB
EQU H'0086'
EEeONl
EQU H'0088'
EEeON2
EQU H'0089'
-----
STATUS Bits ,
--------------------------------------------------------
IRP
EQU H'0007'
RPl
EQU H'0006'
RPO
EQU H'0005'
NOT TO
EQU H'0004'
NOT PD
EQU H'0003'
z EQU:
H'0002'
De
EQU H'OOl'
e
EQU
H'OOOO'
;----- INTeON Bits
--------------------------------------------------------
GIE
EEIE
TOlE
INTE
RBIE
TOIF
INTF
RBIF
;----- OPTION Bits
NOT RBPU
INTEDG
TOes
TOSE
PSA
PS2
PSl
PSO
;----- EECONl Bits
EEIF
WRERR
WREN
WR
RD
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'0007'
H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'OOOO'
H'0007'
H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'OOOO'
H'0004'
H'0003'
H'0002'
H
1
0001'
H'OOOO'
; = = = = = = = = = = = = = = = = = = = = = = = = ~ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
.
,
RAM Definition
; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ~ =
======
MAXRAM H'eF'
BADRAM H'07', H'50'-H'7F', H'87'
; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ~ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
======
.
1
.
, eonfiguration Bits
;====================================================================
======
ep ON
-eP-OFF
-PWRTE ON
PWRTE-OFF
-WDT ON
-WDT-OFF
-LP OSe
-XT-OSe
-HS-OSe
-Re-ose
LIST
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H' OOOF'
H' 3FFF'
H'3FF7'
H' 3FFF
1
H' 3FFF'
H' 3FFB'
H' 3FFe'
H'3FFD'
H'3FFE'
H' 3FFF'
'
1 ;PROYECTO 1
2 ;"CONTROL DE UN DISPOSITIVO DESDE DOS PUNTOS"
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
;Se desea controlar una 1 mpara, en este caso un d1odo LED desde dos
;interruptores, de forma que cuando los dos interruptores estln abiertos
;el LED estl apagado. A partir de esta cada vez que cambie el
;estado de un interruptor. el estado del LED bascula (si est apagado se
;enciende y viceversa).
LIST
RADIX
P=16F84
HEX
;ETIQUETAS DEL PROGRAMA
w EQU OxOO
F EQU Ox01
ESTADO EQU Ox03
PUERTAA EQU Ox05
PUERTAB EQU Ox06
; Se emplea el PIC16F84
; Sistema de hexadecimal
Registro de destino W : d=O
Registro de destino F : d=1
El registro ESTADO ocupa la 3 de los
; dos bancos
; La PUERTA A ocupa la 5 del banco O
; y su registro de la direcci(:n 5
banco 1
La PUERTA B ocupa la 6 del banco O
y su registro de la direcci.;n 6
banco 1
del
del
29 AUX EQU OxOC Registro auxiliar en el que se carga el estado de
30
31
32
33 ;PROGRAMA PRINCIPAL
34
35
36
37
38
39 INICIO
40
41
42
43
44
45
46
47
48 BUCLE
49
50
51
52
53
54
55 LUZ
56
57
58
59
60
61 PUESTAl
62
63 PUESTAO
64
65 ACTUAL
66
67
68
69
ORG O
gota
ORG 5
bsf
movlw
movwf
movlw
movwf
bcf
clrf
clrf
clrf
movf
xorwf
btfsc
goto
btfss
goto
goto
bsf
goto
bcf
movf
movwf
goto
END
INICIO
ESTAD0,5
b
1
00000011'
PUERTAA
b'OOOOOOOO'
PUERTAB
ESTADO,S
PUERTAA
PUERTAB
AUX
PUERTAA,W
AUX.W
ESTADO,Z
BUCLE
PUERTAB.O
PUESTA!
PUESTA O
PUERTAB,O
ACTUAL
PUERTAB.O
PUERTAA.W
AUX
BUCLE
los interruptores
; El programa comienza en la direcci(:n O y
salta a la direcci.;n 5 para sobrepasar el
vector de
del banco 1
Se configura parte de la puerta A como
entrada
Se configura la puerta B como
; salida
Selecci(:n del banco O
Se inicializan las dos puertas a
ceros
; Se inicializa el registro auxiliar a ceros
Se exploran los interruptores de la puerta A
Se comprueba si el estado de los
interruptores ha cambiado para lo cual se
detecta si se ha activado el bit 2 del registro
; estado (Z)
; Si no ha cambiado se sigue explorando hasta
que uno cambie
Se comprueba si el LED est encendido para
saber si hay que apagarlo o encenderlo
Se llama a la rutina Puesta1. que enciende el
LED
; Se llama a la rutina PuestaO, que apaga el LED
Se pone a 1 el bit O de la puerta B (LED)
Se pone a O el bit O de la puerta B
Se actualiza el estado de AUX, para comprobar
luego si los interruptores han cambiado de valor
Salto a bucle para empezar de nuevo
1 ;PROYECTO B ~ S I C O 1
2 ;"CONTROL DE UN DISPOSITIVO DESDE DOS PUNTOS"
3
4
5
6
7
8
9
;Se desea contratar una 1 mpara, en este caso un diodo LED desde dos
;interruptores, de forma que cuando los dos interruptores estln abiertos
;el LED estl apagado. A partir de esta situacien, cada vez que cambie el
;estado de un interruptor, el estado del LED bascula (si est apagado se
;enciende y viceversa).
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
LIST
RADIX
P=16F84
HEX
;ETIQUETAS DEL PROGRAMA
w
F
ESTADO
EQU OxOO
EQU Ox01
EQU Ox03
PUERTAA EQU OxOS
PUERTAB EQU Ox06
AUX EQU OxOC
33 ;PROGRAMA PRINCIPAL
34
35
36
37
38
ORG O
gato
ORG 5
bsf
INICIO
ESTADO,S
; Se emplea el PIC16F84
; Sistema de numeraciGn hexadecimal
Registro de
; Registro de
El registro
; dos bancos
destino W : d=O
destino F : d=l
ESTADO ocupa la direccicn 3 de los
La PUERTA A ocupa la direccien S del banco O
y su registro de configuracien la direccien 5 del
; banco 1
La PUERTA B ocupa la direccien 6 del banco O
y su registro de configuracicn la direccicn 6 del
; banco 1
Registro auxiliar en el que se carga el estado de
; los interruptores
El programa comienza en la direccicn O y
; salta a la direccicn S para sobrepasar el
vector de interrupcicn
Seleccien del banco 1 39 INICIO
40 movlw b
1
00000011' Se configura parte de la puerta A como
; entrada 41
42
43
44
45
46
47
48 BUCLE
49
50
51
52
53
54
55 LUZ
56
57
58
59
60
61 PUESTA!
62
63 PUESTAO
64
65 ACTUAL
66
67
68
69
movwf
movlw
movwf
bcf
clrf
clrf
clrf
movf
xorwf
btfsc
gota
btfss
goto
gato
bsf
gato
bcf
movf
movwf
gato
END
PUERTAA
b'OOOOOOOO'
PUERTAB
ESTAD0,5
PUERTAA
PUERTAB
AUX
PUERTAA,W
AUX,W
ESTAD0,2
BUCLE
PUERTAB,O
PUESTAl
PUESTA O
PUERTAB,O
ACTITAL
PUERTAB,O
PUERTAA,W
AUX
BUCLE
Se configura la puerta B como
salida
; Seleccicn del banco O
; Se inicializan las dos puertas a
ceros
Se inicializa el registro auxiliar a ceros
Se exploran los interruptores de la puerta A
; Se comprueba si el estado de los
interruptores ha cambiado para lo cual se
detecta si se ha activado el bit 2 del registro
; estado (Z)
; Si no ha cambiado se sigue explorando hasta
que uno cambie
Se comprueba si el LED est encendido para
; saber si hay que apagarlo o encenderlo
Se llama a la rutina Puesta1, que enciende el
LED
Se llama a la rutina PuestaO, que apaga el LED
Se pone a 1 el bit O de la puerta B (LED)
Se pone a O el bit O de la puerta B
Se actualiza el estado de AUX, para comprobar
; luego si los interruptores han cambiado de valor
Salto a bucle para empezar de nuevo
l
2 ;"DADO ELECTRANICO"
3
4
5 ;Este programa simula al juego del dado. Un dado
;de las cuales viene dibujado un del 1 al
;pulsador se produce un aleatorio entre 1
;display de 7 segmentos.
6
7
8
9
tlpico tiene 6 caras, en cada uua
6. Cada vez que se presiona un
y 6, elcual se visualiza en un
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
;DIRECTIVAS DEL PROGRAMA
LIST
RADIX
HEX
;ETIQUETAS DEL PROGRAMA
w
F
z
PC
ESTADO
EQU
EQU
EQU
EQU
EQU
PUERTAA EQU
PUERTAS EQU
RESUL EQU
;PROGRAMA PRINCIPAL
ORG o
goto INICIO
ORG S
INICIO bsf ESTADO,S
OxOO
OxOl
Ox02
Ox02
Ox03
OxOS
Ox06
OxOE
movlw b'OOOOOOOl'
movwf PUERTAA
clrf PUERTAS
bcf ESTADO,S
movlw OxOl
movwf RESUL
BUCLE call RANDOM
call DEC7SEG
movwf PUERTAS
goto BUCLE
;RUTINA DE VISUALIZACiaN
DEC7SEG addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
79
06
SB
4F
66
6D
7D
PC.F
; Se emplea el PIC16F84
; Sistema de hexadecimal
; Registro de destino W : d=O
Registro de destino F : d=1
Bit 2 del registro ESTADO
El registro PC ocupa la 2 de
los dos bancos
El registro ESTADO ocupa la
3 de los dos bancos
La PUERTAA ocupa la 5 del
banco O y su registro de
la S del banco 1
La PUERTAS ocupa la 6 del
; banco O y su registro de
; la 6 del banco 1
Registro auxiliar para los
; aleatorios
El programa comienza en la O y
; salta a la S para sobrepasar el
; vector de
del banco 1
Se configura RAO como entrada
Se configura la puerta B como salida
; del banco O
Se inicializa la primera vez el valor de la variable
; auxiliar sobre la que se hallar el aleatorio
Se llama a la rutina que crea un aleatorio
Se llama a la rutina que transforma el a 7
segmentos. Deja el resultado en W
Se muestra el resultado en el display
; Mediante esta el PC apunta a la
direcciGn de la tabla que se corresponde con el N a
visualizar en el display 7 segmentos. Coge el valor
hexadecimal de W y deja el valor 7 segmentos en W
Este primer desplazamiento nunca se va a dar, ya
que se correspondera con el O, y el dado SGlo
dispone de entre el 1 y el 6. El valor que
mostraria seria una E (Error)
75 ;RUTINA PARA GENERACiaN DE NMERO ALEATORIO
76
77
78
79
80
81
82
RANDOM btfsc
goto
movlw
subwf
PUERTAA.O
VOLVER
b' 00000110'
RESUL.W
Se utiliza la presiGn del pulsador para parar el
contaje y obtener asi el aleatorio
Si se ha pulsado se vuelve al punto de llamada
Se hace una comparaciGn de RESUL con 6, por si
se tiene que volver a empezar de 1.
tJj J:)t;tSC
84 clrf
85 incf
86 goto
87
88 VOLVER movf
89
90 return
91
92
93 END
J:.::il.AlJU,
RESUL
RESUL,F
RANDOM
RESUL,W
; Se repite el bucle basta que se pulse (orden de
; parada)
; Sobre W queda el Lltimo nLmero antes de la
;
1 BuSICO 4
2 ; "TEMPORIZADOR PROGRAl/.ABLE"
3
4
5 ;Con 3 microrruptores se selecciona un valor entre el ?.Y :1 7
6 ;que representa un tiempo en segundos y que ser por e1
., 7 ;de 7 segmentos. Durante el tiempo que un roJo_
8 ;permanece activado, as como un zumbador. Al se ambos
9 ;elementos y el display se pone a O.
10
1 1
,.--, J.J..
12 ;DIRECTIVAS DEL PROGRAMA
13
14
15
16
LIST
P.ADIX
P=16F84
HEX
; Se emplea el PIC16F84
de numeraciGn hexadecimal
17
18 ;ETIQUETll..S DEL PROGR.a.M.a.
19
20
21
22
23
24
25
26
27
29
30
31
"'.32
33
34
36
37
-38
39
40
-- 41
42
43
_,44
W EQU
F EQU
Z EQU
TNRO_OPT EQU
PC EQU
ESTADO EQU
INTCON EQU
PUERTAA EQU
PUERTAB EQU
AUX EQU
TEMP01 EQU
OxOO
OxOl
OX02
Ox01
Ox02
Ox03
OxOB
Ox05
Ox06
OxOC
OxOE
., 45 ;PROGRAMA PRINCIPAL
46
48
49
INICIO
sz:
-- C":l
,J,J
55
.,57
58
59
60 BUCLE
61
62
-63
64
65
--66
67
68
. 69
70 CONTAJE
71
-. 72
__ 73
74
76
77
79
80 CERO
. 81
-82
ORG
gota
ORG
bsf
movlw
movwf
clrf
movlw
movwf
bcf
clrf
clrf
btfss
goto
movf
a.ndlw
movwf
movf
btfsc
goto
movf
call
iorlw
lllOVWf
Cdll
decfsz
goto
movf
call
movwf
o
INICIO
5
ESTADO,S
OxFF
PUERTAA
PUERTAB
b'00000111'
TMRO_OPT
ESTADO,S
PUERTAB
PUERT.llul\, 4
BUCLE
PUERTAA,W
b'00000111'
AU'.h
AUX.F
ESTADO,Z
CERO
AUX,W
DEC7SEG
b'lOOOOOOO'
PUERTAB
DELAYlS
AUX,F
CONTAJE
AUX,W
DEC7SEG
PUERTAB
Registro de destino W : d=O
Registro de destino F : d=1
Bit 2 del registro ESTADO
; El registro 11v!RO ocupa la direcci<;n 1
del banco O y el OPTION la. direcci<;n 1
del banco 1
El registro PC ocupa la direcciGn 2 de
; los dos bancos
El registre ESTADO ocupa la direcciGn
3 de los dos bancos
; El registro INTCON ocupa la direcciGn
B de los dos bancos
; La PUERTA A ocupa la 5 del
banco O y su regist.ro de configuraci n
la direcci<;n 5 del banco 1
; La PUERTA B ocupa la direcciGn 6 del
; banco O y su registro de
; la direcciGn 6 del banco 1
; auxiliar en el que se carga el
esiado de los interruptores
Registro auxiliar para las rutinas de
; DELAY
El programa comienza en la O y
; salta a la direcciGn 5 para sobrepasar el
; vector de interrupciCn
; del banco 1
; Se configura la PUERTAA como
entrada
; Se configura la PUERTAB como salidd
Se asigna. el preesca.ler a.l TMRO
; Seleccicn del banco O
Se inicializan las dos puertas a
ceros
Se explora el valor del pulsador, que ser el que indique
el comienzo del contaje de tiempo. Los microrruptores se
; encontrar n ya en una determinada posicicn
; Se continEa en el bucle hasta crue se oulse
; Se lee el valor de los
; Se pone a. O con una. m sca.ra los bits que no interesa.n
; Sobre la variable AUX se llevar el contaje
Hay que controlar que el valor puede ser O. con lo
; cual no hay que meterse en un bucle que lo
decremente, sine sacarlo directamente
; La rutina DEC7SEG necesita en W el valor hex.
; Se carga en W el valor a visualizar por el display
; Se modifica sclo el bit 7 de W, que es el que se
; corresponder con RB7 (LED y zumbador), y que la
; rutina de decodificaci?n binario-7segm. ha dejado d O
Se visualiza el por el display y se activan el
; LED y el zumbador
; Se esperd un segundo
; Se decrementa el valor que se va mostrando
; Contar y visualizar en descendente hasta 1
; Se traduce el valor O
; No hace falte. e.ct i var e 1 LED y e 1 zumbador '
83
84
85
00
ca.ll
goto
DELAY1S
BUCLE
87 ;RUTINA DE VISUALIZACiaN
, 88
89
90
91
' 92
93
94
'95
96
97
98
99
--i. 1
DEC7SEG
retlw
retlvv
retlw
retlw
ret.lw
retlw
retlw
retlw
addwf PC,F
3F
06
SB
4F
66
6D
7D
07
;RUTINA AUXILIAR DE DELAY
-<.04
.-JOS
DELAY10
DELAYlO_l
bcf
:movlw
movwf
btfss
goto
INTCON,2
OxD9
TMRO_OPT
INTCON,2
DELAY10_1
..J. OS
.:.09
.---..10
decfsz TEMPOLF
1 1 1
-+ ........ goto DELWlO
.d2 return
DE DELAY DE 1
---=l17
.!.l8 DELAY1S movlw
movwf
...-l20 call
121
..-._22
c-1 23
124
return
END
Ox64
TEMPOl
DELl'.YlO
Con esta instrucciGn el PC apunta a la direcciGn de la
tabla correspondiente al N a visualizar en el display
Retorno con carga de W con un inmediato
Borra el flag de estado del TMRO
CB.rga d>1 TMRO pB.ra qu"' cuente 39
Espera el desbordamiento del TMRO
Carga la variable TEMPOl. que ser decrementada
; en la rutina a la que se
83
84 ; EtiTC DE ----------------------------------------
85
36 iut
87
88
.89
90
r.l.;,c::f
ca.ll
return
TEHP,f
cargartimer
"91 ; DEL CO!:-ITADOR ---------------------------------------------
,92
93 visual iza
'94
no-
'"";:
96
'97
,g8
99
'o o
"-01
.L02
-03 comienzo
."1.{)4
105
bcf
movfw
ca.Jl
movwf
movfw
btfsc
goto
incf
return
clrf
retrn
ESTADO,S
ACTUAL
display
PUERTAB
ACTIJAL,v-1
ESTADO,O
comienzo
AC'TL.1AL,f
ACTUAL
Representa el ntmero actual
; Incretuenta. el nt.mero
VALOR -> W
AC1UAL - W ( ACTUAL - VALOR )
.. ACTuAL < VALOR? -> flag C = O
; ST pone a O el display
; NO: incrementa ACTuAL
; TABLA DE
..._07
108 display
AlQ
J__ll
_12
...
)J4
;LJ7
_18
..1.20
addwf
retlw
retlw
rethoi
ret.lw
retlw
retllro:r
retlw
retl'ti-1
END
PCL,f
;
;
Ox3F
Ox06
Ox5b ;
Ox4f
Ox66 ;
Ox6d
Ox7d ;
Ox07
pcl + w -> w
El pcl se incrementa c0n el
valor de w proporcionando un
salto
Retorna con el valor del
del o
Retorna con el c.;d go del 1
Retorna con el go del
,..,
L
Retorna con el ct;:d. go del 3
Reton1a con el ct;d go del 4
Retorna con el ct;d go del 5
Retorna con el c.;:d go del 6
Retorna con el
....... ,.,
go del 7 --,.-
1 ;PROYECTO BpSICO 5
2 ; "ALARMA"
3
4
5 ;Se tienen 3 detectores digitales. cada uno dP. los cuales provocar
& ;la de un LEO, diferente en cada caso. UnG de lGS detectores
7 ;ser un optoacoplador y los otros 2 se simular n mediante 2 microrruptores.
8 ;El programa consiste en poner en marcha un zumbador cuando la alarma salte
9 ;por causa de la de cualquiera de los detectores. Tambiln se
10 ;enciende el LED correspondiente al detector.
11 ;La alarma SGlo funcionar cuando el microrruptor 11 de conexiGn estl a nivel alto.
12
13 ;DIRECTIVAS DEL PROGRAMA
14
1S
16
17
18
LIST
RADIX
P=lFB4
HEX
19 ;ETIQUETAS DEL PROGRAMA
20
21
...,...,
k .L.
23
.....
4't
25
26
27
28
29
30
31
32
33'
34
W EQU
F EQU
Z EQU
ESTADO EQU
PUERTA.Z!. EQU
PUERTAB EQU
O.xOO
OxOl
O.xG2
Ox3
x05
x06
35i ;PROGRAMA
36
PRINCIPAL
37
3B
3'3
40
41 INICIO
42
43
44
45
4.6
47
4B
49
5
C:1
_, ...
52
53
54
......
.::J;;:J
56
57
58
59
60
61
52
63
64
BUCLE
DESCON
ORG
gato
ORG
bsf
movlv
movwf
clrf
bcf
clrf
clrf
btfss
gota
call
,;:all
ca.ll
call
gota
clrf
soto
D
INICIO
5
ESTMJO.S
OxFF
PUERTAA
PUERTAB
ESTAD0,5
PUERTAA
PUERTAB
PUERTM,O
DESCON
SENSl
SENS2
SENS3
ZUMB
BUCLE
PUERTAB
BUCLE
; Se emplea el PIC16FB4
; Sistema de numeraciGn hexarlecimal
; Registro de destino W ; d=O
; Registra de destino F d=l
; Bit 2 del registl'o ESTADO
, El regis-tro ESTADO OCllpa la direcc:ir.n
3 de los dos bancos
La A ocupa la 5 del
; banco O y su ds
; la direcciGn 5 del banco 1 -
; La PUERTA B ocupa la direcciGn 6 del
; banco O y su registro de
la direcciqn 6 del banco.l
; El programa comienza en la direcciGn O y
salta a la 5 para sobrepasar el
'\lector de ntrrupcGn
; SelecciGn del banco 1
; Se configura la puerta A como
entrada
; Se configura la puerta B como salida
; del banco O
; Se inicializan las dos puertas "-
ceros
Se explora el valor del microrruptor que indica si la
alarma est o no conectada
; Si est desconectada habr que desactivar los LED
; y el zumbador por si estaban activados de una
anterior pasada por el bucle
; Se comprueba el estado de los tres sensores y se
hace el tratamiento que corresponda con los LED
; Si alguno de los sensores est activado el
zumbador deber pitar, si no, no
65 ;RtiTINA DE TRATAMIENTO DEL SENSOR 1
6
67
68
69
70
SEl'ISl btfss PERTAA, 1
gato
71 goto
DESACTl
ACTl
PUERTAB.l
72 DESACTl bcf
73
74 ACTl
75
76
77
78
gato VOLVERl
bsf PUERTAB,l
gato VOLVERl
VOL VER 1 ret.urn
Si est a 1, hay que activar el LED
correspondiente
Si no, hay que desactivarlo
79
BO
81
;RUTINA DE TRATF.MIENTO DEL SEl\ISOR 2
82 SENSZ btfss PUERTAA,2
; Si est
a 1, hay que activar el LED
83
84
85
86
87
goto
goto
DESACT2 bcf
88 ACT2
89
90 VLVER2
91
92
102
103
1D4
105
106
SENS3
DESACT3
ACT3
VOLVER3
goto
bsf
goto
return
btfss
goto
soto
bcf
gota
bsf
gota
return
DESACT2
ACT2
PUERTAB.3
VOLVER2
PUERTAB,3
VOLVER2
PUERTP..A, 3
DESACT3
ACT3
VOLVER3
PUERTAB,S
VOLVER3
correspondiente
Si no, hay que desactivarlo
107 ;RIJfiNA DE TRATAMIENTO DEL ZUMBADOR
lDB
109
110
111
112
113
114
116
117
118
119
120
121
122
123
124
ZUMB
DESACTZ
ACTZ
VOLVERZ
movf
a.ndlrt1
btfss
goto
goto
bcf,
goto
bsf
goto
return
l;'l.Tn
.Lo.L'Itl.l
PUERTAA,W
b'00001110'
ESTADO,Z
:ACTZ
DESACTZ
PUERTAB,G
VOLVERZ
PERTAB.O
VOLVERZ
Con esta m scara ... se consi.gue que sobre \"l quede
el valor de los sensores. Si ninguno est
activo, W contendr O y el flag Z se pondr a 1
Si ept a l. hay que desactivar el zumbador
Si nb, hay que activarlo .
1 EJEMPLO de interrupciones en el PIC16c84 programado con SIMUPIC
2 ; Se trata de realizar una de 5 pulsos con el contador de
3 de pulsl= d n PIC
4
5 LIST p=16c84
6
7 STATUS
8 INTCON
9 TRO_OPT
10
11
12
13
14
15
ORG
gota
ORG
goto
16 EMPIEZA bcf
17
18
19
20
21
22
23
24
25
26
27
28
29 BUCLE
30
31
movlw
bsf
movlw
mo.,;,f
movlw
mov-wf
goto
; Tipo de pie que vamos a usar
03H
OBH
EQU
EQU
EQU O 1.'9 TIMERO en banco O, OPTIOH en banco 1
o
EMPIEZA
TRATINT
STA1US,5
d'250'
TRO_OPT
STATUS,S
b'00101000'
TRO_OPT
b'l0100000'
Il>i'TCON
BUCLE
Vector de RESET
Vector de interrupciones
de p gina de registros O
Cargamos el TMRO con el valor 250 decil:r.al
; P gina de registros 1
contador de pulsos por flanco ascendente
; sin prescaler
; Activamos nterrupci?n por TMRO
; No es necesar-io volver a ca1ubiar de p giua
; porquE> INTCON est <i'n p g O y 1
Nos quedaremos aqui hasta que se produzca
la
32 TRATINT-, Aqu se incluir. n los de.las interrupciones
33 , de momento nos limitaremos a poner w a o (para que se vea que se
34 ha_ producido la. y esperar a que .el WatchDog- reinicie
35 , tH PIC. ' '
36
37
38 FIN
39
40
movlw
goto
o
FIN
1 Ejemplo programado con el SIMUPIC consistente en almacenar en las N
2 ; primeras posiciones de la EEPROM el contenido de las direcciones 10h-(10+N-l)h
3 de la memoria RAM
4 ; El valor de N est en la OF del primer banco de memoria
S Despuls de escr1bir la cadena comprueba que la escritura es correcta y
6 deja W a O si es correcta y a un valor diferente de O si no lo es
7 NOTP.
8
9
Funciona correctamente si N=O
10 LIST
11
12 DATA_CON1
13 ADDR_CONZ
14 STATUS
15 N
16
17 INDF
18 FSR
19 INTCON
20
21
'")'")
<-<-
23
24
25
26 INI
27
28
29
30
31
32
33
34
35
36
37 ESCRIBE
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 Wl>.IT
59
60
61
C.:'?
'-'"-
63
64
65
6
67
68 COMPROB
69
70
71
72
73
74
..,r
;::
76
77
78
79
80
8i
82
LEE
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
OBh
09h
03h
OFh
lOh
O Oh
04h
OBh
o
nu
4
ORG
gota
ORG
retfie Interrupcit;;li sin tratamiento
P gina O bcf
movf
movwf
andwf
btfsc
gato
STATUS,S
N,O
ADDR_CON2
ADDR_CON2,0
STA1US,2
FIN
Guardamos en W el contador
Refrescamos los flags
Si FZ=l saltamos a FIN
Inicialmente en ADDR est el de
; byte a escr-ibir +: 1 (de N+1 a 1 )
Se escriben' en orden i nverso
decf ADDR_CONZ,l DirEEPROM en Addr
movf ADDR_COb12,0 DirEEPROM en w
addlw INICIO INICIO+DirEEPROM= DirRAM (en
moV"-tJf FSR Direccionamiento indirectO
movf INDF,O En w dato a escribir
movwf DATA_CON1 Dato a escribir en EEDATA
; Sec:uencia de escritura
bcf
bsf
movlw
movwf
movlw
mo'Ft;f
movlv,;
movwf
b.sf
bsf
sleep
INTCON,7
STATIJS,5
h'55'
.ll.DDP..._CON2
h'AA'
ADDR_CON2
; GIE=O
Banco 1
b' 11000000'
INTCON
DATA_CON1,2 ,
DATA_CONL 1
GIE=l EEIE=l
ltv'REN=l
Orden de escri t1.1r;:,.
Esperamos a que se escriba
W)
; El WD siempre tarda m s en rebosar que la escritura
en completarse
bcf
clrw
addwf
btfss
goto
STAT'"JS,5
ADDR_CONZ, O
STA1liS.2
ESCRIBE
; P gna. O
lillDR_C01Sl2=0 ?
Si fZ=l saltamos a COMPROB
; Iniciamos de la escritura
mo,..rf N,D ; Guardamos en el contador
movwf ADDR_:CON2
In1c1almente en ADDR est el ntmero de
byte alear+ 1 {de :N}l a 1)
Se escriben en orden inverso
dec-f
ADDR_CONZ. 1
D.irEEPROM en Addr
movf ADDR_CON2 ,O ; DirEEPROM en w
addlV>7 I1HCID
DirPAN! en w
movwf :."SR
Direccionamiento
indirecto
bsf ST.
11
.TTJS, 5 p
gina 1
bsf DATA_CONl,
Orden de lectura
bcf STATUS,5 p
g1na o
83
84
85
86
87
68
89
90
-gl
-92
n-:>
""
9-4
95.
96 FIN
97
98
99
;
movf INDF ,O ; Dato de la. RAM en W
subwf ; DATA-W ->
btfsc STA11JS,2 Si FZ=l todo ha ido bien
.go.to FIN ; .Si no .Error y .w .o O
; Siguiente-
uddwf ADDR_:CON2 ,O ; ADDR_:CON2=0 ?
btfss
g-ota-
sleey
STA1US_,2
LEE
goto FIN
END
.; Si FZ=l saltamos a FitJ
, Lee- e-l sig-ueinte-
1
2
3
4
5
6
7-14
..,
o .
. o
- H
. CJ
o.
. ' ......
_,..
1
.
n
"5"fl/W
10.0
.
gl
1
"4"RS
"l"ln"H"
"i'00"To"D67"
""ved
-
., 1'L
.. IG1 l
MDULO LCD
SMBOLO DESCRWCIN
V ss Patilla de tierra de alimentacin
V dd Patilla de alimentacin de +5V
V o Patilla de contraste del cristal lquido. Normalmente se
conecta a un potencimetro a travs del cual se aplica una
tensin variable entre O y +5V que permite regular el
contraste del cristal lquido.
RS Seleccin del registro de control/registro de datos:
R/W
E
DO-D7
RS=O Seleccin del registro de control
RS=l Seleccin del registro de datos
Seal de lectura/escritura:
R/W=O El Mdulo LCD es escrito:
RJW 1. El Mdulo LCD es; ledo i
Seal de activacin del mdulo LCD:
E={) Mdulo desconectado
E=l Modulo conectado
Bus de datos bi-direccional. A travs de estas lneas se
realiza la trcolSferencia de informacin entre el mdulo
LCD y el sistema informtico que lo gestiona
DIMENSIONES DEL MDI TLO..L.CD
10U.O:!:l O
1.60
95 O.i:O 3
- ---
-l
n
2.54 2.10 o
l''
r l.r-
_e
-v' o...:::;--
.-<?
N -
. o
N N
!'::". :
.. .._
J .. .
..... n - - - - - - - n
"
_:: H H
..
.l.
.. u---- -- -----------u
;
'---t.o
,..:.
0-
0.
76.37
80.00. 3
L C D
E!. Ooc;..liqh ting !.<lmo
1
l
1
1
1
4 <02. 50
0.8J
,_..---'----'--
g:;
1
crsasii
". al cil :::::
:::::
.....
L-----
-t 07 1 \1
1
1
1
1
1
1
1
L
_j(JEGO .D.EJNSTRIJCCTONES
4.3.1 CLEAR DISPLAY
Borra el mdulo LCD y colo.
el bit IID a "1" por defecto.
Cdigo:
RS RfW
o o
Tiempo de ejecucin: 1.64 mS
4.3.2 HO.l\IE
DB7
o
cursor en la primera posicin (direccin 0). Pone
DB6 DBS DB4 DB3 DB2 DBl DBO
o o o o o o 1
Coloca el cursor en la posicin de inicio (direccin 0) y hace que el display comience
a desplazarse desde la posicin originaL El contenido de la memoria RAM de datos de
visualizacin (DD RAM) permanecen invariables. La direccin de la memoria RA.l.\1 de datos
para la visualizacin (DD RAM) es puesta a O.
Cdigo:
RS RfW DB7 DB6 DBS DB4 DB3 DB2 DBl DBO
o o o o o o o o 1 X
Tiempo de ejecucin: 1.64 mS
~ _ENTRY MODE SET
Establece la direccin de movimiento del cursor y especifica si la visualizacin se va
desplazando a la siguiente posicin de la pantalla o no. Estas operaciones se ejecutan durante
la lectura o escritura de la DD RAM o CG RAM. Para visualizar normalmente poner el bit
S a "0".
Cdigo:
RS R/\V DB7 DB6 DBS DB4 DB3 DB2 DBl DBO
o o o o o o o 1 VD S
Tiempo de ejecucin: 40 .tS
4A...4 DISPLAY ON/OFF CONTROL
Activa o desactiva poniendo en ON/OFF tanto al display (D) como al cursor (C) y se
establece si este ltimo debe o no parpadear (B).
Cdigo:
RS R!W DB7 DB6 DBS DB4 DB3 DB2 DBl DBO
o o o o o o 1 o e B
Tiempo de ejecucin:
40 1-1S
4..4aS CURSOR OR DJSPI.AY SHIFf
Mueve eLcur:;or y desplaza el display sin cambiar el coEtenido de la memoria de datos
de visualizacin DD RAM.
Cdigo:
RS RIW DB7 DB6 DBS DB4 DB3 DB2 DBl DBO
Tiempo de ejecucin:
4A..6 FIINCTIQN_SET
o o
40 ..tS
o o o 1 SIC RIL X X
Establece el tamao de interfase con el bus de datos (DL), nmero de lneas del
display (N) y tipo de carcter (F).
Cdigo:
RS R/W DB7 DB6 DBS DB4 DB3 DB2 DBl DBO
o o o o 1 DL N F X X
-
Tiempo de ejecucin: 40 ..tS
4A_7 __SEI_THE CG RAM ADDRFSS
El mdulo LCD adems de tener definidos todo el conjunto de caracteres ASCII.
permite al usuario definir 4 u 8 caracteres grficos. La composicin de estos caracteres se va
guardando en una memoria llamada CG RAM con capacidad para 64 bytes. Cada carcter
grfico definido por el usuario se compone de 16 u 6 bytes que se almacenan en sucesivas
posiciones de la CG RAM.
Mediante esta instruccin se establece la direccin de la memoria CG RAM a partir
de la cual se irn almacenando los bytes que definen un carcter grfico. Ejecutado este
comando todos los datos que se escriban o se lean posteriormente, lo hacen desde esta
memoria CG RAM.
Cdigo:
RS R/W DB7 DB6
DBS 1 DB41 DB3j DB2 J DBl J DBO
o o o 1 Direccin de la CG RA..t\1
Tiempo de ejecucin: 40 ..tS : -. <-_ -.- _:... ... - :-: _; -
4AJtSET.TIIE DD RAM ADDRFSS
Los caracteres o datos que se van visualizando, se van previamente en
una memoria llamada DD RAM para de aqu pasar a la pantalla.
Mediante esta instruccin se establece la direccin de memoria DD RAM a partir de
la cual se irn almacenado los datos a visualizar. Ejecutado este comando, todos los datos que
se escriban o lean posteriormente los hacen desde esta memoria DD RAM. Las direcciones
de la 80h a la 8hF corresponden con los 16 caracteres del primer rengln y de la COh a la
CFh con los 16 caracteres del segundo rengln, para este modelo.
Cdigo:
RS RfW DB7
DB6j DBS j DB4j DB3j DB21 DBl., DBO
o o 1
Direccin de la D D RAM
Tiempo de ejecucin: 40 11S
4A..2_READ_B._USY_FLAG_& ADDRFSS
Cuando el mdulo LCD est ejecutando. cualquiera de estas i!]strucciones, tarda un
cierto tiempo de ejecucin en el que no se le debe mandar ninguna otra instruccin. Para ello
dispone de un flag llamado BUSY (BF) que indica que se est ejecutando una instruccin
previa.
Este instruccin de lectura informa del estado de dicho flag adems de proporcionar
el valor del contador de direcciones de la CG RAM o de la DD RA1v1 segn la ltima que
se haya empleado.
Cdigo:
RS RfW DB7 DB6TDBSjDB4jDB3jDB2jDBlfDBO
o 1 BF Direccin de la CG RAM o de la DD RAM
Tiempo de ejecucin:
4A10 WRITE DATA TO GG OR DD RAM
Mediante este comando se escribe en la memoria DD RAM los datos que se quieren
presentar en pantalla y que sern los diferentes cdigos ASCII de los caracteres a visualizar.
Igualmente se escribe en la memoria CG RAM los diferentes bytes que permiten
confeccionar caracteres grficos a gusto del usuario.
El escribir en uno u otro tipo de memoria depende de si se ha empleado previamente
la instruccin de direccionamiento DD RAM o la de direccionamiento CG RAJv1.
Cdigo:
RS R/W ns7
1
DB6
1
nBs
1
DB4
1
DB3
1
DB2 r DBl T nBo
1 o Cdigo ASCll o byte del carcter grfico
Tiempo de ejecucin:
4.til_READ_DATA FROM CG_QR.DD_RAM
Mediante este comando se lee de la memoria DD RAM los datos que haya
almacenados y que sern los cdigos ASCII de los caracteres visualizados.
Igualmente se lee de la memoria CG RAM los diferentes bytes con los que se ha
confeccionado un determinado carcter grfico.
El leer de uno u otro tipo de memoria depende de si se ha empleado previamente la
instruccin de direccionamiento de la DD RAM o la de direccionamiento CG RAM.
Cdigo:
RS RIW DB7j DB6I DBS l DB4 _1 DB31 DB21 DBil DBO
1 1 Cdigo ASCII o byte del carcter grfico
Tiempo de ejecucin:
4A..U_ABREVIATIJRAS
Se listan a continuacin las abreviaturas empleadas en los cdigos anteriores y su
significado:
S = 1 Desplaza la visualizacin cada vez que se escribe un dato.
S =0 Modo normal
liD = 1 Incremento del cursor
liD =0 Decremento del cursor
SIC = 1 Desplaza el display
SIC =0 Mueve el cursor
R/L = 1 Desplazamiento a la derecha
R/L =0 Desplazamiento a la izquierda
BE = 1 Mdulo ocupado
BF =0 Mdulo disponible
DL = 1 Bus de datos de 8 bits
DL =0 Bus de datos de 4 bits
N = 1 LCD de dos lneas
N
=0 LCD de una lnea
F = 1 Carcter de 5 x 10 puntos
F =0 Carcter de 5 x 7 puntos
B = 1 Parpadeo de cursor ON
e = 1 Cursor ON
D = 1 Display ON
X
=
Indeterminado
4.5 jUEGOJlE __ CARACTERFS
Es el mostrado en la figura 4-1. Las posiciones marcadas como CG RA!\1 (n)
corresponden a uno de los 8 posibles caracteres grficos definidos por el usuario.
4 bits de ms Qeso del carcter hexl
o 1 2 3 4 S 6 7 8 9 A Bj e o E r
1 o
CG
121 ::i) F
.
..
RAM
r-=
l
(t)
1 ! ., ,::, f) :,,
' ..
. .
ce
1 - -;L-
.::1
14
1
I:J 1 1
(2
.....
CG
11 .-. r r J- , ..
r -{ltl' =: ::1 2 -,.,=
.s .....
.. . .
(3
CG :f:f: , ...
1
- -
.. r:tl-ri=F
:: . . 1 . - . .-
.::a
3
Rtf
1 ! 1 -. .....
(4
'-
ce
! 1
1
1 I - 1
IJ:Il H=
, ....
Cl) 4 RAM
: :- .. .: .
' ..
.....
(5)
(.)
11
1 :::ttl-1.1
..
nl
CG
.. - E 1 1 -
....
I.A '- S RAM
.. ;. = - - 1;::_
1
l. -1
1_:.
nl (6)
(.)
.. .. Ft 1 f
- -
CG
::::: a::. ... . . .. .1
.
Cl)
6
RAM
=-
"'C
(7)
o
1
CG :
-? f=r.t::,, , ,
- ==1=1:::=1.::,
'3
:rt:
t/J
71 RAM 1 .
_,r
Cl)
(8)
c.
CG
.. -1
1
'1
. ..-
-
1, :-: - .::, . ::
.. i
...
t/J
8
RAM
..
o
( 1)
e:
CG - I, 1
'TI J h la
-
Cl)
9 RAM
) -:1 j_" l -t
'::1
E
( 2)
CG 11
. ,. -, .
I:Jir . '1
.
=t==
Cl) .. , .. . _,.
::e til ..
.J
"'C
A
RAM
. .
11
1 .a!
(.3)
t/J
CG
1< rlk
::tl
1
:tii-:ID
.....
1- 11 ::
n - 8
RAM
:w
.e
(4)
1 CG
.
.
1
1
r.J:. . -r-t
.
.
.,.
p: C RAM
:w
.
... ..
. . . .. .
( 5)
CG
_J .... "1 r .
.:J. -=\!1- 1
t.
.
1 o
RAM
- 1
1
-
1 t
1 -
(6)
1 CG
1 t .. .. t" -+
13
-
E RAM
ll 1
,.-,
(7)
1 CG ..
-::
rt .-, ..:-
. .11-::=tll:l
..
JI
F 1 RAM .
C
(8)
Figura 4-1. Juegos de caracteres ASCII del mdulo LCD
4..1_.CA RA CTERFS.GR FJCOS
El usuario puede definir hasta 8 caracteres de 5 x 7 puntos o 4 de 5 x 10. Se
seleccionan y visualizan aplicando a la DD RAM cualquier valor entre 00 y 07 08 y OFh
como si de un cdigo ASCII se tratara.
Se definen introduciendo en sucesivas direcciones de la CG R.AJ.\1 unos bytes cuyos
patrones binarios definen el carcter tal y como se muestra en la figura 4-2.
Un carcter de 5 x 7 necesita de 8 octetos en la CG RAM para ser definido, uno de
5 x 10 necesita de 16. La CG RAM es una memoria de 64 posiciones en total.
En el ejemplo de la figura 4-2, para definir laR en 5 x 7 se introducen 8 octetos en
las 8 primeras posiciones (O a la 7) de la CG RAM. Cada bit de cada uno de esos octetos
que valga nivel "1" implica que su correspondiente pixel en el LCD se active.
Como es el primer <ronjunto, de .8 bytes es decir, el primer carcter de la CG RAM,
este se selecciona aplicando el cdigo 00 en la DD RAM como si fuera cualquier otro cdigo
ASCII. . . .
Ca ..... UU:I11H'
tD -00"-Wt
7 6 :1 2 1 o
--Hi9her
1 :ow!V-
000'0000
titr;her
1 -
1 o l)
:no 1
10 1 o
lo 1 1
o o n
11 0 0
11 o 1
p 1 o
11 1 1
1
1
r ...,.. ... ,.., ...
1 ... eo
7654J210
-Hiqner
JI' .......
-
-
- , ..........
c ....... ,.u
COrMOO't.Nifll
76'>43210
Lower.-
000000
Jl'acr .... ..,carac
,,..., - eo IUMt
5 4 ) 2 1 o 7 6 5 4 ) 2 1 o
- Hiqher -Hi9her
lower - Loer-
o o o o o o o o o
,o o o 1
l
o o 1 o 1' t' IL.l..
O O 1 1 1 fbJO O 11
10 1 o o 1 o o o t
19 1 1 1 o
11 o o o o
"o o: o
..........
uooo.oo1
,o o e
:o o 1
:'JI O
() 1 .u 1 1
:t o o
l1 o 1
o og; ? um' o o
------------- -- -
11 1 o 1
h 1 1 o
b l 1 l ' : 1 o
'1 1 1
1
1
1 !1 (} ()
!1 o 1
11 1 o
1
JI 1 1
1
1
1
1
1
1
1
Figura 4.2. Generacin de caracteres grficos.
,..:::----..:::::=::;:::: 1 o o o o 1
1 --- --._ o o o 1 t _ - -....
--- -....... --
0000'1 11t10J1 t 1
------------- --- __ -- _____ __
: r g r ,. r
li i 1 o J
t , r
. ,. .....
JUEGO DE INSTRUCCIONES DEL LCD
HEX
CLEAR DISPLAY
01 Borra el display y coloca el cursor en primera posicin, pone liD = 1 (incremento de cursor)
HOME
02
03 Coloca el cursor en la posicin de inicio
ENTRY MODO SET
04 IID=O, S=O Cursor se desplaza a izquierda
05 IID=O, S=l No se desplaza cursor (se escribe siempre en la misma posicin)
06 IID=l, S=O Cursor se desplaza a derecha
07 IID=O, S=l No se desplaza cursor (se escribe siempre en la misma posicin)
DISPLAY ON/OFF CONTROL
08 D=O, C=O, B=O NO display NO cursor NO parpadeo
09 D=O, C=O, B=l NO display NO cursor SI parpadeo
OA D=O, C=l, B=O NO display SI cursor NO parpadeo
OB D=O, C=l, B=l NO display SI cursor SI parpadeo,
:
'
oc D=l, C=O, B=O SI display NO cursor NO parpadeo
OD D=l, C=O, B=l SI display NO cursor SI parpadeo 1
OE D=l, C=l, B=O SI display SI cursor NO parpadeo
OF D=l, C=l, B=l SI display SI cursor SI pa.l'padeo
CURSOR OR DISPLAY SHIFT
10 SIC=O, RIL=O, mueve el cursor a izquierda
11
12
13
14 S/C=O, RIL=l, mueve el cursor a derecha
15
16
17
18 S/C=I, RIL=O, Desplaza el display a izquierda
19
lA
lB
IC S/C-1, RIL-1, Desplaza el display a derecha
ID
lE
IF
FUNCfiON SET
20 DL=O,N=O,F=O Bus 4 Bits, 1 Linea, formato 5x7
21
22
23
24 DL=O,N=O,F=l Bus 4 Bits, 1 Linea, formato SxlO
25
26
27
28 DL=O,N=l,F=O Bus 4 Bits, 2 Linea, formato 5x7
29
2A
2B
2C DL=O,N=l,F=l Bus 4 Bits, 2 Linea, formato 5x10
2D
2E
2F
30 DL=l,N=O,F=O Bus 8 Bits, 1 Linea, formato 5x7
31 1
32
33
34 DL=l,N=O,F=l Bus 8 Bits, 1 Linea, formato 5x10
35
36
37
38 DL=l,N=l,F=O Bus 8 Bits, 2 Linea, formato 5x7
39
3A
3B
3C DL=l,N=l,F=l Bus 8 Bits, 2 Linea, formato SxlO
3D
3E
3F
SET THE CG RAM ADDRESS
40
RAM de caracteres grficos definidos por el usuario
..
7F
SET THE DD RAM ADDRESS
80
RAM de datos que se visualizan en el display de 80 a 8F a lnea y de COa CF 2a lnea
..
FF
i)))))))))))))) )) ) ) ) ) ) ) )
) ) ) ) ) ) ) ) ) )
DDRAM
' LINEAl
80 1 SI 1 82 1 S3 1 S4 1 SS 1 S6 1 S7 1 SS 1 S9 1 SA 1 S8 1 SC 1 SD 1 SE 1 SF 90 91 92 93 94 95 96 97 98 99 9A 98 9C 9D 9E 9F AO Al A2 A3 A4 AS A6 A7 80
LINEA2
- .
CO l Cl _l C2 1 C3 1 C4 1 C5 1 C6 1 C7 les T C9 leA T C8 1 CC 1 CD 1 CE 1 CF DO DI D2 D3 D4 D5 D6 D7 DS D9 DA D8 DC DD DE DF EO El E2 E3 E4 ES E6 E7 co
-
t. ;LCD_,_CXX.ASM
z
3
4
5
6
7
13
9
;El conitmto da rutina3 cr11e se I'!resantan a continuaci ;n P.ennit.en real :i.:::et:r
;las -tar-eas b -sicas -de -cont-rol -del .m,;dulo -de -visualizaciQn -LCD. Se -emp-lean
;con los Prc !6cxx. En el .prqgrama .principal se deber reservar memoria
;par.:r el bloque de v.:rriables que utiliza: el LCD del modo:
,. YQU dir_inicio_dl.J:lloq.ue
.;..BLO.QUE JlE .n:LQUETAS
11
12
13
14
!5
15
17
18
19
20
2.1.
??
23
24
25
#define ENABLE
.#define DISABLE
#define LEER
#define- ESCRIBIR
#de Ti na -OFF _:.cOMANDO
#define ON_;_COMANDO
CBLOCK LCD_VAR
LCD.:,_TEMP;_2
LCD_TEMP_l
ENDC
bs"f PORTA, 2
-bcf PORTA.2
bsf PORTA,!
bcf PORTA-, 1
bcT POIITA ;
bsf -PORTA...- O
;Activa E
;Desact-iva
;Pone tCD en Modo Rn
; Pone- LCD en Modo WR
;1)esacti va "R'3 (modo comando)_
;Activa -RS (modo datos)
;-Inicio de las variables. Ser
;. disponibl.e.
la primera direcci9n libre
26 ;RUTINA UPJCD: Con esta rutina se configura el PIC para que trabaj190 con el LCD.
27
zs-
zg. UP-_LCD
3.G
32
33
34
35
36
37
bsf STAIUS-,Rfl{J
c.lr_f. EORTB.
clrf PORTA
.bc.f .STATUS.,RPO.
OFF:_ COMANDO
DI SABLE
return
;Banco l
;.Ra <Q-7> salidas. d.igi:t.a.les.
;RA <0-4> salidas digitales
.;.Banco O
;RS=O
;E=O
38 ;RUTINA LCD.:_BUSY: Con est.:r rutina: se chequea el estado del
313 ;Tlag 13USY del mQdulo TCD,_ que indica . cuando est activadoA que el
40 ;mGdulo at:n no ha terminado -el -comando anterior. La rutina e-pera a
4.1 .;.q.ue .se .c.omple.:t.e .c..u.alqu.ie.r ..comando .. an.te.r:ior .antes .de .r.e.tarnar ..al
42 ;-programa prncpcrl r parcr pode-r envta:r un nuevo- c-omando-.
43
44
45 LCD....;.BUSY
46
47
413
4-9
50
5-1
53
54
55
56
57
58
59'.
60
6L
LEER
bsf
movlw-
movwT
bcf
ENABLE
nop
STATIJs-, RP O
H-'FF'
-pORTB
STATUS.-RPO
btfsc. P.ORTR..7
goto L_BUSY
DI SABLE
bsf
clrf.
bcf
ESCRIB
return
PORTB
STATUS,RPO
;Pone el LCD en Modo RD
;.-puerta -:s como entrada
;Seleccion-a el hanco O
;Activa el LCD
;Chequeo- bit- de. B.usy
-;.Desactiva LCD
;Puerta B salida
LCD -IZ!n modo WR
62 ;RUTINA Se trata de una peque}(a -rutina que se- encarga de generar
63 .;.un Lm.puiso de 1& s (para "una frecuencia .. d.e funcionamiento .de 4 Mhz)
64 ;p-or la: pa:hta de sa:lida- da la- Puerta A P.A2. que- se halla.- conectada-
oS ;a la E (Enable) del. LCD. Con esta rutina se pretende actvar.
&6 ;al LCD.
67
68
70
71
72
73
74
ENABLE
nop
DISABEE
_return
;Activa.- E
-;Desactiva -E
75 ;PJITUlA LCD_DATO: Es una rutina que pasa el contenido c.:trg.:tdo en el
1'6 ;registro W. el cual contiene-un car cter.J>.SCIL a la PUERTA B. para
77 ,._por .el Len .o escribirlo en l:a
78
7S
80 LCD_DATO
81
82
OFF_C0WINDO
movwf PORTB
call LCD_BUSY
;DesactiV'l. RS (modo comando)
;Valor 1\.SCII .'i sa.c.'ir por PORTB
;Espera a. que se 1 ibere el LCD
84
65
86
B7
'
ON..:...COMANDO.
-co:ll LCD_::E
.return
;Activa. RS. (modo. dato.).
;Genera pulso de E
88 Rutina parecida a la anterior, pero el contenido daw
89 uncomando para el LCD,quees necesario pasar
9tr _;tamhifn a la FUERTA- Ir para su
91
9.2-
93 LCD_:.REG
94
95
96
97
98
99
OFF_:_COMANDO
lllO'VWf PORTB
call LCD_BUSY
call LCD_E
retu:rn
;Desactiva RS (modo comando)
.de. comando
;LCD lihre7.
;Si. Genera pulso. de E.
100 ;RUTINA LCD_HH: Esta- rutina- se encaTga-- de rea:J:izar la- secuE>ncia- dE>
101 dE>l mcdulo LCD dE> acuE>rdo con los tiempos dados por
102 ;e1 -Fabricante (15 ms}. -Sa especifican 1os valores de DL,. -N y F"
.. 103 i .como _la .configuracien .de .un .. interfaz .de cB .1 tneas .con .el .bus
104 ;dt:t datos- del PIC, y 2 lJneas- de 16 caracteres-de- S x--7
105
lfJ6.
107 LCD_INI 111ovlvv
108
un
111
.. 112
113-
114
115
116
117
118
b'OOlllOOO'
can
call
l!IO'ilw
call
.call
moviw
call
ca.ll
raturn
LCJLREG.
LCD.:_DELAl"
. b roonmao:.
LCD_:'REB
cLCD...DELAY
b' 00111000'
LCD_REG
;Ccdigo de instruccicn
; T E>mpori za
;Ccdigo de instrucci{n
. ;.Temporiza
;Cdigo. de ..
;Temporiza.
ng. ;RUTINA BORPA_:_Y_BO.ME: Borra el display y retorna al cursor a la O.
120
lZl
122
123:.
124
125
12.6
moviw b' OOOOlJ001'
call. LCD;,_RE&.
renrrn
127 ;RUTINA IHSPLAY:_ON;_CUR_OFF: Control del displY y: c1rrsor.
;.Activa el dis:elay y desactiva es cursor
129
1 3Lf DTSPI.AT W CUR OFF
131 -- -
mov Iw h 'lJ01Jrrll[J(f'
ca-H LCD_REG-
;t:CD on, cursor otC
132 rE>turn
133
.134
135 ;RUTINA LCD_DELAY; Se tratcr dB un rutmr que i:mple.mentcr un retanto-
136 ;.a. temporiza:ciqn de. 5 ms .. Utiliza dos va:riahles llamadas LCD TEMP 1
13.7 ;y que se van decrementando hasta alcanzar dicho.-tiem2o.
138
!39
140 LCD_:_DELA"Y:
141
142
.143
144 LCD.:_DEEAY:_l
145
14:6
147
148
14-9
clrwdt
mov]w
movwf
clrf
decfsz
goto.
dBcfsz.
goto
return
lD
LCD_TEMP_l
LCD:_DELAY_l
LCD-'DELAY_l
1
Printer:i 37 17 Apr -oo
7"5
Sil
81
B2
33
!J4
as
-87
B:B
B9-
90
91
gz
9-3 KEY__:__HEX
94-
135
-9b
'9:7
9B-
9.9
100
10!
12 KEY_HEX_l
.J..UW
"104
1D5
1\JEi
107
llli.t
-retlw
re-tlw
ret.lw
retlw
r-etlw
re-tlw
:cetl.w
-retl-w
ratlw
.r.e.t.lw
ret-lw-
ret1w.
retlw.
movf
lliOVTfff
el.rl
.SJ.rbw.f
b-tf-sc:
goto.
-in<::f
-_soto
movf
movv-J.f
return
OXER
0-xDE
UxDD
xDB
axBK
O:xBU
Ox:BB
Ox7E
.Ox7B
nx:n
O.xB-7
DxD7
xE7
TECLA.W
KEY_2
KEY_l
.-KE":l_IABLA
STATUS,.Z
KEY_l;F
F-EY...c-HEX_2
KEY:_LW
TECLA
;A-lmacena e-l c:.;di-go tempora-l:mente--
;Contanor-HEX a TI
c:Gdigo en ln tabln
.;.Cn:m.pa:rn: .r.::nn a:l _de .lo: recl.o:
;:Coi nc:i d.e: ?
;Si
;No. im::rementa =ntatiur HEX
;Carga. contador HEX en- 1a- va.riab1e- da- sa1 ida
109 ;-RUTINA HEX_7SEG.:- Ru.tirra de convers:i-t;:rr de HEX (OF); a 7 segmentos:.
110 ;.El acumulador W contiene.,: durante- la llamada.,. el c;digo. HE.X y,_i al retornar,.
lll ;-el corr-espondi-ent-e a 7 s-egmentos
I:t3
114-- REX_7SEG
1T5
' < ,--
-..1:-LD
117
118:
1.1'1
120
122
123
124
12Ei
1Z7
l:'R
129
130
131
and1v'l
an-clw'f
ret-lw-
re-tlw
re.tlw.
retl:w
retlw
re-tlw-
ret1w
retlw
r-etl:yy
retiw
:r:-etlw
-r:erUw.
r.etlw
retlvv
TEitlw
b'DDDDUll'
"FCL;F
.b ' DD11-1:1J1'
b ' Q!JOODll O '
h
3
01.HOH'
b.' lO:llli.l.l-'
b"Oll(}0110'
b 'O! !!l! !0:!'
b-' -1111101
b'UUDUU111'
b'UlTlTlTl'
b 'lJ1100111'
b-' fH 11IT111'
b} G LLLllUG J
b_'l}Jl111QJJ..1'
b'.OlH110'
b
1
01111001'
lr' OlllOODl'
;D
;7
:8
_;.9
;.B
;:F
Printed 12;37 17 Apr 00
1
2
3
4 ;eonjunto de rutinas para el manejo del teclado.
S. ;No ea un- Frog.rama en- sl mismo. Pa-ra utilizarlo hay qua.
5 ;colocar en el programa
.7 ;:KEY_;V:AR :EQU dir_i:nicio_;del_;.bloqut:o
g. ;:BLOQUE. DE. ETIQUETAS
1!1
11
12
i3
14
I5
CBLOCK
ENDC
KEY_VAR
TECLA
KEY_l
K.EY_Z
KEY_DELAY_l
KEY_1JELAY_2
;.Inicio. de. las variables.
;Retorno del de tecla
;N de filas a explorar
;TE>mporal de
;Variable- de-
na
16
17
13
19
20:
21
22
23
;RUTINA KE'l SCAN.:- Ru.tina de. del teclado-. La variable.
;_"Tecla" -retorna con el de la tecla -pulsarla o el OxEtO
;s-i .no se pulsa -ni.nguna..
24
25-
2 & KE'E_SCAN
2.7
2B
29.
jn
31.
33
34
35 KEY:_SCAN:_t
36-
37
. .., "
JO
39
4Cl
4.1
42
n
44
4-5
46
A"1
..,.,
4ff
4:9
SQ KEY_;S'CAN_Z.
-51
52 KEY_.SCAl::t_.3'
53
54
55
<:"C:
-'U
57
58
:3'3
60
.S J.
&2
63
64
65
&6
57 VOLVER
5B
69
bsf
lOVlW
movwf
.Ps-f
bcl
movlw:
movlw
mo-vw.f
movf
mov-.vf
nop
:li'IOV:f
movwf
subwf
btfss
gcrto
hsf
rrf
d-ecfsz
goto
movlw
gota-
mm<Lw.
1ltOVW
.clrf
clrwrlt
decfsz
goto
decfsz
goto
movf
mo..,'Wf
uo-p
.mov.f
su:.bwf
b.tfss
goto
movr
mov-.,.f
re tu m
STA'I'US. RPO
h ' GO.Gllll'
po1ITB
OPTIQN_:REG7NQT_RBPU
s.n:ros P.P n
4:
K'EY_l
b' 01111111'
TECLA
TEC:LA,W
PORTB
.PORIB)w
KEY_;2
STJ.J11S. rL
KEY_;SCAN_2
STJs.TUS ,C
TECLA,F
Vk"'7 1 k'
KEY_:_SCAN_l.
Ox30
VOEVER
.. lJlQ
KEY_DELAY_l
KEY_.DELAY_2
KEY_DEL1".Y_2, F
KEY_:SCAN_4
KEY....;DEIAY_1.r F
K.EY_SCAN_ 3
P01ITB
.PORTB.,W
KEY:_Z,W
.. rus.,.z
KEY_:.SCAN_l
KEY_2,W
TECLA
;Selecciona: p _gina I
;RB7 -1ffi4 sa1 1ffi3-1ffiD -entra-das
;Activ-a .o:ar-!as: pull-:up
.;:Se.i ecci a!'.d .p ri.na D
;N. i de.. columnas. a. exp-lorar
;Columna a activar
;:Le:e: f9S o:;rlunm:as:
;Hay a.Lguna. pulsada. ?
;Si hay :alguna -pulsada
;No hay ninguna -en .esa fila
;S-lecciona siguiente fila
;Salta si se nan terminado las. filaS
; Reto-rna c?tfigcr ITxf:f!J fncr Flay pu I saci t;n )
;Jiud.ra de de unns. Z.Q ms.
;para :evitar :el rebote :de l:os pulsa.d.or.es
;Tras la:. s.a lee nJ1evamer1:te
;si 1a t.-ecl.a es l.a misma. Asi se
;:evi ta:n l:os Tehot:es ..
;.Es. la misma ??
;No, seguir con la expl o rae i <:n
;Si,. -suarda.-r -en va-r-iable -de s.;lida TECL .. el va1o.r
; recogido
70 ;:Rb:TINA KEY_HEX:: Convierte: el c:<;digo: da tec:la que: haya: en va.r:,Q.:o:.J.e
71 ;. "Tecla'' a. Hex.._ {0.-E }. _ Fl. se devuelve en. L3. v.3.:r:i.a:bl.e "T.ecl.a:" ..
72 como -ruti:na :auxili.:ar Key_-:ta:blo.
73
74 KEY:_TABI.A movf KEY:_i.W
75
76
77
78
a.ddv:f
retlw
r-etlw
retlw
'PCL ,F
Ox7D
OxEE
IJxEU
; :2
;PROYECTO TOPICO 2
; "MENSAJE DE BIENvENIDA SOBRE LCD"
; Programa que muestra la palabra "HOL.ll." en la 1 nea 1 del LCD
;DIRECTIVAS DEL PROGRAMA
LIST p=l6F84
RADIX HEX
Se emplea el PIC l6F84
Sistema de hexadecimal
;ETIQUETAS DEL PROGRAMA
l6CXX
INCLUDE "PIC16CXX.INC"
OxOC
EQU OxOD
EQU OxOE
RESUL EQU
TEMPOl
OFFSET
OPCION
LCD_VAR
EQU Ox81ASQH
EQU OxOF
Etiquetas gen,ricas para los PIC
;PROGRAMA PRINCIPAL
ORG
salta a la
El programa comienza en la O y
goto INICIO ; direcci9n 5 para sobrepasar el vector
de
ORG 5
INCLUDF. "LCD CXX.FISH"
cilll. UP LCD ; Confiqura ol PlC para el uso
LC!.)
bsf STATUS,RPO ; SelecciCn del banco 1
movlw b' 10000111'
movwf OPCION ;Asigna preescaler al TMRO
bcf STATUS,RPO
call LCL INI ;Inicializa el LCD
INICIO 1 call - BORRA Y HOHE
-call DISPLAY ON CuR OFF
movlw Ox80- - ; Primera de primera fila
call LCD REG
movlw - b'00000110' ; Entry Mode Set. Inc de cursor
call LCD REG
clrf OFFSET ; DireccHn del mensaje
call HENS
BUCLE goto BUCLE 1 El programa acaba en un bucle infinito
RUTINA MENS: Esta rutina saca mensajes por la pantalla LCD,
siendo el primer car cter aquel que est en la apuntada
por OFFSET, y debiendo ser el Eltimo OxOO
MENS clrf RESUL ;Inicializa contador de caracteres
MENS 1 movf OFFSET,W ;Coge el desplazamiento
- addwf RESUL,W ;Calcula el car cter a coger
call DATOS ;Coge el car cter
iorlw O ;Actualiza flags
btfsc STATUS, 2 ; Comprueba si es el U timo
return
call
incf
movlw
movwf
gotq
LCD DATO
RESL,F
d'lO'
TEMPOl
MEN$_1
;Si es el fltimo vuelve
;Visualiza el car cter
;Incrementa contador de caracteres
;TABLA CON LOS DATOS A SACAR POR EL LCD
DATOS addwf PCL,l
retlw 'H' OFFSET OxOO
retlw '0'
retlw. 'L'
retlw 'A'
retlw OxOO
END
DELAY_V movwf DELAY 1
clrf DELAY 3 -
clrf DELAY-2
DELAY LOOP decfsz DELAY-3,F
goto DELAY -LOOP
decfsz DELAY-2,F
goto DELAY -LOOP
decfsz DELAY-l,F
goto DELAY -LOOP
return -
END
--------------------------------------------------------------------
,
; SEMAFORO .ASM
; Autor: Mikel Etxebarria
; (e) Microsystems Engineering
;Este ejemplo de car cter did ctico presenta la de un
sem foro
;en el que los tiempos de encendido de las luces roja y verde puede
ser modi-
;ficado.
;La senal de entrada RAO conectada a un interruptor permite, al
.activarlo,
;actuar en el modo de de tiempos. RAl a "0" actf.a sobre
el con-
;tador de tiempo de la luz verde y, a nivel "1", sobre el contador de
la luz
;roja. La entrada RA2 a "1" incrementa el valor de dicho tiempo y a
"O" lo
;decrementa.
;
;iEn la puerta B se han conectado una barra de leds luminoso's"que, de
forma
;gr fica, representanien segundos los valores de ambos tiemps (entre
1 y 8).
;RAO a nivel "0" desconecta la modalidad de En esta
;las luces roja, verde y ambar conectadas a RA4-RA3 y RA2
respectivamente, se
;activan segf.n los valores establecidos previamente (la luz ambar
tiene un
;tiempo fijo de un segundo)
;
;Finalmente, la establecida para el encendido de las luces
roja
;verde queda registrada en la memoria no vol til EEPROM de datos con
obje-
;to de no ser necesaria una nueva cada vez que se
encienda Bl
;sistema
procesador
registros
memoria
rojo
rojo
verde
verde
list p=l6C84
include 16CXX.H
CBLOCK OxOc
Tiempo rojo
cont_rojo
Temp_rojo
Te_co_rojo
Tiempo_verde
Cont verde
Temp_verde
Te co verde
de tipo de
;Incluir definiciones de
;Reserva de variables en
;Gr fica del tiempo del rojo
;Tiempo del rojo en segundos
;Temporal en segundos para el
;Temporal de la gr fica del
;Gr fica del tiempo del verde
;Tiempo del verde en segundos
;Temporal en segundos para el
;Temporal de la gr fica del
;PROYECTO TPICO 1
; '"::ECLADO MUSICAL"
;Se desea realizar un programa que genere un pitido por el zumbador
;piezoelctrico conectado a RA3, cuya dependa del valor de
;la tecla pulsada, siendo la "O" la tecla de pitido ms corto, Y la
;"F" la de pitido ms largo.
;DIRECTIVAS DEL PROGRAMA
LIST P=16F84
RADIX HEX
;ETIQUETAS DEL PROGRAMA
Se emplea el PIC 16F84
Sistema de hexadecimal
INCLUDE
"PIC16CXX.INC"
; Etiquetas gen,ricas para los
PIC 16CXX
TEMP 1 EQU
TEMP-2 EQU
DELAY 1
DELAY-2
DELAY=3
KEY VAR
OxOC
OxOD
EQU
EQU
EQU
EQU
;PROGRAMA PRINCIPAL
ORG 0
goto INICIO
ORG 5
INCLUDE "TECLADO.ASM"
INICIO bsf STATUS,RPO
clrf PORTA
bcf STATUS,RPO
bsf PORTA, 3
NO HAY call KEY SCAN
movlw Ox80
subwf TECLA, W
btfsc STATUS, Z
gato NO HAY
call KEY OFF
call KEY-HEX
movf TECLA,W
addlw OxOl
bcf PORTA,3
call DELAY V
bsf PORTA-;3
goto NO HAY
OxOE
OxOF
OxlO
Oxll
El programa comienza en la O y
; salta a la 5 para sobrepasar el
vector de
Coloca las rutinas tras el vectorde
del banco 1
Se configura la puerta A como salida
Se desactiva el zumbador
Se hace un chequeo del teclado
Sobre TECLA quedar la tecla pulsada o Ox80
No se ha pulsado ninguna tecla
S se ha pulsado. Se espera a que se suelte
; Se pasa el valor a hexadecimal
Ese valor servir para determinar la
;del beep
Se suma 1 para que el "0" no sea el de mayor
;temporizacion
Se activa el zumbador {por nivel bajo
Se desactiva el zumbador
Se vuelve a empezar
;RUTINA KEY_OFF: Esta rutina espera que la tecla reci,n pulsada sea soltada.
;Debe usarse justo despu,s de llamar a la rutina KEY SCAN
KEY_OFF movf TECLA,W
movwf TEMP 1 Guarda temporalmente la tecla
KEY_OFF NO call KEY SCAN Mira si se ha soltado
movlw Ox80
subwf TECLA,W
btfss STATUS,Z
goto KEY OFF NO Bucle mientras no se suelte
movf TEMP_l,W Ya se ha soltado
movwf TECLA Se repone la tecla
return
;RUTINA DE DELAY VARIABLE: Esta rutina realiza una que
;depende del valor del acumulador en el momento en que se le llama
ENDC
org
goto
org
Inicio
bcf
bsf
clrf
movlw
movwf
bcf
clrf
movlw
movwf
movlw
movwf
EEPROM
call
EEPROM
movlw
subwf
btfss
goto
usada
Si Nuevo movlw
movwf
movwf
movwf
movwf
movwf
movwf
movwf
con
movwf
goto
Delay_l
Delay_2
Delay_3
flag
o
Inicio
5
gie
-
rpO
trsb
b'00000001'
trisa
_rpO
portb
Oxff
porta
Ox3f
eeadr
EE Read
Oxff
eedato,w
z
No Nuevo
1
Tiempo_rojo
Tiempo_verde
Temp_rojo
Temp verde
Cont=rojo
Cont verde
Te_co_rojo
Te co verde
Start
;Variables de
;Variable de estado
;Vector del reset
inicial
;Desconecta interrupciones
p gina 1 de datos
;Puerta B como salida
;RAO entrada
p gina O de datos
;Desactiva salidas
;Selecciona posici9n de
; Lee byte de firma de la
;Determinar si ha sido usada
;La EEPROM de ha sido
;Inicia contadores de tiempo
;valores por defecto
;Inicia contadores de tiempo con valores determinados en la EEPROM
No Nuevo
EEPROM
Loop_l
tabla
EEPROM
Start
clrf eeadr
movlw 8
movwf
movlw
movwf
call
movf
movwf
incf
incf
decfsz
goto
clrf
Delay 1
Tiempo rojo
fsr -
EE Read
eedato,w
indf
fsr,f
eeadr,f
Delay_l,f
Loop 1
Delay_2
;Posicicn de inicio de la
;N de octetos a leer
;Inicio de tabla
;Lectura de un byte
;Guarda en contadores
;Siguiente contador de la
;Siguiente de
;Repite lectura
temporizaciC::n
Rojo_On
puerta B
Rojo_On_Si
Rojo_On_No
Verde On
puerta B
Verde On Si
Verde On No
Ambar On
clrf
bsf
bcf
movf
movwf
call
decfsz
goto
goto
bcf
rrf
gato
movf
movwf
movf
movwf
bsf
bcf
movf
movwf
call
decfsz
goto
goto
bcf
rrf
gato
movf
movwf
movf
movwf
clrf
bsf
bcf
call
gato
Delay_3
porta,2
porta,4
Te co rojo,w
portb-
Tiempo
Temp rojo,f
Rojo-On Si
Rojo=On=No
e
Te co rojo,f
Ro)o_()n
Cont_rojo,w
Temp rojo
Tiempo_rojo,w
Te co_rojo
porta,4
porta,3
Te co verde,w
portb-
Tiempo
Temp verde,f
verde on Si
Verde On No
e
Te co verde,f
Verde-on
Cont verde,w
Temp-verde
Tiempo verde,w
Te co verde
portb
porta,3
porta,2
Delay ls
Rojo_On
;Pone a O variables de
;Desconecta luz ambar
;Conecta luz roja
;Visualiza gr fica rojo en
;Ajustar tiempos
;Final de luz roja ??
;Se mantiene encendida
;Se apaga
;Restaurar contadores
;Desconecta luz roja
;Conecta luz verde
;Visualiza tiempo verde en
;Ajustar tiempos
;Final de luz verde ??
;Se mantiene encendida
;Se apaga
;Restaura contadores
;Desconecta puerta B
;Desconecta luz verde
;Activa luz ambar
;Temporiza 1 segundo
;Esta rutina determina la del encendido de cada luz (roja
y/o
;verde) si la entrada RAO est activada. En caso contrario realiza
una
;simple de 1 seg.
Tiempo btfsc porta, O ;Testea seoal de ajuste de
tiempos
gato Ajustar ;Hay que ajustar
No_Ajustar btfss flag, O ;Mira si hay que modificar
EEPROM
gato No cambios
;Ha habido modificaciones de contadores. day que actualiza la
EEPROM
Si cambios movlw
movwf
8
Delay_l ;N de octetos a grabar
EE_Loop
firma
realizada
No cambios
;El ajuste se
de RA1
movlw
movwf
movlw
movwf
movf
movwf
cal!
incf
incf
decfsz
goto
movlw
movwf
clrf
call
bcf
call
bsf
movlw
movwf
bcf
return
Tiempo_rojo
fsr
o
eeadr
indf,w
eedato
EE Write
fsr,f
eeadr,f
Delay_1,f
EE Loop
ox3f
eeadr
eedato
EE Write
flag, O
Delay_1s
rpO
b'00000001'
trisa
_:r.:pO
realiza para la luz roja o
;Inicio de tabla
;1: de la EEPROM
;Coloca byte a grabar
;Graba el byte
;Siguiente valor
;Siguiente EEPROM
;Repite
EEPROM para la
;Firma de EEPROM usada
;Escritura de la firma
EEPROM
;Temporiza 1 segundo
;Selecciona p gina 1
; Reconfigurar pue"rta A
;Selecciona p gina.o
1
; de
la verde dependiendo estado
;y puede ser ascendente o descendente RA2. Los
incrementv3/decrementos
;se realizan a intervalos de 1 segundo
Ajustar bsf flag, O
bsf rpO
movlw b' 00111111'
movwf trisa
entradas
bcf rpO
-
btfsc porta,1
gato Ajusta_rojo
Ajusta_verde movlw Tiempo_verde
movwf fsr
verde
gato Ajuste
Ajusta_rojo movlw Tiempo_rojo
movwf fsr
rojo
Ajuste
movf indf,w
movwf portb
btfsc porta,2
gato Ajuste_Up
Ajuste_Down
incf fsr,f
movlw 1
subwf indf,w
btfsc z
gato Si es 1
No es 1
decf indf,f
decf fsr,f
entre 1 y 8.
;Hay que modificar EEPROM
;Seleciona p gina 1
;Configura puerta A como
;Selecciona p gina O
;Testea estado de RA1
;Carga fsr con offset del
;Carga fsr con offset del
;Visualiza por Puerta B
;Incrementa o decrementa ??
;Offset de los contadores
;Es igual a 1 ?? (el mnimo)
;Decrementa contador
Si es 1
como
posible
Ajuste_Up
No es 8
Si es 8
como
posible
Fin
rojo
verde
Delay_ls
Loop
;Graba un
EE Write
escritura
byte
bcf
rrf
goto
movlw
movwf
decf
movwf
goto
incf
movlw
subwf
btfsc
goto
incf
decf
bsf
rlf
goto
movlw
movwf
decf
movlw
movwf
call
movf
movwf
movf
movwf
movf
movwf
movf
movwf
goto
movlw
movwf
decfsz
gota
decfsz
gota
decfsz
gota
return
e
Indf,f
Fin
1
indf
fsr, f
indf
Fin
fsr, f
9
indf,w
z
Si es 8
indf, I
fsr,f
e
Indf,f
Fin
8
indf
fsr,f
Oxff
indf
Delay ls
Tiempo rojo,w
Te co rojo
Cont rojo,w
Temp=rojo
Tiempo verde,w
Te co verde
Cont verde,w
Temp=verde
Tiempo
Ox05
Delay 1
Delay-3,f
Loop -
Delay 2,f
Loop -
Delay l,f
Loop -
en la EEPROM
bsf rpO
bsf wren
movlw b'01010101'
movwf eecon2
movlw b'10101010'
movwf eecon2
bsf wr
bcf wren
;Ajusta la gr fica
;Se ajusta tanto los segundos
;la gr fica al mnimo valor
;0000 0001
;Offset de los contadores
;Es mayor de 8 ?? (el m ximo)
;Incrementa contador
;Ajusta la gr fica
;se ajudta tanto los segundos
;la gr fica al m ximo valor
; 1111 1111
;Ajusta contadores
;Reponer tiempo de encendido
;Reponer tiempo de encendido
;Selecciona banco 1
;Permiso de escritura
;Orden de escritura
;Desconecta permiso de
Wait
escritura
escritura
;Leer un byte
EE Read
btfss eeif
goto Wait
bcf eeif
bcf rpO
-
return
de la EEPROM
bsf _rpO
bsf rd
bcf :=rpO
return
end
;Testear flag de fin de
;Reponer flag de fin de
banco O
de banco 1
;Orden de lectura
de banco O
. .
;--------------------------------------------------------------------
HOLA.ASM
; Autor: Mikel Etxebarria
; (e) Microsystems Engineering
;--------------------------------------------------------------------
; Rutinas de de mensajes en LCD
--------------------------------------------------------------------
,
------
STATUS equ Ox03 ;Registro de estado
TRISA equ Ox05 ;Registro de de la
puerta A
RA equ Ox05 ;Puerta A
TRISB equ Ox06 ;Registro de de
puerta B
RB equ Ox06 ;Puerta B
INTCON equ OxOb ;Registro control de
interrupciones
DATO A equ OxOc ;Variable de
DATO-B
equ OxOd ;Variable de
list p=16c84 ;Tipo de procesador
;El conjunto de rutinas que se presentan a permiten
realizar
;las tareas b sicas de control del de LCD
org
goto
org
o
UP LCD
5
;Vector de RESET
la
;--------------------------------------------------------------------
;LCD BUSY: Lectura del Flag busy &
LCD BUSY bsf RA, 1 ;Pone el LCD en modo lectura
bsf STATUS, S
;Selecciona el banco 1
movlw Oxff
movwf TRISB
;Puerta B como entrada
bcf STATUS, S ;Selecciona el banco O
bsf RA,2
;Activa el LCD
nop
L BUSY
btfsc RB,7
;Chequea bit de Bus y
goto L BUSY
bcf RA, 2
;Desactiva LCD
bsf STATUS, S
;Selecciona banco 1
clrf TRISB
;Puerta B salida
bcf STATUS, S
;Selecciona el banco o
bcf RA, 1
;Pone LCD en modo WR
return
;--------------------------------------------------------------------
;LCD E: Pulso de Enable
LCD E
bsf
nop
bcf
return
RA, 2
RA, 2
;Activa senal E
;Espera 1 uS
;Desactiva senal E
;--------------------------------------------------------------------
;LCD DATO: Escritura de datos en DDRAM o CGRAM
;
LCD DATOS bcf RA, O ;Desactiva RS (modo comando)
movwf RB ;Valor ASCII a sacar por RB
call LCD BUSY ;Espera a que se libere el
LCD
bsf RA, O ;Activa RS (modo dato).
goto LCD E ;Genera pulso en la seoal E
--------------------------------------------------------------------
,
;LCD_REG: Escritura de comandos en el LCD
LCD REG bcf RA, O ;Desactiva RS (modo comando)
movwf RB ;Saca el de la
call LCD BUSY ;Espera se libere el LCD
goto LCD E ;Genera pulso en la seoal E
;--------------------------------------------------------------------
;LCD_ INI: del LCD
LCD INI movlw b'00111000' ;Caracteres 5-7,datos de 8
bits.
call LCD REG de
call DELAY SMS ;Sms. de
Fabricante)
movlw b
1
00111000
1
call LCD REG ;C<:digo de
call DELAY SMS ;Sms. (Especificaci<:n de
Fabricante)
movlw b'00111000
1
call LCD REG de
call DELAY SMS ;Sms. (Especificaci<:n de
Fabricante)
return
;--------------------------------------------------------------------
;DELAY SMS: Genera una temporizaci<:n de 5 ms
-
DE LAY 5MS movlw Ox1a
movwf DATO B ;Carga la variable DATO B
clrf DATO A ;Carga la variable DATO-A
DE LAY 1 decfsz DATO=A, 1 ;Decrementa la variable
DATO A
goto DELAY 1
decfsz
DATO B
DATO_B,1
;Decrementa la variable
goto DELAY 1
return
;--------------------------------------------------------------------
;UP LCD: PIC para el LCD.
UP LCD
bsf STATUS, S
;Banco 1
clrf TRISB
;Puerta B salida
clrf TRISA
;Puerta A salida
bcf STATUS, S
;Banco o
clrf INTCON
;Desactivar interrupciones.
bcf RA,O
;RS=O
bcf RA,2 ;E=O Desactiva LCD
call LCD INI ;Inicia el m<:dulo LCD
<'
movlw b' 00001100'
call LCD REG ;LCD On y Cursor Off
movlw b'OOOOOOOl'
call LCD REG ;Borra display
movlw 'H'
call LCD DATOS ;Visualiza letra H
movlw 'o'
call LCD DATOS ;Visualiza letra o
movlw '1'
call LCD DATOS ;Visualiza letra 1
movlw 'a'
call LCD DATOS ;Visualiza letra a
gota $
end
-;
;PROYECTO TOPICO 3
;"ESCRITURA DE MENSAJES DE TECLADO SOBRE LCD"
;Se desea realizar un programa que visualice sobre el LCD las teclas
;que se vayan pulsando. Cada pulsaci9n ir acompaaada de un "beep" de
;0,25 segundos sobre el zumbador piezoel,ctrico conectado a RA3
;DIRECTIVAS DEL PROGRAMA
LIST
RADIX
P=16F84 ; Se emplea el PIC 16F84
HEX ; Sistema de numeraci9n hexadecimal
;ETIQUETAS DEL PROGRAMA
INCLUDE
TEMP 1
DELAY 1
DELAY-2
DELAY-3
LCD VAR
KEY-VAR
"PIC16CXX.INC"
EQU OxOC
EQU OxOD
EQU OxOE
EQU OxOF
EQU Ox10
EQU Ox12
;POSICIONAMIENTO DE LA RUTINA DE INICIO
ORG
goto
ORG
o
INICIO
5
El programa comienza en la direcci9n O y
salta a la direcci9n S para sobrepasar el
vector de interrupci9n
;RUTINA HEX ASCII: Rutina que pasa el valor HEXADECIMAL que contiene
;W a valor ASCII, para ser mostrado por el LCD
HEX ASCII addwf PCL, 1
retlw 1 o'
retlw
1 1'
retlw '2'
retlw
3'
retlw
14.
retlw
1 5'
retlw
6'
retlw '7'
retlw
18.
retlw
1 9'
retlw 'A'
retlw 'B'
retlw 'C'
retlw 'D'
retlw 'E'
retlw 'F'
;PROGRAMA PRINCIPAL
INCLUDE "LCD CXX.ASM"
INCLUDE "TECLADO.ASM"
INICIO call UP LCD
call LCD INI
call DISPLAY ON CUR OFF
bsf STATUS,RPO-
clrf PORTA
movlw b'l0000111'
movwf OPTION REG
bcf STATUS,RPO
; Selecci9n del bancG 1
Puerta A como salida
bsf
NO HAY
movlw
subwf
ASCII
btfsc
goto
call
bcf
movlw
movwf
call
bsf
call
call
movwf
call
call
call
movlw
call
movf
call
goto
PORTA,3
call KEY SCAN
Ox80
TECLA,W
STATUS,Z
NO HAY
del zumbador
; Se hace un chequeo del teclado
Sobre TECLA quedar la tecla pulsada o
;0*80
; No
se ha pulsado ninguna tecla
KEY OFF ; S se ha pulsado. Se espera a que se suelte
PORTA, 3
d'25'
TEMP 1
DELAYlO
PORTA, 3
KEY HEX
HEX-ASCII
TECLA
UP LCD
BORRA Y HOME
DISPLAY-ON CUR
oxal-
Lcn REG
TECLA,W
LCD DATO
NO HAY
OFF
Se genera un "beep"
Se
crea una de
25 ms
Se desactiva zumbador
; Se pasa a valor hexadecimal
Se
pasa el valor hexadecimal
a
Se guarda temporalmente en TECLA
; Primer car cter de primera lnea
Se saca por el LCD
Se vuelve a empezar
;RUTINA DE DELAY DE 10 MS: Esta rutina utiliza el TMRO.
;Es una temporizaci9n de 10 ms que se repite tantas veces
;como indique la variable TEMP01
DELAY10 bcf INTCON,2 Borra flag del TMRO
movlw OxD8
movwf TMRO ; Carga el TMRO con valor 39
DELAY10 1 btfss INTCON,2 ; Espera rebosamiento del TMRO
goto DELAYlO 1
decfsz TEMP
goto DELAYlO
return
;RUTINA DE DELAY DE 1 SEGUNDO: Se basa en la rutina de 10ms,
repiti,ndola 100 veces
DELAY1S movlw
movwf
call
return
Ox64
TEMP 1
DELAY10
;RUTINA KEY_OFF: Esta rutina espera que la tecla reci,n pulsada sea
soltada.
;Debe usarse justo despu,s de llamar a la rutina KEY SCAN
KEY OFF movf TECLA,W
movwf TEMP 1 ; Guarda temporalmente la tecla
KEY OFF NO call KEY SCAN Mira si se ha soltado
movlw Ox80
subwf TECLA,W
btfss STATUS,Z
goto KEY OFF NO Bucle mientras no se suelte
movf TEMP_l,W ; Ya se ha soltado
movwf
return
TECLA ; Se repone la tecla
;RUTINA DE DELAY VARIABLE: Esta rutina realiza una temporizaci9n que
;depende del valor del acumulador en el momento en que se le llama
DELAY V movwf
clrf
clrf
DELAY LOOP decfsz
goto
decfsz
goto
decfsz
goto
return
END
DELAY 1
DELAY-3
DELAY-2
DELAY::),F
DELAY LOOP
DELAY::::2,F
DELAY LOOP
DELAY::::l,F
DELAY LOOP
V
))J/J
,
.
; PRESENTA. ASM
Autor: Mi k el Etxebarria
; -------------------------------------------------------------------------
El programa que se presenta a consiste en sacar un:Js
mensajes
; de presentaci<:n del sistema de evaluacin Micro' PIC Trainer por el m<:dulo
; LCD de visuallzaci<:n
; --------------------------------------------------------------------------
TI MERO
OPCJON
PCL
PCLft.TH
STATUS
RA
RB
TRISA
TRISB
INTCON
DATO A
DATO-B
RESoL
TEMPOl
TEMP02
OFFSET
INICIO
DATOS
list
list c-132
equ 01
equ Oxl
equ Ox2
equ Oxa
egu 03
equ 05
equ 06
equ Ox5
equ Ox6
equ Oxb
equ Oxc
equ Oxd
equ Oxe
equ Oxf
equ OxlO
equ Oxll
org O
goto INICIO
org 5
bsf STATUS, 5
clrf TRISB
movlw b'OOOllOOO'
movwf TRISA
movlw b '10000111'
movwf OPCION
bcf STATUS, S
movlw b '00000000'
movwf INTCON
bcf RA,O
bcf RA,2
goto START
addwf PCL, 1
retlw '*'
retlw +
retlw '
.
retlw 'P'
retlw 'R'
retlw 'E'
retlw 'S'
retlw
1
E'
retlw 'N'
retlw 'T'
retlw 'A'
retliN
retlw
retlw '+
1
:
; Procesador PIC16c84
;Listado a 132 caracteres
; Registro del TI MERO
; Registro de opciones, p gina 1
; Registro PC
;Registro alto del PC
; RegL:::tro de estado
; Puerta A
; Puerta B
; Reg. de programaci C:n de la puerta A, p
;Reg. de programaci<:n de la puerta S, p
;Registro de control de interrupciones
; Registro del dato A
; Registro del dato B
; Registro de resultados
; Registro temporal 1
; Registro temporal 2
;Variable de desplazamientos de mensajes
; Vector de RESET
Selecciona el banco 1 de datos
RB se programa como salida
RA<4: 3> se programan como entradas
RA.<2: O> se programan como salidas
;Asigna preescaler al TMRO
;Selecciona el banco O de datos
Desactiva interrupciones
Desactiva RS del mtdulo LCD
Desactiva E del m<dulo LCD
;OFFSET - O
gina 1
gina 1
retlw OxO
retlw '"
1
;OFFSET Oxf
retlw Oxe4
retlw 'P'
retlw '!'
retlw 'C'
retlw
1 .
retlw 'T'
retlw 'r'
4
retlw 'a'
retlw 'i'
retlw 'n'
retlw 'e'
.retlw 'r
retlw
retlw O
retlw 'E' ;OFFSET Oxle
retlw 'n'
retlw 't'
retlw 'r'
retlw 'e'
retlw 'n'
retlw 'a'
retlw 'd'
retlw 'o'
retiw 'r'
retlw '
.
retlw 'p'
retlw 'a'
retlw 'r'
retlw 'a'
retlw O
retlw
1
P' ;OFFSET Ox2e
retlw 'I'
retlw 'C'
retlw '
.
retlw '1'
ret.lw '6'
retlw 'e'
retlw '7'
retlw 'x'
retlw '/'
retlw 'e'
retlw '8'
retlw '4'
retlw O
retlw 'C' ;OFFSET Ox3c
retlw o
reel.w 'N'
retlw 'S'
retlw 'T'
retlw 'A'
retlw
1 .
retlw 'D'
retlw 'E'
retiw
retlw O
retlw 'F' ;OFFSET Ox47
retlw '.
.
retlw
1 .
retlw 'A'
retiw '1'
retlw 'i'
retlw m
. -= ,- ...... (
-s;.c'
:---..,..
'
O!'
F
.retlw 'e'
retlw 'n'
retlw '1' ;OFFSET OxBe
retlw 'o'
retlw 't'
retlw 'a'
retlw '9'
retlw 'i
retlw
retlw 'e'
retlw 'i'
retlw a
retlw 'o'
retlw 's'
retlw 'n'
retlw O
retlw O
retlw 'M' ; OFFSET Ox57
-.
re"flw '9'
)
;OFFSET Ox96
1 retlw 'o'
retlw '
:
retlw 'd'
retlw s
retlw a
retlw 'u
retlw 'l'
retlw '1'
retlw 'i
retlw 'o'
retlw ct
1
retlw '
ret!w 'G'
retlw 'a'
rBtlw 'r'
retlw 'a'
retlw 'a'
retlw
retlw 'b'
retlw 'a'
retlw 'a'
retlw
retlw 'd'
retiw 'L'
1
retlw 'o'
ret!w 'E'
retlw 'D'
1
retlw 'r'
1
retlw O
retlw 'a'
retlw O
retlw '5' ;OFFSET Ox67
retlw 'y' ;OFFSET OxA7
retlw ' ' retlw '
retlw 'E' retlw a
retlw 'n' retlw
.
retlw t' retlw 'D'
retlw 'r'
retlw. '1'
retlw 'a' retlw a'
retlw 'd
1
retlw p
retlw 'a' retlw '1'
retlw 'a' retlw a
retlw '
.
retlw y
retlw 'd' retlw O
ret!w 'i'
retlw 'g' .retlw
O!'FSET Oxb3
retlw 'i'
retlw '""'
retlw '-' retlw '
.
retlw O
retlw 'P'
retlw 'R'
retlw 't' OF!'SET Ox 7 8
retlw 'U'
retlw 'a' ... 'E'
ret!w 'l'
retlw 'B'
retlw 'e'
retlw 'A'
retlw 's'
retlw 'L'
retlw O
retlw '0'
...&Qtlw "
retlw '4' OFFSET Ox7e
retlw '"*''
retlw '
.
retlw '*'
retlw 'E'
retlw O
retlw 'n'
-
retlw 't'
retlw 'r'
DATO_l addwf PCL, 1
retlw 'a'
retlw
retlw 'd'
retlw '1'
retlw 'e'
retL; 'a'
retlw 'r'
retl"' 's' retlw 'o'
reth; '
retlw 'S'
reth.; 'a'
retlw 'y'
reth; 'n'
retlw 's'
retl;... 'a'
retlw 't'
retlw '-' retlw 'e'
retlw O retlw 'm'
retlw 's'
..
1
.)
DAT0_2
!"tlw ' '
retlw
retlw
retlw OxO
add\.!f PCL, 1
retlw 'E'
retlw 'n'
retlw 'g'
retlw 'i'
retlw 'n'
retlw 'e'
retlw 'e'
retlw 'r'
.retlw 'i'
retlw 'n'
retlw 'g'
retlw OxO
; LCD BUSY Chequea el estado del flag Busy del LCD y espera a que finalice
; cualquier comando previo antes de retornar
LCD BUSY bsf RA, 1
- bsf STATUS, 5
movlw Oxff
movwf TRISB
bcf STATUS, 5
bsf RA,2
L_BUSY
nop
btfsc RB, 7
goto L BUSY
bcf
bsf STATUS, 5
clrf TRISB
bcf STATUS,5
bcf RA,1
return
;Pone el LCD en modo RO
; Selecciona el banco 1
; Puerta B es entrada
; Selecciona el banco O
; Activa el LCD (E)
; Chequea el bit busy
; Desactiva el LCD (E)
;Selecciona el banco 1
; Puerta B salida
;Selecciona el banco C
;Pone el LCD en modo WR
;LCE_E Genera un pulso en la E de 1 uS de duraciCn. Esto es posible
;gracias a la NOP y a que el PIC trabaja a 4MHz. Para velocidades
superiores
;habr que insertar alguna NOP adicional para no rebasar la rnnirna
;del LCD
LCD_E bsf RA,2
nop
bcf RA,2
return
Activa E
pausa
Desactiva E
; LCD DATO Deposita el ASCII presente en W, sobre RB. Espera que el
;LCD-ejecute la tltima operaci<:n y genera el pulso E.
LCD DATOS be! RA, O
- movwf RB
call LCD BUSY
bsf RA, 0-
goto LCD_E
Desactiva RS (modo comando)
Valor ASCII a sacar por RB
Espera que se libere el I..CD
Activa RS (modo dato)
Genera pulso en seaal E
;LCD_REG Deposita el cCdigo del comando presente en W, sobre RB. Espera que
;el LCD ejecute la tltima operacin y genera el pulso E.
LCD_REG bcf RA,O
movwf RB
call LCD BUSY
goto LCD-E
Desactiva RS comando)
C<!:digo del comando
Espera que se libere el LCD
Genera pulso en seaal E
;LCD !NI Realiza la nicializaci<:n del LCO segEn los tiempos marcados por
el -
;fabricante. Se inicia con un interface de 8 bits, 2"lneas de visualizaci(:
n,
;y caracteres de 5 + 7. Se temporiza 15 mS.
LCD_INI movlw b'00111000'
call LCD REG
call DELAY SMS
movlw b'00l11000'
call LCD REG
call DELAY SMS
movlw b'OOlllOOO'
call LCD REG
call DErAY _ 5MS
return
;DELAY_SMS genera una de SmS necesario para la secuencia de
;inicio del LCD
DELAY_SMS
DELAY_1
movlw Oxla
movwf DATO B
clrf DATO A
decf sz DATO A, 1
goto DELAY_l
decf sz DATO B, 1
9oto DELAY_l
return
;DELAYlO genera;' con ayuda del TMRO y el preescaler, una ternporizaci<:n de
;10 ms que se repite tantas veces como indique la variable TEMPOl
DELAYlO bcf IN'l'CON,2
movlw Oxd6
movwf TIMERO
; Borra flag del TMRO
DELAYlO 1 btfss IN'l'CON,2
; Carga TMRO para que cuente 39
;Espera overflow del TMRO
- . goto bELAYlO_l
decf sz TEMP01, 1
goto DELAYlO
return
; Repite 10 veces
; DELAYlS temporiza 1 segundo
DELAY1S movlw Ox64 ;Repite la rutina DELAYlO (de 10 mS) 100
movwf TEMPOl ;veces
call DELAYlO
return
;BLINK mant:lene "el LCD activado durante 2 seg. y a continuacHn genera
;una intermitencia de 6 veces del encendido y apagado del LCD, de 1/4
segundo
;cada una
BLINK
BLINK_1
movlw Oxc6
movwf'J'EMP01
call DELAYlO ;Temporiza 2 segundos con el mensaje
movlw 6
rilovwf "TEMP02 ; 6 veces de inte.rmi tencia
movlw b'00001000'
call LCD REG ; Apaga LCD
movlw 25-
movwf TEMPOl
call DELAYlO ; Temporiza 1/2 segundo
movlw b'OOOOllOO'
call LCD REG ; Enciende LCD
movlw 25-
movwf TEMP01
call DELAYlO ; Temporiza 1/2 segundo
- decf sz 'l'EMP02, 1
goto BLINK_1
return
MENS 1
ME:NS::.l_l
MENS 2
MENs:2_1
MENS
MENSl
START
START_l
clrf RE:SUL
movf RE:SUL, O
call DATO 1
iorlw O -
btfsc STATUS, 2
return
call LCD DATOS
incf RESL, 1
movlw 10
movwf TEMPOl
call DELAYlO
movlw b'OOOllOOO'
call LCD REG
qoto MENS_l_1
clrf RE:SUL
movf RESUL, O
call DATO 2
iorlw O -
btfsc STATUS, 2
return
call LCD DATOS
incf RESL, 1
movlw 10
movwf TEMPOl
call DELAYlO
goto MENS_2_1
clrf RESUL
movf OFFSET, O
addwf RESUL, O
call DATOS
iorlw O
btfsc STATUS, 2
return
call LCD DATOS
incf RE:SL,l
movlw 10
movwf TEMP01
call DELAYlO
goto MENSl
call LCO IN!
movlw b'00000001'
call LCD REG
movlw b'OOOOOllO'
call LCO REG
; Inicia contador de caracteres
; Saca caracter
; .. Es el E.ltlmo?
;Si
;Visualiza caracter
; Incrementa contador de caracteres
;Temporiza lOOmS
;Desplazamiento a la izda.
; Inicia contador de caracteres
;Coge el caracter
""Es el tltimo?
Si
Visualiza caracter
Incrementa contador de caracteres
; Temporiza 100mS
; Inicia contador de caracteres
; Coge el desplazamiento
J Coge el caracter
Es el tltimo?
Si
Visualiza caracter
Incrementa contador de caracteres
;Temporiza lOOmS
;Inicia LCO
;Borrar LCD y Horne
movlw b'00001100' ;LCD On, cursor Off
call LCO REG
movlw OxSf ;Direcci.e:n f.ltimo caracter 11 linea
call LCO REG
call MENS l ;Mensaje "MlcroSystems"
movlw Oxd4 ; Direcci<:n 2: 1 nea
call LCO REG
call MENS 2 ;Mensaje "Engenering"
call BLINK ; Intermitencia
movlw b'00000001'
call LCO REG ; Borra LCD y Horne
call DELAYlS ;Temporiza 1 seg.
movlw Ox81
call LCD REG Posici<:n 1 l fila
clrf OFFSET
call MENS ;Mensaje "'*,. PRESENTA **"
call DELAYlS ;Temporiza 1 seg.
1
movlw Oxcl
call LCD REG
movlw OxOf
;Posici<:n 2: fila
movwf OFfSET
call MEN5
call DELAYlS
movlw b'00000001'
call LCD REG
call DELAYlS
movlw Oxle
movwf OFFSET
call MENS
movlw OxcO
call LCD REG
movlw Ox2e
movwf OFFSET
cal! MENS
call DELAYlS
movlw b'OOOOOOOl'
cal! LCD REG
cal! DELAYlS
movlw Ox3c
movwf OFFSET
movlw Ox83
cal! LCD REG
call MENS
cal! BLINK
rnovlw b'00000001'
call LCD REG
call DELAYlS
movlw Ox47
movwf OfFSET
call MENS
movlw OxcO
call LCD REG
call DELAY1S
movlw Ox57
movwf OFFSET
call MENS
cal! DELAYlS
movlw b'00000001'
call LCD RE.G
call DELAYlS
movlw Ox67
movwf OFFSET
call MENS
movlw OxcO
call LCD REG
movlw Ox78
movwf OFFSET
call MENS
call OELAYlS
movlw b' 00000001'
call LCD REG
call DELAYlS
movlw Ox7e
movwf OFFSET
call MENS
movlw OxcO
call LCD REG
movlw oxBe
mrvwf OFFSET
call MENS
ca ll OELAYlS
movlw b'00000001'
call LCD REG
call OELAYlS
movlw Ox96
movwf OFFSET
call MENS
movlw OxcO
call LCD __REG
;Mensaje "PIC Trainer"
;Temporiza 1 seg.
;Borra LCD y Heme
;Temporiza 1 seg.
;Mensaje "Entrenador para"
; Posicic!:n 2: fila
;Mensaje "PIC 16c7x(84"
;Temporiza 1 seg.
; Borra LCD y heme
;Temporiza 1 seg.
Poslcic!:n 1l linea
Mensaje "CONSTA DE:
Parpadeo
; Borra LCD y heme
; temporiza 1 seg.
;Mensaje "F. Alimentacion'
2: linea
;Temporiza 1 seg.
;Mensaje "Modulo grabador"
;Delay 1 seg
; Borra LeO y Heme
; Temporiza 1 seq
;Mensaje "5 entradas digi-"
; Posicic!:n 21 linea
;Mensaje "tales"
;Temporizacic!:n de 1 seg.
; Borra LCD y heme
;Temporiza 1 seg.
;Mensaje "4 Entradas ana-"
;Poslci<:n 2: linea
;Mensaje
; Temporiza 1 SE!9
;Borra LCD y Home
;Temporiza 1 seg
;Mensaje "8 Salidas a ,LED"
; Posici<:n 2: linea
)
"'
mov lw Oxa7
ITLOV\if OE'E'SET
call HENS
call DELAY!S
movh.; b' 00000001'
call LCD REG
call DELAYlS
movlw Ox81
call LCD REG
movlw Oxb3
movwf OFFSET
call ~ l E N S
call BLINK
call DELAYlS
goto START_l
END
Mensaje "y a Display"
;Temporiza 1 seg.
; Borra LCD v home
;Temporiza i seg.
; PosiciCn 1: linea
Salida de " PRUEBALO "
Parpadeo
Temporiza 1 seg.
~
1 ;-------------------------------------------------------------------------
2 ; CLAVE .Amri
;. Aut.or: Mi kAl F.t.xAhRrri;,
4 (e) Micaosystens Engineel-ing
5 ;-------------------------------------------------------------------------
6 ;.
7 ;El programa de car cter did ctico que se presenta a pretende
8 ;emular un sistema de contol de acceso.
9 ;
iO ;Mediante un teclado matricial de 16 teclas conectado a la puerta 8, el usua-
11 ;rio pulsa lu teclu A da uparturu, a introduce una cluve de- 4 dlgitos. Si as
12 :correcta se activa un rell conectado a la linea RA4 durante un sequndo, si-
lJ ;mulando la ap.:.rtura cl.:. una pu.:.rta. 3.:. dan tres oportunidad.:.s para-introducir
14 ;la. cla.ve correcta .. Ca.da. pulsa.cir:-n va. precedida. de un beep genera.do por el
15 ; Lar.lu RA3.
16 ;
17 ;La tecla C permite realizar el cambio de clave pidiendo una nueva y la
18 ;correspondiente
19 ,
20 ;La pantalla LCD conectada tamhi!n a la. B ir presentando los oportu-
1 :nos mensaJes.
22 ;
23 ;En la memoria EEPROM de datos disponible en los dispositivos 16C84 quedar
24 dE! forina per1uanente, la actual.
25
26
27
28
29
30
-::>1
.., ..
32
::14
35
36
37
38
39
10
41
42
43
..
..,..,
45
46
47
48
49
50
51
:::,
"'"'
_,__,
54
,..,..
:::r.J
56
57
58
59
50
61
e-,
W<..
63
e
U"%
h"i
66
67
68
69
70
71
72
..,,
'_,
74
..,,..
1 J
76
77
78
79
80
81
82
tabla
M.::.ne:
------
1
}.fens
1 1
list p=16c84
chlcck Ox11
ende
digito_l
dig;i.to_Z
digito_3
rli giT.o_4
di_teli:l_l
d.i_to?m_2
di_tem_3
di tem_4
cont_crr
cont_tecla
temp_l
temp_Z
Delay_l
Delay_2
include "16cxx.h"
org u
gota
T-..:-...:-
.LU.L ...... .LU
org
,..
;)
movwf pcl
Ql"fll
$ ... -
retlw
' ( '
retlv-1
,
retlw
;
)
;
retlv;
retlw 'A'
---, -
,_,
J.t::r.....LYY p
n::ot.lw
r-etlw-
1 l-.1
1 t t
retlw 'u'
retlT."'!
r
retlw 'a'
01tOO
equ
,...
..,
retlw
1
( '
retlvt
,,.,,
,_
retlw
'
)
1
retlw 'C'
retlw 'a'
retlv-1 'm'
retlw 'b'
retlw 'i '
;Tipo de procesador
;Temporales para los d!gitos
;Contador de falloc
;Contador de teclas pulsadas
;Variables temporales
:Vector de lillClO
;Desplazamiento sobre la tabla
"
165
rr
.LUU
1'
168
169
170
171
172
173
174
1'7<:
.Lf.j
176
. ..,..,
.L 1 1
178
179
180
181
182
183
1QA
.._u-.
1 oc.
.J. UU
187
188
189
190
191
192
193
194
101:
... _,,_,
196
1n..,
1qR
nn
.L':'':>
200
201
202
203
201
25
..,nc
.:..vv
207
,..,,.,,.,
o<. UU
209
210
211
212
213
214
215
nb
..,,..,
<...Lt
218
,..,.,..
o<..L';;J
220
221
222
223
224
225
-,-,,;:_
227
<.o<. U
7?q
230
231
232
233
234
235
;
Key_on
Key_Off_No
retlw
r.:.tlw
rP.t.lw
r&tlw
Tl:'tlw
retlw
retlw
retlw
rctlw
retlw
retlw
retlw
include
movf
mo ....rwf
bcf
movlw
C<!.ll
bsf
call
movlw
subwf
btfss
soto
movf
; mb-v-wf
rP.T.urn
'S'
1" 1
.V.'
'D'
'E'
'N'
E
'G'
1 1
'D'
......
V
OxOO
"teclado.h"
ulr.;rl.hn
.Num_tecla.w
temp_l
1
porta.3
TECLA.DO
Ox80
Num_tecla,w
z
Key_Off_:Jo
temp_l.w
;Guarda temporalmente la tecla
;.Activa :zun1bador beep
;Beep urr
;Se ha soltado la tecla ?
;Toda.via. no
;Ahora si
;Repon:e la tecla Pulsada
;-------------------------------------------------------------------------
;Dela:v: Esta rutina realiza una temporizacit;n que depende del "".ralor del
;acumulador en el momento en que se le llama.
;
Del ay
Delu.y_loop
movwf
decfsz
qoto
so t. o
goto
return
Delav 1
Dal.Y=3 ... f
Delay_loop
Delay-_2,f
Delay_loop
Dela.y_loop
-------------------------------------------------------------------------
;Mensaje: Esta rutina saca al LCD al mensaje cuyo inicie est indicado an
;el acumulador
Mensaje
1-..fensaj!_1
movwf
l\10\i[
ca.ll
movwf
Inovf
btfss
seto
return
incf
goto
temp_l
telnp_l,w
tB . .blo.
temp_2
temp_2,f
_z
C.lc_es_ul timo
LCD_DATO
temp_l.f
tvfensaje_l
;Salva posici?n de la ta.bla
;Recuper-a posici<:rl de la tabla
;Busca caractl!>r di!> salida
;Guarda el caracter
;Mira si es el Eltimo
;Siguiente caracter
;Repite con siguiente caracter
;Control: Espr::rra gnr? SE- t-?r:lr?J?n los t:l!E'.tro digitos dJ? los alnlc5.-
;cena en digito_l .. digito_4 y visualiza---- en LCD. La tecla C permite
;ca.nc.ela.r
236 Control
movlw 4
'l?7
'-'"''
238
2J9
240
241
242
243
244
245
246
.............. ..., .... ,c-
lllUV'IVl.
movlw
illO-\iYyf
call
ntuvlw
btfsc
r"'''r""'i'-r""'
v ......
call
movlw
cont_taclu.
digito_1
fsr
TECLADO
Ox80
1:-Ium_tecla,w
_z
h.l +-o,-1 ..... _ .... __ .._ .....
JP_LC
;Iniciu contudcr de pulsuciones
;Apunta al inic1o del buffer de tecla
;Explora. el tecl.:>do
;Hay alguna pulsada 7
;NO
;Reconfigura el LCD
247
250
251
252
253
254 Es_Can
255
256
257 }Jo_as_Cu.n
258
260
261
262
263
264
call
call
movlw
btfsr:
goto
sote
bsf
rcturn
bcf
movf
movovf
incf
dt:1(.;fo:L
goto
return
LCD_DATO
TF.-- Arf'"
.r.,c::=y_VJ..L
nxnr.
'7
--
Es_Can
No_es_Can
-cemp_l,l
temp_l,l
Num_tecla,w
indf
fsr,f
r..:ouL_Lt!L:ld.,..f
N_ tecla
;Visua11za e! -
y
;Activa Flag de
;Desuctivu Flug de
;Alma..::ena la tecla e11 el bufft#r
;Siguiente di!l buffer
t::! Lt::!t;la
;Repite el proceso
265 ;--------------------------------------------------------------------------
266 ;Okey: CompruGba si la clave introducida an buffer coincide con la de
Lb'! ;la caso af1rmat1vo el flag carry se pone a "U". de lo contra-
268 ;r1o a "1
11
269
270 Okey
271
272
273
274
275
276 Okey 1
277
278
7Rn
<:Oi
282
283
284
285
286
287
288
hcf
movlw
movwf
movwf
clrf
call
movf
andlw
te1up_l,O
4
cont_tecla
digito_l
fsr
eeadr
EE Read
OxOf
subwf itidf ,vv
ht.fss 7.
bsf tentp_l.,O
in'="f f
incf fsr,f
decfsz ccnt_tecla,f
gota Okey_l
rcturn
;Borra flag de error
;Ntmero de bytes a comprobar
;Primer di:ito
;Primera de la EEPROM
;Lee byte de la EEPROM
;Lo compara con el del buffer
;Miri'l R AR igni'll
;NO, activa. flag de errr
;Sicruiente de la EEPROM
;Siguiente dgito
;Repite la
289 ;-------------------------------------------------------------------------
290 Lt:a un ty-ta de la EEPROlTf
291
292 EE_Rt!ctt.l bof
bsf
bcf
return
1
;Orden de lectura
;SelecciGn banco O
293
294
295
296
297
;-------------------------------------------------------------------------
Graba un byte en la
299 ;
300 EE_Write
'"'"' ,;)Vi
302
303
304
305
306
37
-:>no
_,._,._,
309
310
:i 11
....
.JJ..C::
313
'#a.i t
314 Inicio
315
316
317
318
?1r>
.., .. _,
320
.......
JLi
322
323
324
325
326
327
bsf
_ r
v::;r
movwf
bsf
bcf
goto
_rpO
_w-:cen
Ox55
eecon2
Oxa:c.
eecon2
wren
_aeif
Wait
1--- C' ----.; r-
1 . .H .... .!.. l.
hc:f _rpn
retuTn
call
call
P_LCD
LCD IN!
;Selecciona banco 1
;Pe1111iso de escritur-a
;Secuencia Microchip
;Orden de escritura
;Evita posteriores escrituras
final de byte grabado
;Reponer flag de final
;S:AlAC:Ci(.n hi'lllCO 0
;Inicia.lize. LCD
C'O.ll DISPLAY_N CUR_OFF
movlw
....... _ .,..J:>
.UlloJVV'IJ.
-, --,....
"-.l. .l i
Gi'!ll
HtUV.l.t,Jr}
btfss
b'll'
- - - _, __
t::t::::Cl.L.!.L
EE_Read
Oxff
eedato,-vo:r
_z
Si usa.da
;Desconecta rell y zumbudor
;.Posici?n EEPROly1 de la
;Lee byte de EEPROM
;Mira si est usada
r-.: ------
l.L.iULO.
328 ;Carga en la EEPROM la. cl.:J.ve 1234 por defecto
329
"'"\"""l. O
33?
311 N'o_.1sada_!
334
3.3.5
33'6
':1':17
.
33&
331J.
34:0
J41
34Z
34.3:
344
34:5
34.6
347
::l4Y
35IJ
351
,., ... ..,
.:l:::tL
353
354
355
JS& No:_es_A
357
358
360
351 Si_es_C
%7
'363
364
365
366
367
358
369
_,,...,
371
..,..,..,
.JI<.
3T3
374
375
37ii
377
378
379
382
383
384
385
386
387
388
389
394
396
397
398
399
400
A 111
.........
402
.,.. ....
>tU.J
404
405
406
407
408
49
410
mnv1w
movwf
int:f
ca:ll
incf
dec:sz
g:ot.o
movlw
<::all
movlw
muvb
c:all
ca.ll
:movlw
su.bwf
btfsc
s-oto
call
IDOVlW
::mbwf
btfsc
g-oto
movlw
btfss
ca11
11
.m.ovl.w
r::-all
movlw
call
m:ovlw
ca.ll
call
btfsc
g-ot.o
[;ctll
btfsc
goto
call
call
mo.vlw
call
iOV"'lW
call
movlw
co.ll
btfsc
call
iliO-;.iltv
C: 11
movlw
r::-.;o.ll
movlw
call
movf
movf
movf
illV'Wf
movf
!!tUVWt
call
btfsc
goto
4
o?o:>dato_r
ee-"d..-,.f
temp_i.f
.No_.ucada_l
.wJgAA:..::Y.J'::rom:
Mens_l
l.fti;nsajt.
OXe
tcn_REG
Mens_l_l
Mensaj:e
IECLW
rt
_z
Key_OH
Qx.QA
N'.!m_b;.c l<:!. , w
_z
S:i:_es_A
uxuC
Num.-_ te e la.,.w
z
RORRA_:Y_HOME
.Mens_2_1
MJ?nstt.j-?
GxcG
LC!l_P.EG
Mens_Z
4"- ...--. ...1-
Control
temp_l,l
Si_u-sada
01u:ty
temp_LD
Si_usalia
TTP T f'T"l
____ ...............
BORRA_Y_HOME
u ............. .., ;
v..u . .;;.._.t.._"""
MensaJe
n ... ..-.n
U A -l..>- U
LCD_REG
"'ll'- -- -.
lY.t.f:t.U::i_.:l
Control
temp_l, 1
lTD
BORPA_Y_HOME
"t
.l""'LJ::!U:::>-_.::.._.1.
MP-rlRjP-
GxcG
I.CD_REG
Mens_4
digo_i,w
di tcm_l
digrto_2,w
d_t.em_2
digito_3 .. w
..t,; "'- --- -.
u.1 1_.t:att_J
digito_4,w
Ui
Cont:rl
temp_l, 1
Si_US)3.d>3.
a .guardar
;Gra:ba: d:a:tcr
;-Actu.iflizu. -r:-cn
;.:Offset del mensaje 1
_;Vi-s-al iza nAptt::rtura :(A.} u
;Aj.wsLct. pm;.it;it;:u. deL
:Offset del-mensaje 1.1
;Visualiza "Cantbi:o Ci.av.e fC}"
el tec.ladc
;Hay t..ec1a
.; Es la tec 16 A (Aperturo.) 7
;Es la tecla C {Cambio clave) 1
;Reconfigura LCD
.:;.At':t.lJ 1 iz
dal ltillsoje 1 .. 1
;ViSUC'.liza fC:}'x
;P.epcsicion..a cursor dsl. L.CD
;Offset liel mensaje 2
? ..
;Espera se introduza clave actual
;Hubo cancelaci<:n ??
rt.:.
.,....)J.
;CumpLW:tbct ':ti:> l:UL"L"':tl:Lct
;Es v lida ?
;NoF vuelta al principio
Reconfigura -LCD
;Borra e inicia el LCD
msnsajs 2rl
;V1sua11za "{C)
;Raposici.ona el LCD
;Offset de-l I.Etn.saje-
''Nu'S'va >:;1o.VISI"
;Espero. que se pulse la nueva clave
;Hubo 7?
. o---- c-..;_ .... _.... T nn
LijU.t.U. '-"-""
:Borra e inica LCD
;Offset del ntensajs 2.1
;ViRu1i7.n "(r.) r.nt':Alnr"
LCD
;Offset del mensaje 4
uCcn.firtAru
; Sal vct Lt?mpu.Lctlm.r:nt l.l:!" 1! r.;
;Lee la segunda clave
;Hubo ((
:Si.
4Tt
414
41S.
416.
417
4iB
1!9
422
...........
"t<..J
424
425
425
427
428
429
4:31.).
4::11
43-2 ;Graba err
.
'"t.:.J:"'t.
4.36
437
4:38-
44I
442...
444
445
44&
4:4:7
AAtL
449
-15
4:.1 ()tro_mas
A.t:-..
... _. ..
.453
455.
456
457
4-58
459
460
4S1
4b
4_1"._4_
.t r.r
":tQ:::J
4'6'&
4-67
468
4&9
4 ?1
A_"Y__.J
4]3
<1"""7(1
-u'"'
47S
476
477
478
479
48D ti!.Q_k
'1.Bl
1.84
., .. ,
-'i.U-..J
'!. {J ,l-
488
q;g
"1-90
<'191
..- ...... r
-ULV.V.L
:r-w
'l!!O" .f
subwf
movf
___ ,. ___ ,..
t:>UJJW1
J:rt.f>S,-
guLu
.mov'
s:ubwf-
ht:tss
la
illV.lw
mov1w
!rrcr':'?r.f
clrf
cu.-11
in e f.
_1'}.,r.'fR7.
.fol:o
g-oto.
movTw
.:t.: .... .: ...... -t-
..... \"1
il i _.1-:-_ 1 :w
S_m:<!r!a
rl.i-git-o_2;W
di_:cem_2,w
_z
_,..= ....... --
U.1_t..t:ULJ..rft
_z
Si_=>cuia.
.di_:i:to_4.;;w
4--;W
z
t1ueva
.
"t.
..-'f
V.1.0.Ve
t lE'.
.digi:to_l
fsr
eeadr
:iW
.eeda:to
fsr ... f.
t
S;_ 1JS.Zda:.
cont-_ .......
ca fl lJl:' _:_LC!J
cu1-1
.. mov.lw
ca-1-l -l*rtSoj-B
movlw. OxcO
t:,;:tl"l
!!!.a'.!l"t"!
cail
goto
C:J.L
b-tfsc
-UD-tD
r.::-all
cal-l
moviw-
tcf
mo:vl.w.
ca-11
bs.f
l.k:;f
-:Irf-
g_oto
.g-c.to-
ca.rl
-cu-11
ntov:lw
oal-1
movlw.
r..:all
.gota
-Mens_:z
Mensaj:e
-Ccntr.o.l-
::;1_usada
Ok.=.y
bfu...J)k
UP.:...LCD
:Mens_:__;)-
l::txU.a.
:ne:lay
.port.i't __-4
3
r:-ont:_'9rr
Si_usati:a-
COULerr,i
C.t.r:.e
w_::ccv
_:HCl>iE
Mens_j)
Mei1S15:j?
U:>!:Hr
Bi._u.-sada
-;:l!nmf:h"'T' .-d -lg4"<nn
..;.I.su'll 7
;Compara 2 4tgi-w
;I_s:ral ?'
:!No-
_;Coi ..para
; ?
:;.Nu
;Com_pa-ra-- t!- d-t_s:ito
;:Igual-;.-
.. ,.."'-- , ...........,
Tn,.JT,....,., rt-a ..+i-,.,..-iTJ""t"C:"
--
;Primer.!!, direcit,:n de EEPROM
-.-l-""::k,...n':::ll .4-i "; +.r..
,. .................. \::] ..... -;;: ................
dlgi:to. ,
-;'Stgui.;nt&
u:u
-;Actt.iTj.z(:t
.;Off:set _del .. me.nse.je _2 . 1
;.Vistitrltza- (C) tt
r..:u..ttiu.t: UHl LCD
;-f'fse-r. rll mgnsaje -z
;Visualiza "Clav:e ? "
;::Sl
;.C:om,pT:UI'>.h"'_ ;:;j . .=.s.__ <":('>T:T:t=<Ct.a-_
;Es-v lid-a 7
.;b!r;o
;Reconfigura. LCD
;Borre;. e inici-a- LCD
;Offset i:iel mensaje 5-
-;TemyD:riza 2
v."' r-? 1 _1
-3: tJ fn:tt:?-ni,::r)':
;;Repite el :receso
-;Im::en<:o fallido
{rts:con"tr:;rura r.:c;u
;:-Borru e iuiciu l.CD-
__::O.f.fs.e_t i me ll.Sa j_e _6
i .c:.-.:t: nACC-E8".0 u
;To=mpt..t.ti:.,:cr
:.P..epite e1