
thats the simulation.
originally, nasimulate ko using ung code sa taas. nakita ko na working na yun.
with the additional of delay during start up... medyo nalilito na ako ng behavior na pagPoll ng T0IF.
sa una kong code, (disabled ang minutes counter - para masimulate interm of minutes) ang counter (hours) ay nagdedecrement each 60seconds,
pero nung ginawa ko nang ganito,
#include <pic.h>
__CONFIG(XT & WDTDIS & PWRTDIS & UNPROTECT);
#include "seven_seg.h"
#define increment RA0
#define decrement RA1
#define relay RA2
#define start RA3
#define delay RA4
unsigned int hours;
unsigned int minutes;
unsigned int seconds;
unsigned int quarterseconds;
unsigned long start_up_delay;
void init_7SEGMENT(void)
{
TRISA = 0x03;
PORTA = 0b10000;
TRISB &= ~0x7F;
PORTB &= ~0x7F;
}
void main(void)
{
PSA = 0; /* prescale assigned to timer0 */
PS2 = 0; PS1 = 1; PS0 = 0; /* 1:8 prescale */
T0CS = 0; /* enable timer0 */
init_7SEGMENT();
delay = 0;
start_up_delay = 60; //60=15seconds (just to simulate)
do
{
if(T0IF)
{
T0IF=0;
start_up_delay--;
}
}while((start_up_delay!=0);
if(start_up_delay!=0)
{
delay = 1;
start = 1;
hours = 4;
minutes = 0;
seconds = 0;
quarterseconds = 0;
}
while(1)
{
cases_7segment(hours);
if (T0IF)
{
T0IF = 0;
quarterseconds++;
if (quarterseconds>=4)
{
seconds++;
if (seconds>=60)
{
seconds=0;
//minutes++;
//if (minutes>=60)
//{
// minutes=0;
if (hours>0)
{
hours--;
}
//}
}
}
if (hours>0)
{
relay = 0;
}
if (hours==0)
{
relay = 1;
}
if (increment && hours<9)
{
hours++;
minutes = 0;
seconds = 0;
}
if (decrement && hours>0)
{
hours--;
minutes = 0;
seconds = 0;
}
}
}
}
every 15 seconds na tuloy bumababa yung counter "hours".
pa explain naman kung bakit ganun? hanggang ngayon di ko pa maintindihan ang pagpopoll ng timer...