Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
LIST P = 18F4550
INCLUDE <P18F4550.INC>
;************************************************************
CONFIG FOSC = HS
CONFIG PWRT = ON
CONFIG BOR = OFF
CONFIG WDT = OFF
CONFIG MCLRE = ON
CONFIG PBADEN = OFF
CONFIG LVP = OFF
CONFIG DEBUG = OFF
CONFIG XINST = OFF
; CODE ******************************************************
CBLOCK 0x0C
ENDC
#define LCD_RS PORTD,0
#define LCD_RW PORTD,1
#define LCD_E PORTD,2
ORG 0x00
clrf PORTB
clrf PORTD
clrf TRISB
clrf TRISD
call LCD_Inicializa
bcf LCD_E
Inicio
call Delay ;Esperar un tiempo antes de comenzar a escribir
movlw 'H'
call LCD_Caracter
movlw 'o'
call LCD_Caracter
movlw 'l'
call LCD_Caracter
movlw 'a'
call LCD_Caracter
movlw ' '
call LCD_Caracter
movlw 'M'
call LCD_Caracter
movlw 'u'
call LCD_Caracter
movlw 'n'
call LCD_Caracter
movlw 'd'
call LCD_Caracter
movlw 'o'
call LCD_Caracter
movlw '!'
call LCD_Caracter
call Delay
call Delay
call LCD_Borrar
goto Inicio
LCD_Inicializa
call Retardo_20ms ;Esperar 20 ms
movlw b'00110000' ;Mandar 0x30 -> W
movwf PORTB ;Enviar W -> PORTB
call Retardo_5ms ;Esperar 5ms
movlw b'00110000' ;Enviar 0x30 -> W
movwf PORTB
call Retardo_50us ;Acumular 100us
call Retardo_50us ;Acumular 100us
movlw b'00110000'
movwf PORTB
movlw 0x0F
movwf PORTB
bsf LCD_E
bcf LCD_E
return
LCD_Caracter
bsf LCD_RS ;Modo Caracter RS = 1
movwf PORTB ;Lo que se carg previamente en W -> PORTB
bsf LCD_E ;Activar Enable
call Retardo_50us ;Esperar 50us para enviar informacin
bcf LCD_E ;Transicin del Enable a 0
call Delay ;Esperar a poner la siguiente llamada
return
LCD_Borrar
movlw b'00000001' ;Comando para Borrar
call LCD_Comando ;Enviar un comando
LCD_Comando
bcf LCD_RS ;Modo Comando RS = 0
movwf PORTB ;Envia W -> PORTB
7 segmentos
LIST P=18F4550
;Directiva para definir el procesador44. #include
<P18F4550.INC>
;Definicion de SFRs para el procesador45.
******************************************************************************47.
;Bits de Configuracion
48.;Microchip ha cambiado el formato para definir los bits de configuracion, por favo
r49.;revisar el archivo P18F4550.INC para informacion adicional de la notacin
50.;Abajo hay algunos ejemplos
51.
52.;******** Configuracion del Oscilador
53. CONFIG
FOSC = INTOSCIO_EC
**********
**********
55.
CONFIG PWRT = ON
;PWRT habilitado
56.
57.
58.
59.
CONFIG PBADEN = ON
analgicas
60.
CONFIG LVP
apagado
= OFF
******************
62.
CONFIG CP0
programa
= OFF
63.
CONFIG CP1
= OFF
64.
CONFIG CP2
= OFF
65.
CONFIG CP3
= OFF
66.
CONFIG CPB
= OFF
67.
CONFIG CPD
= OFF
68.;*****************************************************************************
*69.; Definicion de variables
70.; Estas variables son necesarias solo si las interrupciones de baja prioridad son usadas.
71.; Mas variables podrian se necesarias para almacenar otros SFRs usados en las rutinas de
72.; interrupcin
.73
. 74.
CBLOCK0x080
75.
WREG_TEMP
76.
STATUS_TEMP
77.
BSR_TEMP
78.
ENDC
79.
80.
81.
Cantms:2
82.
seg83.
CantSeg
Cont
84.
TablaOffs
85.
ENDC
86.
87.;*****************************************************************************
*88.;Datos de la EEPROM
89.;Los Datos a ser programados en la EEPROM son definidos aqu
90.
91.
ORG
0xf00000
DE
"Test Data",0,1,2,3,4,5
92.
93.
94.
95.;*****************************************************************************
*96.; Vector de Reset.
97.; Este codigo comenzara a ejecutarse cuando suceda un reset
98.
99.
ORG
0x0000
goto
Main
100.
101.
102.
103.;****************************************************************************
**104.; Vector de interrupcion de alta prioridad
105.; Este codigo comenzara a ejecutarse cuando una interrupcion de alta prioridad ocurra
106.; o cuando cualquier interrupcion ocurra si es que las prioridades de las interrupciones
107.; no estan habilitadas
108.
109.
ORG
0x0008
110.
111.
bra
HighInt
interrupcion de alta prioridad
;Va a la rutina de
112.
113.;****************************************************************************
**114.; Vector de interrupcion de baja prioridad y rutina
115.; Este codigo comenzara a ejecutrase cuando una interrupcion de baja prioridad ocurra
116.; Este codigo puede ser eliminado si las interrupciones de baja prioridad no son usadas
117.
118.
ORG
0x0018
119.
120.
movff STATUS,STATUS_TEMP
121.
movff WREG,WREG_TEMP
122.
movff BSR,BSR_TEMP
123.
124.;
125.
126
. 127.
movff BSR_TEMP,BSR
128.
movff WREG_TEMP,WREG
129.
movff STATUS_TEMP,STATUS
130.
retfie
131.
132.;****************************************************************************
**133.; Rutina de interrupcion de alta prioridad
134.; El codigo para la rutina de interrupcion de alta prioridad es colocado aqui para
135.; evitar conflictos con el vector de interrupciones de baja prioridad
136.
137.HighInt:
138.
139.; *** El codigo para las interrupciones de alta prioridad va aqui **
*140
. 141.
retfie FAST
142.
143.;****************************************************************************
**144.; Comienzo del programa principal
145.; El codigo del programa principal es colocado aqu
146.
147.Main:
148.;
*149.
150.;******************** Inicializacion de perifericos
*********************
151.
movlw B'01100000
'152.
MHz
movwf OSCCON
153.
movlw B'00001111'
154.
movwf ADCON1,.0
clrf
155.
156.
TRISD,.0
157.
como entradas
clrf
************************
Cont,.0
;Cont = 0
Cont,W,.0
Conv7Seg
160.
161.MainP0
162.
163.
movf
164. rcall
segmentos
169.
incf
;Cont ++
170.
movlw 0x0A
171.
cpfseq Cont,.0
Cont,F,.0
172.
bra
173. clrf
0)174. bra
MainP0
Cont,.0
MainP0
175.
176.;**********************
Conv7Seg
*******************************************
177.;
Conv7Seg
178.;
en W un offset para que sea sumado a TBLPTRL para asi acceder
al179.; valor de 7 segmentos correspondiente al valor BCD recibido en WREG
180.
;181.; Devuelve el valor de 7 seg en el registro
W.182.;**************************************************************************
********183.Conv7Seg
184.
movwf TablaOffs,.0
188.
movwf TBLPTRH,.0
RetardoSeg
201.;
mediante la variable CantSeg. CantSeg es de 8
bits202.;*************************************************************************
****203.RetardoSeg
204.
movf
CantSeg,W,.0
205.
btfsc
STATUS,Z
206.
return
207.
movlw 0x03
208.
movwf Cantms+1,.0
209.
movlw 0xE8
210.
movwf Cantms,.0
211.
rcall
Retardo_ms
212.
decf
CantSeg,F,.0
;CantSeg == 0?
;Si => retornamos
;No => hacemos Cantms = 1000
,213. bra
RetardoSeg
;Continuamos con el
ciclo214.;************************************************************************
*****215
. 216.;****************************
Retardo_ms
**********************************
217.;
Retardo_ms
218.;
mediante Cantms y Cantms+1, Cantms y Cantms+1 son tratados
como219.;
variables de 16
bits.220.;*************************************************************************
****221.Retardo_ms
222.
rcall
223.
decfsz Cantms,F,.0
0224. bra
Retardo1ms
;realizamos un retardo de 1 ms
;Cantms --, Cantms ==
Retardo_ms
225.
movf
Cantms+1,W,.0
226.
btfsc
STATUS,Z
227.
return
228.
decf
Cantms+1,F,.0
229.
bra
Retardo_ms
;Continuamos con el ciclo
230.;**********************************************************************
*******231.
232.;****************************
Retardo1ms
**********************************
233.;
Retardo1ms
234.;
que ocupa 4
us235.;**************************************************************************
***236.Retardo1ms
237.
movlw
.249
238.Retardo1msP0
239.
addlw 0xFF
;W-
-240.
btfss
;W == 0?
241.
bra
STATUS,Z,.0
Retardo1msP0
242.
return
;Si => ya paso 1 ms
243.;**********************************************************************
*******244
. 245.
246.
ORG
0x800
247.
248.
249.;*******************************
BCD7Seg
***********************************
250.; BCD7Seg
Es una tabla que se utiliza para convertir valores BCD a 7
Segmentos251.;252.;
|RB7|RB6|RB5|RB4 | |RB3|RB2|RB1|RB0| |253.;
|DP
|G
|F
|E
|
|D
|C
|B
|A
|Hex|254.;
|---|---|---|-------|---|---|---|---|---|255.;
0
|1
|1
|0
|0
0
|0
|0
|0
|C0
|256.; 1
|1
|1
|1
|1
1
|0
|0
|1
|F9
|257.; 2
|1
|0
|1
|0
0
|1
|0
|0 |A4 |258.; 3
|1
|0
|1
|1
|
|0
|0
|0
|B0
|259.; 4
|1
|0
|0
|1
|
|0
|0
|1
|99
|260.; 5
|1
|0
|0
|1
|
|
|
|
0
1
0
|0
|1
|0
|92
|261.; 6
|1
|0
|0
|0
|
0
|0
|1
|0
|82
|262.; 7
|1
|1
|1
|1
|
1
|0
|0
|0
|F8
|263.; 8
|1
|0
|0
|0
|
0
|0
|0
|0
|80
|264.; 9
|1
|0
|0
|1
|
0
|0
|0
|0
|90
|265.;*********************************************************************
*************266.BCD7Seg267.
;
0
1
2
3
4
5
6
7
8
9
268. DB
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90269.;**************************
********************************************************270. 271. 272.
END
;Directiva fin del programa