/**************************************************************************************
实验现象: 下载程序后,使用示波器可测得P1.7口输出的是占空比为50%的脉冲信号,
P1.6口输出的是占空比为87.5%的脉冲信号
接线说明:
注意事项: USB连接线给开发板通电下载程序,STC下载软件中内部IRC时钟选择11.0592MHZ
***************************************************************************************/
#include "STC8.H"
#include "intrins.h"
#define MAIN_Fosc 11059200L //定义主时钟
#define uint8 unsigned char
#define uint16 unsigned int
#define uint32 unsigned long
/**************************************
功能描述:延时函数
入口参数:uint16 x ,该值为1时,延时1ms
返回值:无
***************************************/
void delay_ms(uint16 x)
{
uint16 j,i;
for(j=0;j<x;j++)
{
for(i=0;i<1100;i++);
}
}
/***********************
功能描述:PCA初始化
入口参数:无
返回值:无
************************/
void PCAInit(void)
{
P_SW1 &= 0xCF; //选择PCA模块0为引脚P1.7,选择PCA模块1为引脚P1.6
//选择PCA模块2为引脚P1.5,选择PCA模块3为引脚P1.4
CCON = 0x00; //CF、CR、CCF3、CCF2、CCF1、CCF0位均清零
CMOD &= 0x7F; //CIDL位置0,空闲模式下PCA计数器仍然工作
CMOD &= 0xF1; //CP2、CP1、CP0设置为100,PCA时钟源选择为系统时钟
CMOD |= 0x08; //CP2、CP1、CP0设置为100,PCA时钟源选择为系统时钟
CMOD &= 0xFE; //ECF位置0,禁止寄存器CCON中CF位中断(禁止PCA计时中断)
CL = 0x00; //PCA计数器赋初值
CH = 0x00; //PCA计数器赋初值
//PCA模块0初始化部分
CCAPM0 |= 0x40; //ECOM0位置1,允许比较器功能
CCAPM0 &= 0xDF; //CAPP0位置0,禁止上升沿捕获
CCAPM0 &= 0xEF; //CAPN0位置0,禁止下降沿捕获
CCAPM0 &= 0xF7; //MAT0位置0,禁止匹配控制位
CCAPM0 &= 0xFB; //TOG0位置0,禁止翻转控制位
CCAPM0 |= 0x02; //PWM0位置1,开启PWM模式
CCAPM0 &= 0xFE; //ECCF0位置0,禁止CCF0中断
PCA_PWM0 &= 0xBF; //PCA模块0工作于6位PWM功能
PCA_PWM0 |= 0x80; //PCA模块0工作于6位PWM功能
CCAP0L = 0x20; //PWM占空比为50%
CCAP0H = 0x20; //PCA比较值寄存器赋初值
//PCA模块1初始化部分
CCAPM1 |= 0x40; //ECOM1位置1,允许比较器功能
CCAPM1 &= 0xDF; //CAPP1位置0,禁止上升沿捕获
CCAPM1 &= 0xEF; //CAPN1位置0,禁止下降沿捕获
CCAPM1 &= 0xF7; //MAT1位置0,禁止匹配控制位
CCAPM1 &= 0xFB; //TOG1位置0,禁止翻转控制位
CCAPM1 |= 0x02; //PWM1位置1,开启PWM模式
CCAPM1 &= 0xFE; //ECCF1位置0,禁止CCF0中断
PCA_PWM1 &= 0x3F; //PCA模块0工作于8位PWM功能
CCAP1L = 0x20; //PWM占空比为87.5%
CCAP1H = 0x20; //PCA比较值寄存器赋初值
CR = 1; //启动PCA计数器阵列计数
}
/***************************************************************************
* 描 述 : 主函数
* 入 参 : 无
* 返回值 : 无
**************************************************************************/
int main()
{
PCAInit(); //PCA模块初始化
while(1)
{
}
}