سلام.
برنامه زیر را برای کار با وقفه تامیر صفر دانلود کردم و قراره که یک موج مربعی با دوره تناوب 400us با استفاده از وقفه سرریز تولید کند
تعریف وقفه به این صورت است که هنگامی که وقفه رخ داد، اجرای برنامه اصلی متوقف شود و آدرس خط ذخیره شود و زیر برنامه وقفه اجرا شود. بعد از اتمام زیر برنامه وقفه به آدرس ذخیره شده برود. در این برنامه هنگامی که وقفه رخ می دهد برنامه قبل از دستور while است و بعد از انجام سرویس وقفه به دستور while میرسیم که یک حلقه بی نهایت است بنابراین ما تنها باید یک پالس که از صفر به یک تغییر حالت می دهد داشته باشیم.
در شبیه سازی یک موج مربعی داریم.
برنامه زیر را برای کار با وقفه تامیر صفر دانلود کردم و قراره که یک موج مربعی با دوره تناوب 400us با استفاده از وقفه سرریز تولید کند
کد:
#include <mega16.h> #define xtal 8000000 interrupt [TIM0_OVF] void timer0_ovf_isr(void) { PORTA^=0xFF; TCNT0=0x38; //TCNT=55 } void main(void) { DDRA=0xFF; PORTA=0x00; TCCR0=0B00000010; // Timer Clock = CLK/8 TIMSK=0x01; //Enable TIMER0 Overflow Interrupt #asm("sei") // Global enable interrupts TCNT0=0x38; while (1); }
در شبیه سازی یک موج مربعی داریم.
دیدگاه