【STC8学习笔记】STC8A8K64S4A12配置PCA_PWM输出

管脚图
我使用的是LQFP48封装的为例子
请添加图片描述
相关功能引脚说明见芯片手册P35页
请添加图片描述

例程代码

#include <STC8.h>

//测试工作频率为11.0592MHz

//数据类型宏定义
#define uchar unsigned char
#define uint unsigned int

//PCA输入时钟频率宏定义
#define PCA_Clock12 	0x00	//PCA输入时钟源为系统时钟/12
#define PCA_Clock2		0x02	//PCA输入时钟源为系统时钟/2
#define PCA_ClockTimer	0x04	//PCA输入时钟源为定时器溢出脉冲
#define PCA_ClockECL	0x06	//PCA输入时钟源为ECL脚输入时钟
#define PCA_Clock		0x08	//PCA输入时钟源为系统时钟
#define PCA_Clock4		0x0a	//PCA输入时钟源为系统时钟/4
#define PCA_Clock6		0x0c	//PCA输入时钟源为系统时钟/6
#define PCA_Clock8		0x0e	//PCA输入时钟源为系统时钟/8

//PCA启动、停止计数命令宏定义
#define PCA_START		1		//PCA启动计数
#define PCA_STOP		0		//PCA停止计数

//PCA模块PWM位数控制宏定义
#define PCA_PWM6_EBSn	0x80	//PCA模块输出6位PWM控制位
#define PCA_PWM7_EBSn	0x40	//PCA模块输出7位PWM控制位
#define PCA_PWM8_EBSn	0x00	//PCA模块输出8位PWM控制位


//PCA时钟初始化
void PCA_ClockInit(void)
{
	CCON = 0x00;
    CMOD = PCA_Clock;	//设置PCA时钟
    CL = 0x00;
    CH = 0x00;
}

//PCA模块0PWM初始化
void PCA0_PWM_Init(void)
{
	PCA_ClockInit();
	CCAPM0 = 0x42;				//PCA模块0为PWM工作模式
    PCA_PWM0 = PCA_PWM6_EBSn;
    CCAP0L = 0x00;
    CCAP0H = 0x00;
}

//PCA模块1PWM初始化
void PCA1_PAM_Init(void)
{
	PCA_ClockInit();
	CCAPM1 = 0x42;				//PCA模块1为PWM工作模式
    PCA_PWM1 = PCA_PWM7_EBSn;	//PCA模块1输出7位PWM
    CCAP1L = 0x00;
    CCAP1H = 0x00;
}

//PCA模块2PWM初始化
void PCA2_PAM_Init(void)
{
	PCA_ClockInit();
	CCAPM2 = 0x42;				//PCA模块2为PWM工作模式
    PCA_PWM2 = PCA_PWM8_EBSn;	//PCA模块2输出8位PWM
    CCAP2L = 0x00;
    CCAP2H = 0x00;
}

/***************************************
 *函数名称:void PCA0_PWM_Set(uchar pwm)
 *函数输入:PWM位数,占空比输入
 *函数返回:无
 *函数说明:6位PWM计算公式50%[(40H-20H)/40H]
 *			7位PWM计算公式50%[(80H-40H)/80H]
 *			8位PWM计算公式50%[(100H-50H)/100H]
 ***************************************/
void PCA0_PWM_Set(uint pwm)
{
	CCAP0L = pwm;
	CCAP0H = pwm;
}

/***************************************
 *函数名称:void PCA1_PWM_Set(uchar pwm)
 *函数输入:PWM位数,占空比输入
 *函数返回:无
 *函数说明:6位PWM计算公式50%[(40H-20H)/40H]
 *			7位PWM计算公式50%[(80H-40H)/80H]
 *			8位PWM计算公式50%[(100H-50H)/100H]
 *			10位PWM计算公式50%[(400H-200H)/400H]
 ***************************************/
void PCA1_PWM_Set(uint pwm)
{
	CCAP1L = pwm;
    CCAP1H = pwm;
}

/***************************************
 *函数名称:void PCA1_PWM_Set(uchar pwm)
 *函数输入:PWM位数,占空比输入
 *函数返回:无
 *函数说明:6位PWM计算公式50%[(40H-20H)/40H]
 *			7位PWM计算公式50%[(80H-40H)/80H]
 *			8位PWM计算公式50%[(100H-50H)/100H]
 *			10位PWM计算公式50%[(400H-200H)/400H]
 ***************************************/
void PCA2_PWM_Set(uint pwm)
{
	CCAP2L = pwm;
    CCAP2H = pwm;
}


//启动或停止PCA计数器
//输入PCA_START启动PCA计数器,输入PCA_STOP停止PCA计数器
void PCA_Control(bit i)
{
	CR = i;
}

void main()
{
	PCA0_PWM_Init();		//PCA模块0 PWM工作模式初始化
	PCA0_PWM_Set(0x20);		//设置占空比50%
	
	PCA1_PAM_Init();		//PCA模块1 PWM工作模式初始化
	PCA1_PWM_Set(0x40);		//设置占空比50%
	
	PCA2_PAM_Init();		//PCA模块2 PWM工作模式初始化
	PCA2_PWM_Set(0x80);		//设置占空比50%

	PCA_Control(PCA_START);		//启动PCA计数器
    while (1);
}

端口PWM示波器扫描结果
P1.7
请添加图片描述
P1.6请添加图片描述
P1.5
请添加图片描述

STC8A8K64S4A12单片机开发板软硬件技术资料+软件DEMO例程源码: 01参考程序 02原理图与结构图纸 STC8 使用手册.pdf STC8系列单片机技术参考手册-20170517.pdf 文件资料 01-P33口LED灯运行 02-P2口跑马灯实验 03- 定时器0 模式0 04- 定时器1 模式0 05-定时器2 06- 看门狗实验 06-定时器0 P35模拟10或16PWM输出程序 08-串口1发送 8自动重装载 09-串口1收发 8自动重装载 10-串口1仅发 16重装载 11- 串口1收发 16重装载 12-外部中断 1 13 模拟I2C读写24C 串口监测 14-外部FLASH读写 串口监测 15-中景园电子0.96OLED显示屏IIC_例程 15-中景园电子0.96OLED显示屏IIC_例程.zip 16-中景园电子0.96OLED显示屏SPI_例程 16-中景园电子0.96OLED显示屏SPI_例程.zip 17-中景园电子0.96OLED显示屏0.96OLED带字库 17-中景园电子0.96OLED显示屏0.96OLED带字库.zip 18-中景园电子1.44寸LCD-51(图片显示) 19-中景园电子1.8寸LCD-51(模拟SPI中文显示) 20-中景园电子2.4寸不带触摸51单片机测试(要求大于16K ROM的单片机) 21-中景园电子3.5寸FTFT_LCD_SPI接口 12864详细中文资料.pdf 1602中文资料.doc 1838红外接收头.pdf 24c0系列.pdf AMS1117.pdf C数组、BIN、BMP图片制作 elh.pdf DS18B20.pdf FAT及FATFS资料 I2C.doc ILI9325DS_ID9325.pdf MMA7361.pdf MMA7361L.pdf NRF24l01模块说明书.pdf PCB设计资料.pdf sd卡读写.pdf SD卡资料.pdf UCOS+UCGUI学习资料 UG-2864HSWEG01 user guide.pdf W25X16中文手册.pdf XPT2046中文资料.pdf 关于舵机的死区.txt 红外遥控器编码大全.pdf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小明n.n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值