با سلام من یک برنامه نوشتم که هر یک دقیقه یکبار 3 ثانیه ال ای دی رو روشن میکنه و 3 ثانیه خاموش ، برنامه یک دقیققشو با تایمر یک نوشتم و برنامه 3 ثانیشو با delay نرم افزاری حالا اگر بخوام برنامه 3 ثانیشو با تایمر صفر بنویسم چه تغییری باید در برنامه زیر ایجاد کنم ، البته همانطور که در برنامه زیر مشاهده میکیند تا حدی تایمر صفر رو فعال کردم اما از اینجا به بعدشو نمیدونم باید چه کار کنم ممنون میشم راهنمایی بفرمایید .
کد:
#include <mega16.h> #include <delay.h> // Declare your global variables here // Timer 0 overflow interrupt service routine unsigned int i; interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Place your code here } //void led(void) //{ //PORTA.0=1; //delay_ms(3000); //PORTA.0=0; //delay_ms(3000); //} // Timer1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) { i++; if(i>=2) { i=0; PORTA.0=1; delay_ms(3000); PORTA.0=0; delay_ms(3000); } TCNT1H=0xF0; TCNT1L=0xBC; } void main(void) { DDRA.0=1; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 0.977 kHz // Mode: Normal top=0xFF // OC0 output: Disconnected // Timer Period: 0.26214 s TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (1<<CS02) | (0<<CS01) | (1<<CS00); TCNT0=0x00; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 15.625 kHz // Timer Period: 4.1943 s // Timer1 Overflow Interrupt: On TCCR1A=0x00; TCCR1B=0x04; // scale 256 TCNT1H=0xF0; TCNT1L=0xBC; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (1<<TOIE1) | (0<<OCIE0) | (1<<TOIE0); // Global enable interrupts #asm("sei") while (1); }
دیدگاه