Brojeve ispisivati svake sekunde.
Pokusao sam da resim ali mi nije ne registruje deljenje nego samo ispisuje SVE brojeve redom u nizu i znatno brze od jedne sekunde.
Ideja je napraviti 50ms (C350 HEX) u tajmeru i preko brojaca napraviti 20 prekida jer 50ms *20=1 s
Ako neko zna gde je greska u kodu, neka napise ..
Hvala !
#include <reg51.h>
#include <math.h>
typedef unsigned char byte;
byte a[7]= {7,5,16,1,4,11,9};
byte counter;
byte xdata display _at_ 0x8001;
byte started = 0;
int i=0;
sbit switcher=P0^0;
void Inic(void)
{
EA=1;
TMOD=1; // 16 bit timer
TH0=0xC3; // set timer0 0xC350
TL0=0x50; // 50,000 decimalno
TR0=1;
counter=1; // set brojac
}
void timer0(void) interrupt 1 using 2
{
TH0=0xC3; // set timer0 C350 = 50,000
TL0=0x50; // posle svakog prekida
counter--; // broj prekide
if(counter == 0) // broj 20 prekida za 1 sec kasnjenja
{
counter = 20;
if(started == 1)
{
if(i < 7) //ako je i<7 deli sa tri brojeve u nizu
if((a[i]/3) ) // deli brojeve u nizu sa 3
display=a[i]; // ako su deljivi, ispisi na displej
i++; // inkrementiranje za novu vrednost u nizu
if(i == 7) // kada se prodju svi elementi u nizu ,resetuj tajmer
{
ET0 = 0; // disable timer 0
TR0 = 0; // stop timer0 - svi u nizu su provereni
started = 0; // started = 0,zaustavi kada se prekidac opet stisne
}
}
}
}
void main(void)
{
Inic();
switcher = 1; // prekidac se startuje na 1
while(1)
{
if(switcher == 0)
if(started == 0)
{
started = 1; // started ide na 1 kada je prekidac pritisnut
i = 0; // postavi i na prvi broj u nizu
counter = 20; // ceka se 1 sekunda
//
TH0=0xC3; // set timer0 na 0xC350
TL0=0x50; // 50,000 decimalno
ET0=1; // enable timer0
TR0=1; // start timer0
}
}
}