informe 52 pic
TRANSCRIPT
-
8/14/2019 Informe 52 Pic
1/39
FACULTAD DE INGENIERIAELECTRNICA
SISTEMAS MICROPROCESADOS I
LCD, KEY, INTERRUPCIONES, MEMORIAS
Y
RS232
ELABORADO POR:
BELN AUQUILLA
NGEL FIERRO
FERNANDO LAPO
-
8/14/2019 Informe 52 Pic
2/39
SISTEMAS MICROPROCESADOS I
2
INDICE
1. Prctica N 5 PIC
1.1. Ejercicio N 2Escribir un programa para realizar las operaciones...3
1.2. Ejercicio N 5Elaborar un programa para mostrar los caracteres ingresados desde unteclado PS-2 ....15
2. Prctica N 6 PIC
2.1. Ejercicio N 4Conversin Digital Anloga.....17
2.2. Ejercicio N 5Genere una onda Senoidal.......19
3. Prctica N 7 PIC
3.1. Ejercicio N 1Uso de la interrupcin externa cero .22
3.2. Ejercicio N 2Interrupcin temporizador....25
3.3. Ejercicio N4
Conteo del timer 0 en un perodo de tiempo....28
4. Prctica N 8 PIC
4.1. Ejercicio N 1Memorias... 32
5. Prctica N 9 PIC
5.1. Ejercicio N 1
Transmisin y recepcin serial con Pic.34
5.2. Ejercicio N 2Transmisin y recepcin serial con Pic.36
5.3. Ejercicio N 3Envi de datos desde el PC al Pic...38
-
8/14/2019 Informe 52 Pic
3/39
-
8/14/2019 Informe 52 Pic
4/39
SISTEMAS MICROPROCESADOS I
4
dim op,sn1,sn2,b,num1,num2 as string[6]dim sr as string [17]sub procedure cero1
if((n1=10) or (n1=11) or (n1=12) or (n1=13)or (n1=14) or (n1=15)or (n1=16)) then
num1[0]="0"end ifif((n2=10) or (n2=11) or (n2=12) or (n2=13)
or (n2=14) or (n2=15) or (n2=16)) thennum1[1]="0"
end ifend subsub procedure cero2
if((n1=10) or (n1=11) or (n1=12) or (n1=13)or (n1=14) or (n1=15) or (n1=16)) then
num2[0]="0"
end ifif((n2=10) or (n2=11) or (n2=12) or (n2=13)
or (n2=14) or (n2=15) or (n2=16)) thennum2[1]="0"
end ifend subsub procedure encerar
n1=0
n2=0
end subsub procedure leerwhile (n1=0)
lcd_out(1,1,"N1:")n1=keypad_released
intTostr(n1,sn1)
num1[0]=sn1[5]
cero1
wendlcd_out(1,10,num1)
lcd_out(1,11," ")
while (n2=0)n2=keypad_released
intTostr(n2,sn2)
n1c=strtoint(num1)
n1f=float(n1c)lcd_out(1,10,num1)
encerar
delay_ms(500)
end subsub procedure leer2while (n1=0)
lcd_out(1,1,"N2:")
n1=keypad_released
intTostr(n1,sn1)
num2[0]=sn1[5]
cero1
wendlcd_out(1,10,"")
lcd_out(1,11,"")
lcd_out(1,10,num2)
lcd_out(1,11," ")
while (n2=0)n2=keypad_released
intTostr(n2,sn2)
num2[1]=""
num2[1]=sn2[5]
cero1
wendn2c=strtoint(num2)
n2f=float(n2c)lcd_out(1,10,num2)
encerardelay_ms(500)
end subsub procedureleer1
while(n1=0)lcd_out(1,1,"N1:")
n1=keypad_released
intTostr(n1,sn1)
num1[0]=sn1[5]
cero1
wend
lcd_out(1,10,num1)
lcd_out(1,11," ")
while (n2=0)n2=keypad_released
intTostr(n2,sn2)
num1[1]=""
'SUMA
case1lcd_cmd(lcd_clear)
leer
leer2
op="+"
-
8/14/2019 Informe 52 Pic
5/39
SISTEMAS MICROPROCESADOS I
5
num1[1]=sn2[5]
cero1
wendn1c=strtoint(num1)
n1f=float(n1c)
lcd_out(1,10,num1)encerar
delay_ms(500)
end subsub procedure displayres
lcd_cmd(lcd_clear)
lcd_out(1,1,num1)
lcd_out_cp(op)
lcd_out_cp(num2)
lcd_out_cp("= ")
intTostr(resultado,sr)
lcd_out_cp(sr)
delay_ms(1500)
lcd_cmd(lcd_clear)
sn1[5]=""
sn2[5]=""
end subsub procedure displayresf
lcd_cmd(lcd_clear)
lcd_out(1,1,num1)
lcd_out_cp(op)
lcd_out_cp(num2)
lcd_out_cp("= ")
floatTostr(resf,sr)lcd_out_cp(sr)
delay_ms(1500)
lcd_out_cp(" = ")
floatTostr(resf,sr)
lcd_out(2,1,sr)
delay_ms(1500)
lcd_cmd(lcd_clear)
end subsub procedure operaciones
select case asd
resultado=n1c+n2c
displayres
'RESTA
case2lcd_cmd(lcd_clear)
leerleer2
op="-"
resultado=n1c-n2c
displayres
'MULTIPLICACION
case 3lcd_cmd(lcd_clear)
leer
leer2
op="*"
resultado=n1c*n2c
displayres
'DIVISION
case 4lcd_cmd(lcd_clear)
leer
leer2
op="/"
resf=n1f/n2f
displayresf
'POTENCIA
case5
lcd_cmd(lcd_clear)leer
leer2
op="^"
resf=1.0
forj=1 to n2cresf=resf*n1f
next jdisplayresf
'RAZ CUADRADAcase6lcd_cmd(lcd_clear)
leer1
op="raiz"
resf=sqrt(n1f)
displayresf1
case elselcd_cmd(lcd_clear)
lcd_out(1,1,"No hay operacio-")
lcd_out(2,1,"nes asignadas")
delay_ms(500)
lcd_cmd(lcd_clear)
end select
-
8/14/2019 Informe 52 Pic
6/39
SISTEMAS MICROPROCESADOS I
6
'SENOcase7lcd_cmd(lcd_clear)
leer1
op="seno"
resf=sin(n1f)displayresf1
'TANGENTEcase8lcd_cmd(lcd_clear)
leer1
op="tan"
resf=tan(n1f)
displayresf1
'LOGARITMOcase9lcd_cmd(lcd_clear)
leer1
op="log10"
resf=log10(n1f)
displayresf1
end submain:
lcd_config(portb,7,6,5,4,portb,0,1,2)
lcd_cmd(lcd_cursor_off)
keypad_init(portc)
lazo:while (asd=0)lcd_out(1,1,"ingrese la opera")
lcd_out(2,1,"cion a realizar")
asd=keypad_released
wordtostr(asd,b)
wendlcd_out(2,8,b)
delay_ms(1500)
operaciones
asd=0
n1c=0
n2c=0
n1=0
n2=0
goto lazoend.
-
8/14/2019 Informe 52 Pic
7/39
SISTEMAS MICROPROCESADOS I
7
ALGORITMO:
Entradas:1. Teclado numrico
Salidas:1. Escribir en el LCD2. Seales de datos
Proceso:1. Dimensiono la variable asd, n1, n2 como byte2. Dimensiono la variable n1c, n2c, resultado como integer3. Dimensiono la variable asd, n1f, n2f, resf como float4. Dimensiono la variable op, sn1, sn2, b, num1, num2 como String [6]5. Dimensiono la variable sr como String [17]6. Configuro el Puerto b como salidas7. Configuro los registros internos del LCD8. Apago el cursor9. Inicializo el keypad_init con el puerto c10. Realizo un lazo11. Realizo un while asd=012. Presento en el lcd un mensaje ingrese la operacin a realizar13. Igualo la variable asd=keypad_realased14. Convierto la palabra asd a string b15. Cierro el while16. Presento la variable b en el lcd17. Realizo un retardo de 1500 ms18. Voy a un subproceso operaciones19. Igualo a cero a estas variables asd,n1c,n2c,n1,n2=020. Retorno al lazo21. Subproceso operaciones22. Con el select case asd escogo la operacin que deseo realizar23. En el case 124. Borro el lcd25. Voy a subproceso leer26. Voy a subproceso leer227. Guardo en la variable op = +28. En la variable resultado= n1c+n2c29. Llamo a una subproceso displayres30. En el case 231. Borro el lcd32. Voy a subproceso leer33. Voy a subproceso leer234. Guardo en la variable op=-35. En la variable resultado= n1c-n2c36. Llamo a una subproceso displayres37. En el case 338. Borro el lcd39. Voy a subproceso leer40. Voy a subproceso leer2
-
8/14/2019 Informe 52 Pic
8/39
SISTEMAS MICROPROCESADOS I
8
41. Guardo en la variable op=*42. En la variable resultado= n1c*n2c43. Llamo a una subproceso displayres44. En el case 445. Borro el lcd46. Voy a subproceso leer47. Voy a subproceso leer248. Guardo en la variable op=/49. En la variable resultado= n1c/n2c50. Llamo a una subproceso displayres51. En el case 552. Borro el lcd53. Voy a subproceso leer54. Voy a subproceso leer255. Guardo en la variable op=^56. A la variable resf=1.057. Realizo un for j=1 to n2c58. Resf=resf*n1f59. Next j60. Llamo a una subproceso displayres61. En el case 662. Borro el lcd63. Voy a subproceso leer64. Voy a subproceso leer265. Guardo en la variable op=raiz66. En la variable resf= sqrt(n1f)67. Llamo a una subproceso displayresf168. En el case 769. Borro el lcd70. Voy a subproceso leer
71. Voy a subproceso leer272. Guardo en la variable op=seno73. En la variable resf= sin(n1f)74. Llamo a una subproceso displayresf175. En el case 876. Borro el lcd77. Voy a subproceso leer78. Voy a subproceso leer279. Guardo en la variable op=tan80. En la variable resf= tan(n1f)81. Llamo a una subproceso displayresf182. En el case 9
83. Borro el lcd84. Voy a subproceso leer85. Voy a subproceso leer286. Guardo en la variable op=log1087. En la variable resf= log10(n1f)88. Llamo a una subproceso displayresf189. Case else90. Borro el lcd91. Presento en el lcd el mensaje no hay operaciones asignadas
-
8/14/2019 Informe 52 Pic
9/39
SISTEMAS MICROPROCESADOS I
9
92. Retardo de 500ms93. Borro el lcd94. Termino el subproceso operaciones95. Subproceso leer96. Un while (n1=0)97. Presento en el lcd N1:98. N1=keypad_released99. Convierto la variable n1 a string sn1100. Igualo num1[0]=sn1[5]101. Llamo a un subproceso cero1102. Cierro el while103. Presento en el lcd la variable num1104. Un while (n2=0)105. Presento en el lcd N2:106. N2=keypad_realased107. Convierto la variable n2 a string sn2108. Num1[1]=109. Igualo num1[1]=sn2[5]110. Llamo a un subproceso cero1111. Cierro el while112. A n1c=strtoint(num1)113. N1f=float(n1c)114. Presento en el lcd num1115. Llamo a in subproceso encerar116. Retado de 500ms117. Termino el subproceso leer118. Subproceso leer1119. Un while (n1=0)120. Presento en el lcd N1:121. N1=keypad_released
122. Convierto la variable n1 a string sn1123. Igualo num1[0]=sn1[5]124. Llamo a un subproceso cero1125. Cierro el while126. Presento en el lcd la variable num1127. Un while (n2=0)128. Presento en el lcd N2:129. N2=keypad_released130. Convierto la variable n2 a string sn2131. Num1[1]=132. Igualo num1[1]=sn2[5]133. Llamo a un subproceso cero1
134. Cierro el while135. A n1c=strtoint(num1)136. N1f=float(n1c)137. Presento en el lcd num1138. Llamo a in subproceso encerar139. Retado de 500ms140. Termino el subproceso leer141. Subproceso leer2142. Un while (n1=0)
-
8/14/2019 Informe 52 Pic
10/39
SISTEMAS MICROPROCESADOS I
10
143. Presento en el lcd N2:144. N2=keypad_released145. Convierto la variable n1 a string sn1146. Igualo num2[0]=sn1[5]147. Llamo a un subproceso cero1148. Cierro el while149. Presento en el lcd la variable num2150. Un while (n2=0)151. N2=keypad_released152. Convierto la variable n2 a string sn2153. Num2[1]=154. Igualo num2[1]=sn2[5]155. Llamo a un subproceso cero1156. Cierro el while157. A n2c=strtoint(num2)158. N2f=float(n2c)159. Presento en el lcd num2160. Llamo a in subproceso encerar161. Retado de 500ms162. Termino el subproceso leer163. Subproceso displayres164. Borro el lcd165. Presento en el lcd la variable num1166. Presento en el lcd la variable op167. Presento en el lcd la variable num2168. Presento en el lcd =169. Convierto la variable resf de entero a string sr170. Presento en el lcd la variable sr171. Retardo de 2500ms172. Borro el lcd
173. Sn1[5]=174. Sn2[5]=175. Termino el subproceso displayres176. Subproceso displayresf177. Borro el lcd178. Presento en el lcd la variable num1179. Presento en el lcd la variable op180. Presento en el lcd la variable num2181. Presento en el lcd =182. Convierto la variable resultado de entero a string sr183. Presento en el lcd la variable sr184. Retardo de 2500ms
185. Borro el lcd186. Termino el subproceso displayresf187. Subproceso displayresf1188. Borro el lcd189. Presento en el lcd de190. Presento en el lcd la variable num1191. Presento en el lcd =192. Convierto la variable resf de entero a string sr193. Presento en el lcd la variable sr
-
8/14/2019 Informe 52 Pic
11/39
SISTEMAS MICROPROCESADOS I
11
194. Retardo de 2500ms195. Borro el lcd196. Termino el subproceso displayresf1197. Subproceso encerar198. N1=0199. N2=0200. Termino el subproceso encerar201. Subproceso cero1202. If ( (n1=10) or (n1=11) or (n1=12) or (n1=13) or (n1=15) or (n1=16) ) then203. Num1[0]=0204. End if205. Termino el subproceso cero1206. Subproceso cero2207. If ( (n2=10) or (n2=11) or (n2=12) or (n2=13) or (n2=15) or (n2=16) ) then208. Num2[0]=0209. End if210. Termino el subproceso cero2
Asd,j,n1,n2 as byte
N1c,n2c,resultado as integer
N1f,n2f,resf as float
Op,sn1,sn2,b,num1,num2 as
string[6]
Sr as string[17]
INICIO
Puerto b como salidas
Configuro el registro del lcd
Apago el cursor
Keypad_init(portc)
-
8/14/2019 Informe 52 Pic
12/39
SISTEMAS MICROPROCESADOS I
12
no
si
no
sino
si
Asd=0
Lcd ingrese la opera
cion a realizar
Asd=keypad_released
Wordtostr(asd,b)
Presento la var. b
Retardo 1500ms
operaciones
Asd=0
N1c=0
N2c=0N1=0
N2=0
operaciones
Asd=1
Borro el lcd
Op=+
Resultado=n1c+n2c
leer
Leer2
displayres
Asd=2
Borro el lcd
Op=-
Resultado=n1c-n2c
leer
Leer2
displayres
Asd=3
Borro el lcd
Op=*
Resultado=n1c*n2c
leer
Leer2
displayres
-
8/14/2019 Informe 52 Pic
13/39
SISTEMAS MICROPROCESADOS I
13
no
sino
sino
si
no
si
no
si
no
si no
si
Asd=4
Borro el lcd
Op=/
Resultado=n1c/n2c
leer
Leer2
displayresf
Asd=5
Borro el lcd
Op=^, resf=1.0
Resf=resf*n1f
leer
Leer2
displayresf
Asd=6
Borro el lcd
Op=raiz
Resf=sqrt(n1f)
Leer1
Displayresf1
J=1
J=n2c
J=j+1
Asd=7
Borro el lcd
Op=seno
Resf=sin(n1f)
Leer1
Displayresf1
Asd=8
Borro el lcd
Op=tan
Leer1
Displayresf1
Resf=tan(n1f)
Asd=9
Borro el lcd
Op=log10
Leer1
Displayresf1
Resf=log10(n1f)
Borro el lcd
Present en el lcdb No
hay operaciones
asignadas
Retardo de 500ms
Borro el lcd
-
8/14/2019 Informe 52 Pic
14/39
SISTEMAS MICROPROCESADOS I
14
leer
N1=0
escribir en el lcd N1:
Cero1
Inttostr(n1,sn1)
Num[1]=sn1[5]
N1=keypad_realeased
-
8/14/2019 Informe 52 Pic
15/39
SISTEMAS MICROPROCESADOS I
15
Prctica N 5
1.2. Ejercicio N 2:
Elaborar un programa para mostrar los caracteres ingresados desde un tecladoPS-2.
CDIGO:
program Tecladodimkeydata as bytespecial as bytedown as bytetxt as string [20]main:INTCON=0
Lcd_Config(PORTB,3,2,1,0,PORTB,4,6,5)
Ps2_Config(PORTC,1,0)
Delay_ms(100)
txt=" "
while trueif(Ps2_Key_Read(keydata, special, down)) 0 thenif((down=1)and(keydata=16)) 0thenLcd_Cmd(LCD_MOVE_CURSOR_LEFT)
else if((down=1)and(keydata=13))0thenelse if((down=1)and(special=0)and(keydata0))thenLcd_Chr_CP(keydata)
end ifend if
end ifend ifDelay_ms(10)
wendend.
Entradas:1. Palabras hacia el LCD
Salidas:1. Escribir en el LCD2. Seales de datos3. Seales de Control
Proceso:1. Apaga todas las interrupciones2. Configura el puerto B3. Inicializa Teclado PS/2 en PORTC Pin 0 = Data y Pin 1 = Clock
4. Retardo de 100 ms5. Lazo6. Si se ha presionado una tecla7. Espacio en blanco8. Mueve cursor a la izquierda
-
8/14/2019 Informe 52 Pic
16/39
SISTEMAS MICROPROCESADOS I
16
9. Enter10. Coloca cualquier otra tecla en el LCD11. Retardo 100ms
Diagrama de FlujoINICIO
Dim keydata as byte, special as byte, down as byte
txt as string [20]
INTCON=0
txt as string [20]
Lcd_Config(PORTB,3,2,1,0,PORTB,4,6,5)
Ps2 Confi PORTC 1 0
while true
if(Ps2_Key_Read(keydata, special, down)) 0 then
if((down=1)and(keydata=16)) 0 then
Lcd_Cmd(LCD_MOVE_CURSOR_LEFT
else if((down=1)and(keydata=13))0 then)
else if ((down=1)and(special=0)and(keydata0))then
Lcd_Chr_CP(keydata)
end if
Delay_ms(10)
wend
-
8/14/2019 Informe 52 Pic
17/39
SISTEMAS MICROPROCESADOS I
17
Prctica N 6OBJETIVO:
Utilizar los conversores A/D y D/A del Microcontrolador PIC
TEMA:Conversin Anloga Digital y Digital Anloga.
2.1. Ejercicio N 4:
Conversin Digital Anloga
Esquemtico
CDIGO:program Digital_Anlogasub procedure inittrisd=0
end subdim i as bytedim a as bytea=0
i=0
main:
while trueinit
for i=1to 255a=a+1
portd=a
next idelay_ms(100)
wendend.
-
8/14/2019 Informe 52 Pic
18/39
SISTEMAS MICROPROCESADOS I
18
ALGORITMO:
Entradas:1. Seal de entrada
Salidas:
1. Seal Triangula (Osciloscopio)
Proceso:1. Inicio sub procedimiento init2. Puerto D como salidas3. Dimensiono la variable i, a como byte4. Lazo5. Condicin for 1
-
8/14/2019 Informe 52 Pic
19/39
SISTEMAS MICROPROCESADOS I
19
2.2. Ejercicio N 5:
Generar una onda senoidal
Esquemtico
CDIGO:
program onda_senoidaldim i,a as bytemain:
trisd=0for i=1to255a=0
portd=a
a=a+1
next iifa=255thenelseend ifdelay_us(100)
for i=255 to 1a=255
portd=a
a=a-1
next iifa=0thenelseend ifgoto mainend.
-
8/14/2019 Informe 52 Pic
20/39
SISTEMAS MICROPROCESADOS I
20
ALGORITMO:
Entradas:1. Seal de Entrada
Salidas:
1. Seal senoidal (Osciloscopio)
Proceso:1. Dimensiono la variable i, a como byte2. Puerto D como salida3. Condicin for 1
-
8/14/2019 Informe 52 Pic
21/39
SISTEMAS MICROPROCESADOS I
21
-
8/14/2019 Informe 52 Pic
22/39
SISTEMAS MICROPROCESADOS I
22
Prctica N 73.1. Ejercicio N1:
Uso de la Interrupcin externa cero
Esquemtico:
CDIGO:program ExternoDIM L AS BYTEDIM A, B AS BYTEdim valor as string[6]sub procudere initTRISC=$0
TRISD=$0TRISB=$0
OPTION_REG=%10000000
INTCON=%10010000
L=0
A=0
B=0
Lcd_config(portc,7,6,5,4,portc,0,1,2)
-
8/14/2019 Informe 52 Pic
23/39
SISTEMAS MICROPROCESADOS I
23
lcd_cmd(lcd_cursor_off)
end subsub procedure interruptPORTD=INC(B)
INTCON.INTF=0
A=A+1end submain:init
LOOP:byteTOSTR(A,valor)
lcd_cmd(lcd_clear)
LCD_OUT(1,1,valor)
delay_ms(500)
GOTO LOOPend.
ALGORITMO:
Entradas:2. Palabras hacia el LCD
Salidas:2. Escribir en el LCD3. Seales de datos4. Seales de Control
Proceso:9. Dimensiono las variables L, A como Byte
10. Dimensiono la variable valor como String con un array [6].11. Inicializ sub procedimiento init12. Habilito el Puerto C y D como salidas13. Habilito el Puerto B como entradas14. Habilito todas las interrupciones por flanco descendente15. Habilito Interrupciones Externas RB016. Bandera L=0, A=0 y B=017. Configuro los registros internos del LCD18. Apago el cursor19. Termino el sub proceso20. Habilita mltiples Interrupciones21. Incrementa B en el Puerto B22. Incrementa 1 a la variable A y la guarda en la misma23. Termino el sub proceso24. Comienza el Lazo25. El valor de la variable A el convierte de byte a String26. Limpia el LCD27. El valor de la variable valor coloca en la posicin indicada28. Retardo de 500 ms29. Regresa al Lazo
-
8/14/2019 Informe 52 Pic
24/39
SISTEMAS MICROPROCESADOS I
24
Diagrama de Flujo
INICIO
DIM L AS BYTE
DIM A, B AS BYTE
Dim valor as string [6]
init
TRISC=$0
TRISD=$0
TRISB=$0
OPTION_REG=%10000000
INTCON=%10010000
Lcd_config(portc,7,6,5,4,portc,0,1,2)
lcd_cmd(lcd_cursor_off)
End sub
interrup
PORTD=INC(B)
INTCON.INTF=0
A=A+1
End sub
init
LOOP
b teTOSTR A valor
lcd_cmd(lcd_clear)
LCD_OUT(1,1,valor)
Delay_ms(500)
Goto Loop
end
-
8/14/2019 Informe 52 Pic
25/39
SISTEMAS MICROPROCESADOS I
25
3.2. Ejercicio N 2:
Interrupcin temporizadores.
Esquemtico:
CDIGO:program InterrupcionDIM L AS BYTEDIM A, B AS BYTEdim valor as string[6]sub procudere initTRISC=$0
TRISD=$0
TRISB=$0
OPTION_REG=%10000011
INTCON=%10100000L=0
A=0
B=0
lcd_config(portc,7,6,5,4,portc,0,1,2)
lcd_cmd(lcd_cursor_off)
end subsub procedure interruptINTCON.T0IF=0
-
8/14/2019 Informe 52 Pic
26/39
SISTEMAS MICROPROCESADOS I
26
IF L=0 THENTMR0=92
PORTB.0=0
L=1
ELSEPORTB.0=1
L=0TMR0=92
END IFend submain:init
LOOP:lcd_cmd(lcd_clear)
LCD_OUT(1,1,"UPS QUITO")
delay_ms(500)
GOTO LOOPend.
ALGORITMO:
Entradas:1. Palabras hacia el LCD
Salidas:1. Escribir en el LCD2. Seales de datos3. Seales de Control
Proceso:1. Dimensiono las variables L, A y B como Byte2. Dimensiono la variable valor como String con un array [6].3. Inicializ un sub procedimiento4. Habilito el Puerto B, C y D como salidas5. Habilito todas las interrupciones por flanco descendente6. Habilito las interrupciones Timer 07. Bandera L=0, A=0 y B=08. Configuro el LCD en el puerto C9. Apago el cursor10. Inicializ la interrupcin11. If L=0 entonces Portb.0=0, L=112. Entonces Portb.0=1, L=013. Lazo14. Limpio LCD
15. Despliego UPS QUITO en la posicin indicada16. Retardo17. Ir lazo
-
8/14/2019 Informe 52 Pic
27/39
SISTEMAS MICROPROCESADOS I
27
No
Si
Diagrama de Flujo
DIM L, A , B AS BYTE
dim valor as string[6]
init
TRISC=$0
TRISD=$0
TRISB=$0
OPTION_REG=%10000011
INTCON=%10100000
L=0
A=0
B=0
lcd_config(portc,7,6,5,4,portc,0,1,2)
lcd_cmd(lcd_cursor_off)
interrupt
INTCON.T0IF=0
L=0
TMR0=92
PORTB.0=0
L=1
PORTB.0=1
L=0
TMR0=0
init
LOOP
Lcd_cmd(lcd_clear
LCD_OUT(1,1 UPS QUITO)
GOTO LOOP
END
FIN
-
8/14/2019 Informe 52 Pic
28/39
SISTEMAS MICROPROCESADOS I
28
3.3. Ejercicio N 4:
Conteo del timer 0 en un perodo de tiempo.
Esquemtico:
CDIGO:program ConteoDIM L AS BYTE
DIM A,B AS BYTEdim valor as string[6]sub procudere initTRISC=$0
TRISD=$0
TRISB=$FF
OPTION_REG=%10000011
INTCON=%10010000
L=0
A=0
B=0
Lcd_config(portc,7,6,5,4,portc,0,1,2)
lcd_cmd(lcd_cursor_off)
end subsub procedure interruptPORTD=INC(B)
INTCON.INTF=0
IF L=0THENTMR0=0
L=1
ELSEL=0
-
8/14/2019 Informe 52 Pic
29/39
-
8/14/2019 Informe 52 Pic
30/39
SISTEMAS MICROPROCESADOS I
30
si
DIAGRAMA DE FLUJO:
INICIO
Dim L, A, B as Byte
Dim valor as strin 6
Sub procedure init
TRISC=$0
TRISD=$0
TRISB= FF
OPTION REG=%10000011
INTCON=%10010000
L=0
A=0
B=0
Lcd confi ortc 7 6 5 4 ortc 0 1 2
Sub procedure interrup
PORTD=INC(B)
INTCON.INFT=0
L=0
TMR0=0
LOOP
byteTOSTR(b,valor)
lcd_cmd(lcd_clear)
LCD_OUT(1,1,valor)
Delay_ms(500)
GOTO LOOP
-
8/14/2019 Informe 52 Pic
31/39
SISTEMAS MICROPROCESADOS I
31
Prctica N 8OBJETIVO:
Manejar memorias internas y externas con el microcontrolador PIC.
TEMA:Memorias
4.1. Ejercicio N 1:
Escribir una secuencia de nmeros a los sucesivos lugares de EEPROM.
Esquemtico:
CDIGO:
program Eepromdim i as byte
dim j as bytemain:TRISB=0
for i=0 to20EEPROM_WRITE(i,i+6)
next idelay_ms(30)
for i=0 to 20PORTB=EEPROM_Read(i)
-
8/14/2019 Informe 52 Pic
32/39
SISTEMAS MICROPROCESADOS I
32
No
Si
Si
No
for j=0 to200delay_us(500)
next jnext iend.
ALGORITMO:
Entradas:1. Palabras hacia el LCD
Salidas:1. Escribir en el LCD2. Seales de datos3. Seales de Control
Proceso:1. Dimensiono las variables i y j como Byte
2. Habilito el Puerto B como salidas3. Comparacin for i=0 to 204. Escribo en la EEPROM5. Retardo6. El puerto B lee la EEPROM7. Comparacin for i=0 to 2008. Retardo
Diagrama de Flujo
INICIO
Dim i, j as byte
TRISB =0
0
-
8/14/2019 Informe 52 Pic
33/39
SISTEMAS MICROPROCESADOS I
33
Prctica N 9OBJETIVO:
Utilizar las comunicaciones seriales RS-232.
TEMA:Comunicaciones seriales asncronas
5.1. Ejercicio N 1:
Transmisin y recepcin serial con PIC
Esquemtico:
Cdigo:
program lab_1dim received_byte as bytemain:USART_Init(9600)
while trueifUSART_Data_ready=1thenUSART_Write(Received_byte)
end if
wendend.
-
8/14/2019 Informe 52 Pic
34/39
SISTEMAS MICROPROCESADOS I
34
si
No
ALGORITMO:
Entradas:1. Dato recibido
Salidas:1. Dato Enviado
Proceso:1. Dimensiono las variable received_byte como byte2. Inicializo modulo Usart3. Comparacin If el dato es recibido4. El dato se guarda5. El dato es transmitido
Diagrama de Flujo
INICIO
dim received_byte as byte
Usart_Init(9600)
While true
USART_Data_ready=1
USART_Write(Received_byte)
End if
wend
end
El dato no se transmite
-
8/14/2019 Informe 52 Pic
35/39
SISTEMAS MICROPROCESADOS I
35
5.2. Ejercicio N 2:
Transmisin y recepcin serial con PIC
Esquemtico:
Cdigo:
program lab_2dim a as bytea=0
trisB=0
main:
Usart_Init(9600)while trueA=A+1
Usart_write(A)
delay_ms(100)
USART_WRITE_TEXT("HOLA MUNDO")
WENDEND.
ALGORITMO:
Entradas:1. Dato recibido
Salidas:1. Dato Enviado
-
8/14/2019 Informe 52 Pic
36/39
-
8/14/2019 Informe 52 Pic
37/39
SISTEMAS MICROPROCESADOS I
37
5.3. Ejercicio N 3:
Envi de datos desde el PC al Pic
Esquemtico:
Cdigo:
program lab_3dim received_byte as byteDIM A AS BYTEA=0
trisB=0main:Usart_Init(9600)
while trueIfUsart_Data_Ready=1thenA=Usart_Read
PORTB=A
end ifDelay_ms(10)
wendend.
ALGORITMO:
Salidas:
1. Dato Enviado
-
8/14/2019 Informe 52 Pic
38/39
SISTEMAS MICROPROCESADOS I
38
si
Proceso:
1. Dimensiono las variable a como byte2. Igualo la variable a cero3. Puerto B como salida4. Inicializo el puerto serie en 9600 baudios5. Comparacin if el dato es recibido6. Lee el dato recibido7. El valor de A se observa en el puerto B8. Retardo para observar
Diagrama de Flujo
INICIO
dim received_byte as byte
dim a as byte
A=0
TrisB=0
Usart_Init(9600)
While true
Usart_Data_Ready=1
A=Usart_Read
PORTB=A
End if
Delay_ms(10)
wend
End
No
No se envan datos
-
8/14/2019 Informe 52 Pic
39/39
SISTEMAS MICROPROCESADOS I