关于STC单片机 CCAPM0&=~PCA0_ECOM无法关闭定时器的问题

本文介绍了一个关于CCAPM0定时器使用的常见错误配置。如果设置CCAP0L和CCAP0H寄存器为0x33且试图通过清除PCA0_ECOM位来关闭定时器,将会导致定时器无法正常关闭。解决此问题的方法是避免初始化这些寄存器值。

如果你将CCAPM0当作定时器使用,请注意在停止前不能

 

CCAP0L=0x33;

CCAP0H=0x33;

CCAPM0&=~PCA0_ECOM;

这样您装无法关闭定时器,您要去掉前两语句才可以。困扰了我两个小时才发现。

 

 

 

 

把这一份程序错误的地方改成正确的 #include "STC8A8K.h" #include <intrins.h> // 硬件定义 #define KEY_PORT P3 // 按键端口 sbit MOTOR_PWM = P2^0; // PWM输出引脚(PCA0) sbit KEY_UP = P3^0; // 加速按键 sbit KEY_DOWN = P3^1; // 减速按键 // 全局变量 unsigned char Key_Value = 0xFF; bit Key_Flag = 0; unsigned int PWM_Duty = 500; // 初始占空比(0-1000对应0%-100%) unsigned int PWM_Period = 1000; // PWM周期 /* 系统时钟初始化(24MHz)*/ void SysClock_Init(void) { P_SW2 |= 0x80; // 扩展寄存器使能 IRC24MCR = 0x80; // 开启内部24MHz时钟 while (!(IRC24MCR & 0x01)); CKDIV = 0x00; // 系统时钟不分频 P_SW2 &= ~0x80; } /* PWM初始化(PCA模块0)*/ void PWM_Init(void) { P_SW1 &= ~0x30; // PCA0输出到P2.0 CCON = 0x00; // 复位PCA控制寄存器 CL = 0x00; // 清空计数器 CH = 0x00; CMOD = 0x08; // PCA时钟源=系统时钟/1(24MHz) CCAPM0 = 0x42; // PWM模式+ECOM使能 // 设置PWM周期(公式推导见下方) CCAP0H = (1000 >> 8); // 周期高8位 CCAP0L = 1000 & 0xFF; // 周期低8位 CR = 1; // 启动PCA计数器 } /* 定时器0初始化(10ms中断)*/ void Timer0_Init(void) { AUXR |= 0x80; // 1T模式 TMOD &= 0xF0; // 16位自动重载 TL0 = (65536 - 24000) % 256; // 10ms定时 TH0 = (65536 - 24000) / 256; ET0 = 1; TR0 = 1; } /* PWM占空比设置函数 */ void Set_PWM_Duty(unsigned int duty) { if(duty > 1000) duty = 1000; PCA_PWM0 = (PCA_PWM0 & ~0x03) | 0x00; // 选择8位PWM模式 CCAP0H = (duty >> 8); // 占空比高8位 CCAP0L = duty & 0xFF; // 占空比低8位 } /* 定时器0中断服务程序 */ void Timer0_ISR() interrupt 1 { static unsigned char count = 0; unsigned char key_temp = KEY_PORT & 0x03; // 消抖逻辑(持续30ms) if(key_temp != Key_Value) { count = 0; Key_Value = key_temp; } else if(count < 3) { count++; } if(count == 3) { Key_Flag = 1; count++; } } /* 主函数 */ void main() { SysClock_Init(); P2M0 = 0x01; // P2.0推挽输出 P3M0 = 0x00; // 按键端口准双向 PWM_Init(); Timer0_Init(); EA = 1; Set_PWM_Duty(PWM_
最新发布
05-13
1、软件说明 ecom串口助手是一款串口(RS232)调试软件。由我爱IC导航网(http://www.52ic.net/)工作室开发。 ecom串口助手支持常用的1200 ~ 921600bps波特率,能设置校验、数据位和停止位,能以ASCII码或十六进 制接收或发送任何数据或字符(包括中文),能发送任意大小的文本文件,可以任意设定自动发送周期, 并能将接收数据保存成文本文件。 是工程师调试单片机串口的好助手工具。 2、软件特点 1、 支持Windows 9x / 2000 / XP / 2003 / Vista / Win7系统; 2、 绿色软件,不需安装。运行解压软件,将压缩包解压到指定目录即可。卸载时只需将程序目录删除; 3、 支持常用的1200 ~ 921600bps波特率; 4、 端口范围是COM1-COM255,支持扩展端口(USB转RS232); 5、 能设置校验、数据位和停止位; 6、 能以字符或十六进制收发数据,支持中文字符的收发; 7、 支持文件数据的发送; 8、 数据发送区允许设置发送周期,自动发送数据; 9、 支持键盘输入,将键盘数据发送到串口; 10、 支持定时保存接收窗口数据,便于查看长时间调试记录信息; 11、 有效的检测通讯错误,避免软件死机(如USB转串口设备拔出检测); 12、 数据接收窗口及文件发送均采用多线程设计,避免软件时机现象。 3、使用许可 本软件为免费软件,许可"个人用户"自由使用,复制和分发此软件包,但要保证此软件包的完整性。您 不能将本软件用于商业目的,如需要商业使用,需得到软件作者的授权许可。 4、关于我爱IC导航网 最专业的电子导航网,IT导航网。我爱IC导航网(http://www.52ic.net)定位为嵌入式行业、IT行业最权 威的分类网站导航网站,力求将最新最好最全的网站推荐给广大从事的IT行业的朋友。网站的宗旨是方便从事 嵌入式行业、IT行业的工程师、采购及管理者快速找到自已需要的网站,而不用去记太多复杂的网址;同时提 供了IC数据手册搜索及知名搜索引擎入口等服务项目,让您轻松愉快的享受网络给您工作带来便利和乐趣。 我爱IC导航网(http://www.52ic.net)主要以电子行业资料为中心,提供丰富的,最常用和快捷的网站链接 和各类工具。其中包括了数据手册搜索,各类电子原厂链接,各家授权代理链接,知名的行业网站链接,技术论 坛链接等,也提供了包括日常使用的工具,如快滤波器计算,三极管开关饱和度计算,在线翻译,天气查询等实 用工具。同时,我爱IC导航网还提供了用户常用的生活链接,如邮箱,音乐,视频,体育,军事等众多知名网站 链接。 我爱IC导航网,技术精灵频道(http://ee.52ic.net)主要是为电子工程师学习嵌入式技术提供良好的平台。 站长及朋友会在本站上写下工作中的经验以供大家学习,同时从网上精选有价值的文章供电子工程师在项目中 参考。网站尽可能的减少广告的投放,保证文章的可阅读性。 5、版权申明 Copyright(C) 2011-2020, 52ic.net All rights reserved. E-Mail: iepixie@126.com WWW : http://www.52ic.net http://ee.52ic.net
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值