?? pwm
字號:
/******************************************************************
本程序為PCA16位PWM輸出例程,jp2第2腳為PWM輸出
******************************************************************/
#include <c8051f340.h>
#define uchar unsigned char
#define uint unsigned int
void port_init (void);
void pca_init (void);
bit pca_flag;
uint pwm=0;
void main (void)
{
PCA0MD &= ~0x40; //關(guān)閉看門狗
OSCICN |= 0x03; //使用內(nèi)部12M晶振
port_init (); //端口初始化
pca_init (); //PCA初始設(shè)為16位脈寬
EA=1;
while (1)
{
}
}
/******************************************************************
端口初始化程序
******************************************************************/
void port_init (void)
{ P0SKIP = 0xff; //跳過P0口
P1SKIP = 0x03; //跳過P1.1
XBR1 = 0x42; //將PCA輸出配置到P1.2腳
P1MDOUT |= 0x04; //P1.2配置為推挽輸出
}
/******************************************************************
初始化PCA的CEX0輸出16位PWM信號
******************************************************************/
void pca_init (void)
{
PCA0CN = 0x40; //PCA定時器使能
PCA0CPM0 = 0xc2; //使能16位PWM
PCA0MD = 0x01; //PCA定時器溢出中斷允許
EIE1= 0x10; //允許PCA中斷
pca_flag=0;
}
/******************************************************************
PCA中斷處理程序
******************************************************************/
void pca_isr (void) interrupt 11
{
if(pca_flag==0)
{
PCA0CPL0=(0xff&pwm);
PCA0CPH0=(0xff&(pwm>>8));
pwm+=0x0050;
if(pwm==0xfff0){pca_flag=1;}
}
if(pca_flag==1)
{
PCA0CPL0=(0xff&pwm);
PCA0CPH0=(0xff&pwm>>8);
pwm-=0x0050;
if(pwm==0){pca_flag=0;}
}
CF = 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -