Descarga este documento en formato PDF - Ucontrol
Descarga este documento en formato PDF - Ucontrol
Descarga este documento en formato PDF - Ucontrol
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