Sebelumnya saya ucapkan selamat idul adha bagi umat islam diseluruh dunia, semoga momen ini dapat meningkatkan keimanan dan ketakwaan kita kepada Allah SWT aamiin aamiin.
Lanjut ke materi kita hari ini yaitu Membuat delay 1 detik menggunakan timer 0. Teman - teman semua pasti sering menggunakan fungsi delay_ms(nominal); jika compiler yang dipakai adalah CVAVR. Nah pada kesempatan kali ini kita akan mencoba membuat fungsi delay sendiri menggunakan timer 0. Berikut cara selengkapnya :
1. Buat rangkain di simulasi proteus seperti dibawah ini.
2. Langsung ke source codenya saja, klo setting timernya bisa dilihat di Jam Digital Pada Mikrokontroler karena setting timernya hampir sama.
- #include <mega8535.h>
- #include <stdio.h>
- // Alphanumeric LCD Module functions
- #asm
- .equ __lcd_port=0x15 ;PORTC
- #endasm
- #include <lcd.h>
- int limit;
- void _delay_s(int detik);
- int satu_per_seratus;
- bit cek;
- int det;
- char data[20];
- // Timer 0 overflow interrupt service routine
- interrupt [TIM0_OVF] void timer0_ovf_isr(void) // interupsi dijalankan setiap satu per seratus
- {
- // Reinitialize Timer 0 value
- TCNT0=0x94;
- lcd_gotoxy(0,0);
- sprintf(data,"detik = %d",det);
- lcd_puts(data);
- satu_per_seratus++;
- if(satu_per_seratus >= 100) // satu detik = seperseratus * 100;
- {
- det++;
- satu_per_seratus = 0;
- if(det>limit)
- {
- cek=1;
- }
- lcd_clear();
- }
- // Place your code here
- }
- // Declare your global variables here
- void main(void)
- {
- // Declare your local variables here
- // Input/Output Ports initialization
- // Port A 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
- PORTA=0x00;
- DDRA=0x00;
- // 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=0x0F;
- // 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=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
- PORTD=0x00;
- DDRD=0x00;
- // Timer/Counter 0 initialization
- // Clock source: System Clock
- // Clock value: 10,800 kHz
- // Mode: Normal top=FFh
- // OC0 output: Disconnected
- TCCR0=0x05;
- TCNT0=0x94;
- OCR0=0x00;
- // Timer/Counter 1 initialization
- // Clock source: System Clock
- // Clock value: Timer 1 Stopped
- // Mode: Normal top=FFFFh
- // OC1A output: Discon.
- // OC1B output: Discon.
- // Noise Canceler: Off
- // Input Capture on Falling Edge
- // Timer 1 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: Timer 2 Stopped
- // Mode: Normal top=FFh
- // OC2 output: Disconnected
- ASSR=0x00;
- TCCR2=0x00;
- TCNT2=0x00;
- OCR2=0x00;
- // External Interrupt(s) initialization
- // INT0: Off
- // INT1: Off
- // INT2: Off
- MCUCR=0x00;
- MCUCSR=0x00;
- // Timer(s)/Counter(s) Interrupt(s) initialization
- TIMSK=0x01;
- // Analog Comparator initialization
- // Analog Comparator: Off
- // Analog Comparator Input Capture by Timer/Counter 1: Off
- ACSR=0x80;
- SFIOR=0x00;
- // LCD module initialization
- lcd_init(16);
- #asm ("sei")
- while (1)
- {
- // Place your code here
- PORTB = 0b00000001;
- _delay_s(1);
- PORTB = 0b00000010;
- _delay_s(5);
- PORTB = 0b00000100;
- _delay_s(1);
- };
- }
- void _delay_s(int detik) // fungsi delay
- {
- cek = 0;
- limit= detik;
- while(cek!=1);
- det= 0;
- }
Mohon koreksinya yaaa..
Semoga bermanfaat..
Salam Capasitorrr!!!!
Semoga bermanfaat..
Salam Capasitorrr!!!!
No comments:
Post a Comment