 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
compaq1994 Član


Pridružen-a: Sob 05 Feb 2011 19:38 Prispevkov: 40 Aktiv.: 0.23 Kraj: Kamnik
|
Objavljeno: Sob Dec 21, 2013 12:42 am Naslov sporočila: En enostaven programček... |
|
|
Zdravo imam probem
Napisati moram programček v programu Code Vision in ga potem prevesti v Asembler oz. ga napisati takoj v asembler.
Imam tudi ploščico(Attiny 2313) s štirimi tipkami(PIND) in 8 led diodami(PORTB)
1. Led diode gorijo(vseh 8)
2. Pritisnem tipko 1 in jo držim in led diode začnejo utripati(100ms)
3. Tipko spustim, spet gori vseh 8 led diod
4. Pritisnem tipko 2 in jo držim in led diode začnejo utripati(200ms)
5. Tipko spustim, spet gori vseh 8 led diod
6. Pritisnem tipko 3 in jo držim in led diode začnejo utripati(500ms)
7. Tipko spustim, spet gori vseh 8 led diod
8. Pritisnem tipko 4 in jo držim in led diode začnejo utripati(1sekunda)
9. Tipko spustim, spet gori vseh 8 led diod
Trenutno imam v Code Visnu napisano tole, vendar je problem, da mene program čaka, da pritisnem tipke in vse led diode ne gorijo, ima kdo kako idejo?
Koda: |
#include <tiny2313.h>
#include <delay.h>
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x9E;
if(PIND.0==1)
{
delay_ms(100);
{
PORTB ^= 0b11111111;
}
}
if(PIND.1==1)
{
delay_ms(200);
{
PORTB ^= 0b11111111;
}
}
if(PIND.2==1)
{
delay_ms(500);
{
PORTB ^= 0b11111111;
}
}
if(PIND.3==1)
{
delay_ms(1000);
{
PORTB ^= 0b11111111;
}
}
}
// Declare your global variables here
void main(void)
{
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;
// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=P State5=P State4=P State3=P State2=P State1=P State0=P
PORTD=0x7F;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 0,977 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0x9E;
OCR0A=0x00;
OCR0B=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
GIMSK=0x00;
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x02;
// Universal Serial Interface initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
};
}
|
[/code] |
|
Nazaj na vrh |
|
 |
S53DZ Član



Pridružen-a: Čet 28 Apr 2011 9:27 Prispevkov: 951 Aktiv.: 5.53 Kraj: Ljubljana
|
Objavljeno: Sob Dec 21, 2013 11:33 am Naslov sporočila: |
|
|
Samo droben namig:
če imaš LED vezano neposredno iz + na izhod, upoštevaj, da bo svetila le, kadar bo izhod na LOW. |
|
Nazaj na vrh |
|
 |
papagaj93 Član

Pridružen-a: Pon 06 Jun 2011 22:50 Prispevkov: 708 Aktiv.: 4.15 Kraj: Nova Gorica
|
Objavljeno: Sob Dec 21, 2013 12:32 pm Naslov sporočila: |
|
|
Kot je že predhodnik povedal, obrni stanje PORTB v mirovanju.
LP Rok |
|
Nazaj na vrh |
|
 |
compaq1994 Član


Pridružen-a: Sob 05 Feb 2011 19:38 Prispevkov: 40 Aktiv.: 0.23 Kraj: Kamnik
|
Objavljeno: Sob Dec 21, 2013 1:26 pm Naslov sporočila: |
|
|
Mi lahko poveste v kateri vrstici naj to spremenim, ker sem res začetnik in se še učim , hvala  |
|
Nazaj na vrh |
|
 |
S53DZ Član



Pridružen-a: Čet 28 Apr 2011 9:27 Prispevkov: 951 Aktiv.: 5.53 Kraj: Ljubljana
|
Objavljeno: Sob Dec 21, 2013 1:48 pm Naslov sporočila: |
|
|
Malo v pomoč:
1. kodo, ki si jo najbrž spisal za uporabo tipk in je sedaj na začetku programa spada na dno v zanko, kjer te v to prepričuje zapis "Place your code here".
2. inicializacija portov B se lahko glasi: PORTB = 0b00000000;
3. izraz PORTB ^= 0b11111111; pomeni alterniranje vrednosti izhodov, ker je uporabljena funkcija "bitwise EOR".
4. tudi tipke so najbrž LOW, ko so pritisnjene!? |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Sob Dec 21, 2013 3:59 pm Naslov sporočila: Re: En enostaven programček... |
|
|
Koda: |
1. Led diode gorijo(vseh 8)
2. Pritisnem tipko 1 in jo držim in led diode začnejo utripati(100ms)
3. Tipko spustim, spet gori vseh 8 led diod
4. Pritisnem tipko 2 in jo držim in led diode začnejo utripati(200ms)
5. Tipko spustim, spet gori vseh 8 led diod
6. Pritisnem tipko 3 in jo držim in led diode začnejo utripati(500ms)
7. Tipko spustim, spet gori vseh 8 led diod
8. Pritisnem tipko 4 in jo držim in led diode začnejo utripati(1sekunda)
9. Tipko spustim, spet gori vseh 8 led diod
// Global enable interrupts
#asm("sei")
while (1) // Dokler je pogoj znotraj () TRUE, bo delalo to, kar je znotraj {} //
{
// Place your code here
while(PIND.0==1)
{
PORTB ^= 0b11111111;
delay_ms(100);
}
while(PIND.1==1)
{
PORTB ^= 0b11111111;
delay_ms(200);
}
while(PIND.2==1)
{
PORTB ^= 0b11111111;
delay_ms(500);
}
while(PIND.3==1)
{
PORTB ^= 0b11111111;
delay_ms(1000);
}
PORTB = 0b11111111; // Ce ni nic pritisnjeno, pa svetijo vse
}
|
Jaz sem dal kar while, a tam lahko daš while, ali if.
Če bo while, bo programček krožil samo znotraj {}. Če daš if, bo pa naredil {}, nato pa šel preverit naslednji if. Pri while lahko držiš vse tipke, delal bo pa tisti {}, ki je bil prvi zaznan. Če boš pritisnil vse tipke pri if bo pa zanimiv svetlobni efekt. Malo se igraj. _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|