#include <p30f2010.h> //เปิดใช้งานไลบรารี dspic30F2010
#include<OutCompare.h> //เปิดใช้งานไลบรารี compare
_FOSC(CSW_FSCM_OFF & XT_PLL4); // โหมดการทำงาน แบบ XT คริสตอล 4 - 10 MHz มี PLLx4 คือ ทวีคูณความถี่ของ clock 4 เท่า
_FWDT(WDT_OFF); //ปิดการทำงาน watchdog Timer
void delay_ms(unsigned int ms){ //ฟังก์ชัน delay ms
unsigned int i;
for(; ms>0; ms--)
for(i=0; i<728; i++)
Nop();
}
void _ISR _OC1Interrupt(void){ //ฟังก์ชัน compare interrupt
_OC1IF = 0; //Clear register Compare interrupt
}
void OC1_init() //ฟังก์ชัน compare
{
CloseOC1();
OpenOC1(OC_IDLE_CON&
OC_TIMER2_SRC& //ใช้ Timer2 เป็นตัวป้อน clock
OC_PWM_FAULT_PIN_DISABLE,0,0); //เปิด PWM ที่พอร์ต OC
TMR2 = 0x0000; //Clear Timer2
T2CON = 0x8030; //Prescale 1:256
}
int main(void)
{
OC1_init(); //เรียกใช้ฟังก์ชัน Compare
for(;;){ //For loop
PR2 = 287; //ต้องการความถี่ 100Hz ดังนั้น period = 0.01 ms. สามารถหาค่า PR2 ได้จาก
SetDCOC1PWM(144); //ต้องการ Duty cycle 50% ดังนั้น หาค่าได้ดังนี้
}
return 0; //Reset ค่าเริ่มต้น
}