STC8学习4 ——PWM波形应用
不要自己傻乎乎的查数据手册,自己琢磨,有例程看例程
1.引入概念PWM方波波形,高电平在波形中占的比例大小就是占空比。
2.PWM控制LED灯亮度,肉眼无法识别PWM波形带来的LED灯明灭交替,看到效果就是LED的亮度变暗。通过PWM波形占空比的大小调整,就可以控制LED灯的明暗程度了。
3.PWM的使用,通过控制占空比从0变到100再变到0,来控制LED从暗变为明,又由明变暗,达到呼吸灯的显示效果。
4.STC8单片机上的每个引脚都可以输出PWM波形
5.1部分寄存器需要允许访问XFR寄存器才能配置,P_SW2最高位EAXFR置1 允许访问XFR寄存器
5.2配置时钟,选择系统时钟不分频。
5.3使能PWM0模块,PWM模块有0到5,一共6组,每组数个
5.4 PWM05CR ,配置PWM05引脚,使能引脚并配置初始电平为低电平
5.5 配置时钟周期和T1 ,T2。 时钟周期是一个波形占用的周期,要按照计数器来理解PWM。 周期 数 就是系统时钟最小间隔执行的次数,执行T1次,电平发生转换,执行T2次,再次翻转。
PWMCFG01中要设置计数器中断归零使能位,同时使能计数器开始计数,确保所有配置项已 配 置完,使能计数器计数后,它就会立刻开始计数。
PWMCFG01的第四位,是计满清零标志位,在中断函数中会用到,相当于多一次判断,确保是计满清零,这个标志位需要手动清零。
6.周期数和T1 T2数通过手动重定义来将其高低位和并,减少代码量。
7.例程里面有一句P_SW2 = 0x00; 我查询说这句是关闭EAXFR,防止XFR寄存器被访问到。但是写入设备后,设备不能正常运行,注释掉后就没问题了。
8.中断函数写的不错
/* 寄存器定义 */
#define PWM0C (*(unsigned int volatile xdata *)0xFF00) //记得改数据类型
#define PWM05T1 (*(unsigned int volatile xdata *)0xFF38)
#define PWM05T2 (*(unsigned int volatile xdata *)0xFF3A)
/* PWM周期 */
#define CYCLE 0x1000
/* PWM中断处理函数 */
void PWM_Isr() interrupt 22
{
static bit dir = 1;
static int val = 0;
if(PWMCFG01 & 0x08)
{
PWMCFG01 &= ~0x08; //清中断标志
if(dir)
{
val++;
if(val >= CYCLE) dir = 0;
}
else
{
val--;
if(val <= 1) dir = 1;
}
PWM05T2 = val;
}
}
/* 主函数 */
void main()
{
P0M0 = 0x00; //设置P0.0~P0.7为双向口模式
P0M1 = 0x00;
/* PWM初始化设置 */
P_SW2 |= 0x80; // 最高位EAXFR置1 允许访问XFR寄存器
PWM0CKS = 0X00; // 选择PWM0的时钟为系统时钟
PWMSET |= 0X01; // 使能PWM0模块
PWM05CR = 0X80; // ENO=1把P0.5引脚设置为PWM引脚 INI=0初始电平是低电平
PWM0C = CYCLE; // 写入周期值
PWM05T1 = 0X0000; // 遇到这个值输出低电平
PWM05T2 = 0X0001; // 遇到这个值输出高电平
PWMCFG01 = 0X05; // PWM0CEN=1开启PWM定时器开始计数
EA = 1; // 打开总中断
while(1)
{
}
STC8学习4 ——PWM波形应用相关推荐
- STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)
本篇文章包含的内容 一.输入捕获 1.1 输入捕获简介 1.2 输入捕获通道的工作原理 1.3 输入捕获的主从触发模式 1.4 输入捕获和PWMI结构 二.频率的测量方法 2.1 测频法 2.2 测周 ...
- 嵌入式学习——使用定时器输出PWM波形,实现 LED呼吸灯的效果
嵌入式学习--使用定时器输出PWM波形,实现 LED呼吸灯的效果 目录 嵌入式学习--使用定时器输出PWM波形,实现 LED呼吸灯的效果 1. 任务要求 2 PWM波介绍, 2.1 什么是PWM(Pu ...
- 嵌入式学习--使用定时器输出PWM波形,实现LED呼吸灯的效果
目录 1.任务要求 2.PWM介绍 关于PWM的定义 分频-计数时钟 计数器 定时器输出PWM的原理 定时器的初始化 3.配置STM32CubeMX 4.keil5的代码 5.运行结果 6.心得与体会 ...
- STM32输出PWM波形并实现呼吸灯
文章目录 一.环境配置 二.PWM简介 三.使用STM32CubeMX配置工程 四.使用Keil配置代码 五.运行效果 六.用Keil自带的逻辑仿真器观察占空比 七.总结 八.参考资料 一.环境配置 ...
- STM32F103C8T6核心开发板下,通过TIM3和TIM4输出PWM波形实现2个 LED呼吸灯的效果
使用TIM3和TIM4,分别输出一个PWM波形,驱动一个外接的LED灯以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果 文章目录 使用TIM3和TIM4 ...
- 基于STM32的MDK软件仿真输出PWM波形
文章目录 一.PWM相关 1.PWM是什么 2.PWM原理 3.PWM应用 4.PWM信号输出 二.实验相关 1.实验要求 2.实验过程 (1)实验代码 (2)Keil仿真设置 (3)实验结果 三.总 ...
- 蓝桥杯单片机学习7——PWM脉宽调制控制LED的亮度
上期我们学习了定时器的相关内容,这次我们来学习PWM脉宽调制 什么是PWM PWM(Pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有 ...
- 蓝桥杯STM32G431RBT6学习——定时器PWM输出
蓝桥杯STM32G431RBT6学习--定时器PWM输出 前言 PWM波输出作为定时器的一个常用功能,也属于高频的考点.从数据手册的定时器解析可以了解到(上篇描述):除了基本定时器(TIM6.7)外, ...
- 使用STM32输出PWM波形LED呼吸灯的效果
文章目录 前言 一.PWM简介 1.1 关于PWM 1.2 使用步骤 二.使用STM32CUBEMX实现2个 LED呼吸灯的效果 2.1.配置环境 2.2 代码配置 2.3.输出PWM波形 2.4 呼 ...
最新文章
- 一场“正宗”的开发者大会,为什么说微软更像是“AII in AI”了?
- WIN2008 R2 Active Directory 之一 部署企业中第一台Windows Ser
- 电缆的选择及载流量的计算,超实用~
- jpages中文api
- php get验证,PHP+Ajax简单get验证操作示例
- C#隐式类型和显示类型
- php实现观看记录,PHP实现浏览历史记录
- java高级工程师简历模板,MySQL+Tomcat+JVM,看完还怕面试官
- win7(SP1 64位)升级IE浏览器升级到IE11
- mysql数据库增量_mysql数据库增量同步
- V.PhyloMaker:维管束植物系统发育树构建实践
- Layui 表单设计器
- 红外光电测速传感器电路设计
- 两种方法实现文字阴影效果
- 服务器测速文件,云服务器测速代码
- 艾滋hiv最新研究进展(2022年4月)
- vue如何把值放入数组里面去_vue的数组如何存储数据
- 中移动TD-LTE及对终端的要求
- Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder
- DAO,除了协议、社交、媒体、服务之外还能发展哪个领域?
热门文章
- P110 03-掌握vue-router懒加载的使用
- STM8L低功耗设置,深坑。。。
- 从小米上市了解CDR和“同股不同权”
- chrome 一进入调试页面就会自动打断点
- 计算机不支持超过2tb的硬盘,适用于超过 2.2TB 容量硬盘的英特尔快速存储技术 (RST) 驱动程序和支持...
- java poi生成的word表格在wps中的显示问题
- NC15128 老子的全排列呢 dfs 全排列 (何以解忧,唯有暴搜)
- swift TextView
- 供应链管理的理论和方法大揭秘
- 量化风控系列--风险定价(一)