(Gambar Sistem Minimum)
Tadi pagi seharusnya saya ada ujian mikroprosesor. Saya kurang tau entah itu ujian MID semester atau ujian harian biasa yang pasti ujian praktek, hehe maklum kalau pas lagi kuliah saya terlalu serius praktik jadi kurang memperhatikan dosenya #praktek main game CS wkwk. Tapi yang tak saya sangka-sangka dan tak saya duga-duga sebelumnya, ternyata di daerah karangmalang dan sekitarnya (lokasi kampus saya) ada pemadaman mulai jam 08.00-16.00 WIB dan kebetulanya Genset di kampus saya juga trouble sehingga ujian pun ditunda minggu depan. Hash, spontan saya terenyuh sedih, karena ternyata perjuangan saya di malam sebelumnya sia-sia setelah saya lembur belajar sampai jam 2 pagi.
Yah, tapi tak apa lah, yang penting sekarang saya menjadi lebih paham tentang mikroprosesor. Nah sekarang saya ingin berbagi dengan anda sekalian tentang hasil belajar saya tadi malam agar belajar saya tidak hanya bermanfaat bagi diri saya sendiri tetapi bermanfaat pula bagi orang banyak.Amin :)
berikut soalnya :
- Terdapat 5 buah motor dengan 3 buah saklar, dengan cara kerja : apabila saklar satu ditekan maka motor akan jalan begantian dengan urutan motor ke 1,2,3,4,dan 5 kemudian berulang terus menerus mulai dari 1 dan apabila saklar 2 ditekan maka motor dalam posisi apapun akan berhenti/pause. apabila saklar 1 ditekan kembali maka motor akan berjalan melanjutkan jalannya dari posisi yang terakhir. apabila saklar 3 ditekan maka motor akan mati/ berhenti. (Sumber : Bocoran soal dari kelas sebelah.hehe)
Penyelesaian :
Diketahui :
5 buah motor, 3 saklar
jika saklar 1 ON maka motor nyala berurutan 1-5 dan berulang terus
jika saklar 2 ditekan maka PAUSE
jika saklar 1 ditekan lagi maka motor akan berlanjut jalan
jika saklar 3 ditekan maka akan mati total
berikut gambar skematik simulasi rangkaiannya :
gambar di atas menunjukan inputan berada pada kaki-kaki PIN D dan output pada kaki-kaki PIN A.
saya memilih inputan pada kaki PIN D karena pada program,saya menggunakan interupt eksternal dimana pin interupt berada pada kaki-kaki PIND.2 dan PIND.3
saya memilih inputan pada kaki PIN D karena pada program,saya menggunakan interupt eksternal dimana pin interupt berada pada kaki-kaki PIND.2 dan PIND.3
berikut programnya :
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 12/10/2012
Author : Sh.mukti
Company : Jangan gunakan software bajakan!
Comments:
Chip type : ATmega16
Program type : Application
AVR Core Clock frequency: 12.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include
#include
unsigned char x,y,z;
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
while (1)
{
if ((PIND.0==0)&&(y=1))
goto a;
}
a:
}
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Place your code here
/* while(1)
{
PORTA=0b11111111;
if (PIND.1==0)
goto b;
} */
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTA=0xFF;
DDRA=0xFF;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P
PORTD=0xFF;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// 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;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Low level
// INT1: On
// INT1 Mode: Low level
// INT2: Off
GICR|=0xC0;
MCUCR=0x00;
MCUCSR=0x00;
GIFR=0xC0;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
// Global enable interrupts
#asm("sei")
x=1;
while ((PIND.0==1)&&(x=1))
{}
b:
y=1;
while (1)
{
// Place your code here
PORTA=0b11111110;
delay_ms(1000);
if (PIND.1==0)
goto a;
PORTA=0b11111101;
delay_ms(1000);
if (PIND.1==0)
goto a;
PORTA=0b11111011;
delay_ms(1000);
if (PIND.1==0)
goto a;
PORTA=0b11110111;
delay_ms(1000);
if (PIND.1==0)
goto a;
PORTA=0b11101111;
delay_ms(1000);
if (PIND.1==0)
goto a;
}
a:
z=1;
while (1)
{PORTA=0b11111111;
if ((PIND.0==0)&&(z=1))
goto b;
}
}
Selamat Mencoba :)
{ 0 komentar... read them below or add one }
Posting Komentar