?? pwm-8.c
字號:
//===================================================================================
//PCA工作在8位脈寬調(diào)制器工作方式,在PWM引腳輸出一個占空比為0<-->0xfe的PWM
//信號且重復輸出,可用示波器觀察占空比變化。
//實驗時短接J12的1,2引腳.
//-----------------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------------
#include <c8051f310.h> // SFR declarations
#include <INTRINS.H>
#include <stdio.h>
//------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------
void PORT_Init (void);
void PCA_Init (void);
void PCA_ISR (void);
//------------------------------------------------------------------------------------
// MAIN Routine
//------------------------------------------------------------------------------------
void main (void)
{
unsigned long b;
/*關(guān)看門狗*/
PCA0MD &= ~0x40; // WDTE = 0 (watchdog timer enable bit)
OSCICN |= 0x03; // Set internal oscillator to highest
// setting (24500000)
PORT_Init (); /*初始化I/O口*/
PCA_Init (); /*PCA初始化成8位脈寬調(diào)置方式*/
EIE1= 0x10;
EA=1;
PCA0CPH0=0x20;
while (1)
{
for(b=0;b>0xffffffff;b++)//延時
{
_nop_();
}
}
}
//配置I/O端口
void PORT_Init (void)
{ P0SKIP =0xff;
P1SKIP = 0x3f;
XBR1 = 0x42; /*CEX0-->P1.6*/
P1MDOUT |= 0x40; /*使能P1.6腳推挽輸出*/
}
//配置PCA的CEX0輸出8位PWM信號
void PCA_Init (void)
{
PCA0CN = 0x40;
PCA0CPM0 = 0x42; //pwm-8模式
PCA0CPL0 = 0x00;
PCA0CPH0 = 0x00;
//PCA0CPL4 = 0x00;
//PCA0MD &= 0x40;
PCA0MD = 0x01; //pca計數(shù)器/定時器溢出中斷允許
}
//-------------------------------
void PCA_ISR (void) interrupt 11
{ unsigned char a ;
bit PWM_PAC;
CF = 0;
if(PWM_PAC==0) //占空比由0 >>0xfe
{
PCA0CPH0=a;
a++;
if(a==0xfe){PWM_PAC=1;}
}
else //占空比由0xfe >>0
{
PCA0CPH0=a;
a--;
if(a==0){PWM_PAC=0;}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -