Toggle switch u mikroc
Moderators: pedja089, stojke369, [eDo], trax
Toggle switch u mikroc
Pokusavao sam da napravim jednostavnu komandu preko mikroc da mi taster bude start/stop bit .SA start bitom sam hteo da mi se ukljucuje le dioda i da blinka na svavih 1s a na stop da bude iskjucena.Molim iskusne za pocetnicki problem.Koristio sam primer iz mikroc softvera ,uspeo sam da uradim invertovanje ceolog PORTA uz primer sa softvera ali ne i da resim problem mog zahteva,gore pomenutog.Pozdrav i hvala unapred za pomoc.
Re: Toggle switch u mikroc
jos kad bi imali shemu pa da znamo tacno sta zelis, na kom pinu su tasteri ili (taster) na kom su izlazi i koji je to PIC uopste, mozda bi se i moglo pomoci
Re: Toggle switch u mikroc
Izvini, al jedna stvar me zanima: Jel ti išta znaš o digitalnoj elektronici i logičkim operacijama?Drax wrote:uspeo sam da uradim invertovanje ceolog PORTA uz primer sa softvera
Iz citiranog dijela teksta ispada da je čudo programiranja invertirati jedan jedini registar.
Port ti je predstavljen kao jedan običan 8 bitni registar.
Prebacivanje stanja pojedinog pina u registru, koji predstavlja željeni port , možeš radit bit maskom s eor (exor) operacijama, and i (ili) or.
Pozdrav
P.S. Ovdje je nebrojeno puta savjetovano ljudima da se prije upuštanja u bilo kakvo petljane s mikroračunalima (o njima se uglavnom ovdje piše) upoznaju s dokumentacijom, ali osnovama digitalne elektronike. Onda do takvih pitanja jednostavno nebi dolazilo.
Today's scientists have substituted mathematics for experiments, and they wander off through equation after equation, and eventually build a structure which has no relation to reality.
- Nikola Tesla
- Nikola Tesla
Re: Toggle switch u mikroc
bit oldstate;
bit vrednost;
void main() {
TRISA=0X00; //svi pinovi PORTA su izlazni
TRISB= 1; // samo pin RB.0 je ulazni
do {
if (Button(&PORTB,0,1,1))//ako je dugme na portu B na logickoj jedninici oldstate dobija vrednost 1
{
oldstate=1;
}
if (oldstate && Button(&PORTB,0,1,0)) // && poredi dali je oldstate razlicit od nule u odnosu na Button,ako jeste stanje je 1 idi dalje ako nije "cekaj" na sl.promenu
{
oldstate=0;//ako je ispunjen uslov poredjenja olstate ima vrednost 0
vrednost=~vrednost; // na svaku vrednost nule invertuj" vrednost "
}
if(vrednost==1)//ovde sam gresio dodeljivao sam vrednost umesto da poredim dali je 1 i program nije hteo da radi
{
PORTB=0X04;
delay_ms(5);
PORTB=0X00;
delay_ms(5);
}
if(vrednost==0)
{
PORTB=0X00;
}
}while(1);
}
Zamolio bi kolege da ne govore unapred da bi trebao citati logicke operacije ,prosao sam ih davnih dana.Jedno je znati ih teoretski a drugo primeniti ih u programu,nemam uvid u registar pa da vidim kada je koji rezultat i gde postavio.Zamolio bi nekog ako ima jos jednostavnije resenje sa manje linije koda da mi pokaze.Unapred hvala i pozz svima koji se trude da pomognu.Takodje molim za ispravku u komentarima,ako negde gresim.
bit vrednost;
void main() {
TRISA=0X00; //svi pinovi PORTA su izlazni
TRISB= 1; // samo pin RB.0 je ulazni
do {
if (Button(&PORTB,0,1,1))//ako je dugme na portu B na logickoj jedninici oldstate dobija vrednost 1
{
oldstate=1;
}
if (oldstate && Button(&PORTB,0,1,0)) // && poredi dali je oldstate razlicit od nule u odnosu na Button,ako jeste stanje je 1 idi dalje ako nije "cekaj" na sl.promenu
{
oldstate=0;//ako je ispunjen uslov poredjenja olstate ima vrednost 0
vrednost=~vrednost; // na svaku vrednost nule invertuj" vrednost "
}
if(vrednost==1)//ovde sam gresio dodeljivao sam vrednost umesto da poredim dali je 1 i program nije hteo da radi
{
PORTB=0X04;
delay_ms(5);
PORTB=0X00;
delay_ms(5);
}
if(vrednost==0)
{
PORTB=0X00;
}
}while(1);
}
Zamolio bi kolege da ne govore unapred da bi trebao citati logicke operacije ,prosao sam ih davnih dana.Jedno je znati ih teoretski a drugo primeniti ih u programu,nemam uvid u registar pa da vidim kada je koji rezultat i gde postavio.Zamolio bi nekog ako ima jos jednostavnije resenje sa manje linije koda da mi pokaze.Unapred hvala i pozz svima koji se trude da pomognu.Takodje molim za ispravku u komentarima,ako negde gresim.