HC89S003F4开发板端口消抖

一、前言

看到资料里有中断消抖的例子,因为以前项目里有遇到高频干扰频繁退出休眠的情况,所以好奇用这个配置能不能解决。

二、对demo进行修改

  • @实现效果 P01设置为下降沿中断,每进一次中断后唤醒掉电模式,LED1状态改变一次
void main()
{
/************************************系统初始化****************************************/
WDTCCR = 0x00; //关闭看门狗
//本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
CLKSWR = 0x51; //选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHz
CLKDIV = 0x01; //Fosc 1分频得到Fcpu,Fcpu=16MHz
/**********************************相关配置初始化**************************************/
P0M0 = P0M0&0xF0|0x08; //P00设置为推挽输出
/**********************************INT1配置初始化**************************************/
FREQ_CLK = 0x10; //本例程涉及掉电模式,需指明当前系统时钟
P0M0 = P0M0&0x0F|0x60; //P01设置为上拉带施密特输入
P01DBC = 0xFF; //设置消抖时间
//消抖时间计算
//分频系数*Tosc*P0xDBCT[5:0]-Tosc<消抖时间<分频系数*Tosc*(P0xDBCT[5:0]+1)-Tosc
// 64*0.0625us*63-0.0625us<消抖时间<64*0.0625us*(63+1)-0.0625us
// 251.9375us<消抖时间<255.9375us
PITS0 |= 0x04; //INT1下降沿
IE |= 0x04; //打开INT1中断
EA = 1; //打开总中断 while(1)
{
PCON |= 0x02; //进入掉电模式
}
} /***************************************************************************************
* @说明 INT1中断服务函数
* @参数 无
* @返回值 无
* @注 无
***************************************************************************************/
void INT1_Rpt() interrupt INT1_VECTOR
{
PINTF0 &=~ 0x02; //清除INT1中断标志位
P0_0 =~ P0_0; //P00翻转
}

三、实现效果

  • P0.1引脚用线引出,线另一端刮划GND,发现每次刮划,led就会多次闪烁。
  • 注释'PCON |= 0x02;',能正常消抖,每次刮划,led只一次亮或灭。

四、进入掉电模式,消抖功能实现的原因

由此可以看出消抖功能电路是用系统时钟作为基准,当进入掉电模式后系统时钟会关闭,因此消抖功能失效。

使用空闲模式,可以使用消抖功能,但同时功耗和时钟成正比,需要权衡利弊。

【HC89S003F4开发板】 4端口消抖的更多相关文章

  1. 【HC89S003F4开发板】 1环境搭建

    HC89S003F4开发板环境搭建 一.概述 芯圣电子做活动,一个开发板只用一块钱,买过来玩玩.︿( ̄︶ ̄)︿ 全套资料可以在论坛或qq群里下载.总之先安装个环境先. 二.安装Keil C51 作为增 ...

  2. 【HC89S003F4开发板】 10汇编指令

    HC89S003F4开发板汇编指令 一.数据传递类指令 MOV.MOVC.MOVX 1.MOV,用于片内数据存储器中的数据传递指令中. 2.MOVC是与ROM之间的数据传送,而MOVX是与外部RAM数 ...

  3. 【HC89S003F4开发板】9ASM写定时器1

    HC89S003F4开发板ASM写定时器1 一.实现过程 1.外部寄存器设置 扩展 XSFR 采用和 XRAM 同样的访问方式,使用 MOVX A, @DPTR 和 MOVX @DPTR ,A 来进行 ...

  4. 【HC89S003F4开发板】 8c转义成汇编工程

    HC89S003F4开发板建立汇编工程 选择编译文件 @选用开发板闪灯例程,将例程删除多余的注释,后面生成的文件会更直观. #define ALLOCATE_EXTERN #include " ...

  5. 【HC89S003F4开发板】 7ASM&C混合编程

    HC89S003F4开发板ASM&C混合编程 一.前言 在配套资料里有实现ASM&C混合编程的说明文档,这里来实现这个功能. 二.实现ASM&C混合编程 1.打开 Keil 工 ...

  6. 【HC89S003F4开发板】 2调度器

    HC89S003F4开发板调度器调试 一.前言 逛论坛看到有人给HC89做了调度器,调度部分直接操作堆栈的. 下载链接 下载下来调试看看. 二.用户代码 @实现效果 编译后led灯闪烁 #includ ...

  7. 【HC89S003F4开发板】 6crc校验

    HC89S003F4开发板crc校验 前言 第一次用有带crc的mcu 使用资料自带的demo @实现效果 通过PC向MCU发送5个8位数据,MCU返回CRC校验值 void main() { /** ...

  8. 【HC89S003F4开发板】 3串口调试

    HC89S003F4开发板串口调试 使用资料自带的demo 主程序 /************************************系统初始化************************ ...

  9. 01.arduino uno开发板入门

    01.所需工具 -Ariduino uno开发板一块 -对应的usb数据线 -杜邦线若干 -一些用以测试的电子元器件 02.安装arduino IDE 打开官网链接https://www.arduin ...

随机推荐

  1. HearthBuddy修改系统时间

    将以下代码保存在.bat文件,然后用管理员权限运行 pushd "%~dp0" #下面修改时间,根据操作系统的语言不同,会有不同的格式,比如2019-10-26date 10/26 ...

  2. 优化Unity游戏项目的脚本(上)

    本文将由捷克独立游戏工作室Lonely Vertex的开发工程师Ondřej Kofroň,分享C#脚本的一系列优化方法,并提供改进Unity游戏性能的最佳实践. 在开发游戏时,我们遇到了游戏过程中偶 ...

  3. onenote 每天输入网络密码

    1.问题:只局限 内网 笔记本的弹出输入远程内网服务器用户名密码的情况,每次重启电脑后又会要求输入,否则同步失败 2.解决 控制面板-windows用户-凭据管理器-添加凭据-从上到下一次输入  ip ...

  4. 用java输出杨辉三角

    杨辉三角:它的两个边都是1,内部其它都是肩上两个数的和 第一种: package aaa; public class YangHui { public static void main(String[ ...

  5. Nginx http -> https 跳转后 POST 丢失

    在 nginx.conf 配置文件中添加如下配置进行 http -> https 跳转 server { listen ; server_name example.org; https://$s ...

  6. OctetString 转String

    /// <summary> /// OctetString转时间 /// </summary> /// <param name="ss">字符串 ...

  7. ztree checkbox父子联动

    1. 对于ztree而言,如果需要设置或者取消ztree的父子联动,只要在setting里面设置chkboxType的参数即可: 其中Y表示被checkbox被勾选时的联动情况,N表示取消勾选时的联动 ...

  8. vue模块化以及封装Storage组件实现保存搜索的历史记录

    <template> <div id="app"> <input type="text" v-model='todo' @keyd ...

  9. ISO/IEC 9899:2011 条款6.8.3——表达式与空语句

    6.8.3 表达式与空语句 语法 1.expression-statement: expressionopt    ; 语义 2.在一条表达式语句中的表达式被计算为一个void表达式作为其副作用.[注 ...

  10. S: WARNING: Could not write to (C:\Users\Administrator\AppData\Local\apktool\framework), using C:\Users\ADMINI~1\AppData\Local\Temp\ instead...

    使用ApkIDE反编译修改后,重新编译生成APK报错: > 正在编译Apk... - - 失败:S: WARNING: Could not write to (C:\Users\Administ ...