informe 52 pic

Upload: monserin3363

Post on 30-May-2018

221 views

Category:

Documents


0 download

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