以上是我寫的一程序,想要輸出100Hz脈沖,接了個LED大概1秒閃一下。修改T100Hz頻率不會有變化。改CMOD的PCA時鐘源也沒變化。只有改CLK_DIV才變。
#include <reg51.h>
#define FOSC 11059200L
#define T100Hz (FOSC / 4 / 27648)
#define CCP_S0 0x00 //P_SW1.4
#define CCP_S1 0x00 //P_SW1.5
sfr CLK_DIV=0x97;
typedef unsigned int WORD;
void main()
{
WORD value;
CLK_DIV=0x02;
P1M0 = 0x00;
P1M1 = 0x00;
//CCP_S0=0 CCP_S1=0
P_SW1 = 0; //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)
CCON = 0; //初始化PCA控制寄存器
//PCA定時器停止
//清除CF標志
//清除模塊中斷標志
CL = 0; //復位PCA寄存器
CH = 0;
CMOD = 0x01; //設置PCA時鐘源
value = T100Hz;
CCAP0L = value; //P1.1輸出100KHz方波
CCAP0H = value >> 8; //初始化PCA模塊0
CCAPM0 = 0x4d; //PCA模塊0為16位定時器模式,同時反轉CEX0(P1.3)口
CR=1; //一定要這個要不然不輸出!!!!!!!!!!!!!! 不中斷就能不斷輸出了
while (1);
}
|