20.04.2013 Views

Descarga este documento en formato PDF - Ucontrol

Descarga este documento en formato PDF - Ucontrol

Descarga este documento en formato PDF - Ucontrol

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

14 de 22<br />

#task (rate=50ms, max=10ms)<br />

void R_Ll<strong>en</strong>ador2();<br />

void main()<br />

{<br />

semaphore = 1; //Solo una tarea puede utilizar el recurso cada vez<br />

iCantidad = 100; //Inicializamos esta variable para t<strong>en</strong>er algunas botellas <strong>en</strong><br />

//la <strong>este</strong>ra.<br />

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);<br />

rtos_run();<br />

}<br />

void R_Despachador()<br />

{<br />

int Botellas;<br />

rtos_wait(semaphore); //Reclamamos el recurso y aquí comi<strong>en</strong>za la secc crítica<br />

Botellas = iCantidad; //Leemos la cantidad de botellas a una variable temporal<br />

if(input(PIN_B0)==1)<br />

{<br />

Botellas++; //Ya sabemos que <strong>este</strong> código no es efici<strong>en</strong>te pero<br />

iCantidad = Botellas; //sí es didáctico y por eso lo he utilizado así.<br />

}<br />

rtos_signal(semaphore); //Liberamos el semáforo y aquí se acaba la sec crítica<br />

rtos_yield(); // A dormir por otros 100ms para evitar poner dos veces la misma botella<br />

}<br />

void R_Ll<strong>en</strong>ador1()<br />

{<br />

rtos_wait(semaphore);<br />

if(input(PIN_B1)==1)<br />

iCantidad -= 12; //Este sí es un código lógico, pero <strong>en</strong>tonces el despachador<br />

//no nos daría problemas aunque nos vayamos a dormir d<strong>en</strong>tro de<br />

//la sección crítica.<br />

rtos_signal(semaphore);<br />

rtos_yield();<br />

}<br />

void R_Ll<strong>en</strong>ador2()<br />

{<br />

rtos_wait(semaphore);<br />

if(input(PIN_B2)==1)<br />

iCantidad -= 12;<br />

rtos_signal(semaphore);<br />

rtos_yield();<br />

}<br />

Este programa lo simulé <strong>en</strong> Proteus poni<strong>en</strong>do <strong>en</strong> RB0 una fu<strong>en</strong>te digital de tipo pattern con los sigui<strong>en</strong>tes<br />

parámetros:<br />

First Edge at (Secs)=1<br />

Desmarcar el check mark: Equal Mark/Space Timing?<br />

‘Mark’ Time (Secs) = 100m<br />

‘Sapce’ Time(Secs) = 150m<br />

Marcar el check mark: Continuos Secu<strong>en</strong>ce of Pulses<br />

Marcar el check mark: Standard Hig-Low Pulse Train<br />

Para RB1 y RB2 se utiliza una fu<strong>en</strong>te del mismo tipo con los sigui<strong>en</strong>tes parárametros cambiados<br />

Para RB1:<br />

First Edge at (Secs)=5<br />

‘Mark’ Time (Secs) = 100m<br />

‘Sapce’ Time(Secs) = 5.9<br />

Para RB2:<br />

First Edge at (Secs)=7<br />

‘Mark’ Time (Secs) = 100m

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!