?? putpwm.c~
字號:
#include <mega16.h>
int zkb;
int zq;
int t1,t2;
// Timer 2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
// Reinitialize Timer 2 value
//每次觸發(fā)為20微秒
TCNT2=0xEC; //反轉值,理論值為0xEC 但是實測值為0xEF 有點沒搞懂 ??
if((--zq)==0)
{
PORTB^=0B00000001; //PORTB.0 反轉
if(PORTB.0==1){
zq=t1;
}else
{
zq=t2;
}
}
}
// Declare your global variables here
void delay_1ms(void); //函數(shù)聲明,本實驗中會用到這兩個函數(shù)
void delay_nms(unsigned int n);
void main(void)
{
int aa=20;
/*初始化參數(shù)*/
zkb=1500;
t1=zkb/20;
t2=(20000-zkb)/20;
zq=t1;
/********************************************/
PORTB=0x00;
DDRB=0x00;
DDRB.0=1; //置為輸出
PORTB.0=1;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 1000.000 kHz
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x02;
TCNT2=0xEF;
OCR2=0x00;
// Timer(s)/Counter(s) Interrrupt(s) initialization
TIMSK=0x40;
// Global enable interrupts
#asm("sei")
while (1)
{
//下面是測試代碼
delay_nms(150);
zkb+=aa;
if(zkb==500||zkb==2500){ //標準應該是1000至2000
aa=-aa;
delay_nms(500);
}
t1=zkb/20;
t2=(20000-zkb)/20;
}
}
void delay_1ms(void)//1ms延時函數(shù)
{
unsigned int i;
for (i=0;i<150;i++)
{
}
}
void delay_nms(unsigned int n)//延時n毫秒
{
unsigned int i;
for (i=0;i<n;i++)//執(zhí)行n次1毫秒延時
delay_1ms();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -