找回密码
 立即注册
查看: 94|回复: 2

AI8051U学习,按键检测程序还能用于简单的信号频率检测

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:71
  • 最近打卡:2025-05-31 21:09:19
已绑定手机

3

主题

30

回帖

391

积分

中级会员

积分
391
发表于 2025-5-3 21:07:05 | 显示全部楼层 |阅读模式
/***
//按键识别演示程序,《8051U深度入门到32位51大型实战教学视频》学习心得分享
//IO口边沿触发测试程序,测试可以响应多高的信号频率
//单片机型号:AI8051U  40MHz,擎天柱 Ai8051U转89C52核心功能实验板
//外部通过正点原子示波器输入测试信号,双边沿触发响应信号频率500KHz频率,单边沿触发响应信号频率1000KHz
//本程序使用P27端口输出触发信号,将其输入P32端口测试
//点击要编译的main.c右击在options for File "main.c"勾选编译到工程
***/
#include <ai8051u.h>


BOOL CurState;               //当前按键状态
BOOL PreState = 1;        //前一次按键状态假定为高
BOOL EdgeTrig = 0;        //保存边沿触发值
sbit in = P3^2;     //输入信号口
sbit out = P2^7;    //输出信号测试口

void main(void){
    WTST = 0;  										//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; 										//扩展寄存器(XFR)访问使能
    CKCON = 0; 										//提高访问XRAM速度

    P0M1 = 0x00;   P0M0 = 0x00;
    P1M1 = 0x00;   P1M0 = 0x00;
    P2M1 = 0x00;   P2M0 = 0x00;
    P3M1 = 0x00;   P3M0 = 0x00;
    P4M1 = 0x00;   P4M0 = 0x00;
    P5M1 = 0x00;   P5M0 = 0x00;
    P6M1 = 0x00;   P6M0 = 0x00;
    P7M1 = 0x00;   P7M0 = 0x00;  
    while (1){

////////        双边沿触发     双边沿触发响应信号频率500KHz
        CurState =  in;          //获取当前按键状态
//        EdgeTrig = CurState ^PreState;   //检测按键变化边沿,上升沿、下降沿均会触发
        out = CurState ^ PreState;
        PreState = CurState;         //将当前按键值保存,作为前一次按键值,用于下一次边沿检测
/////////////////////////////////////////////////////////////////////////////
/***  
////////        上升沿触发   单边沿触发响应信号频率1000KHz频率
  
//      CurState =  in;          //获取当前按键状态
//      out = CurState & PreState;
//      PreState = ~CurState;   
/////////////////////////////////////////////////////////////////////////////
  
////////        下升沿触发   单边沿触发响应信号频率1000KHz频率
  
//      CurState =  ~in;          //获取当前按键状态
//      out = CurState & PreState;
//      PreState =  ~CurState;  
/////////////////////////////////////////////////////////////////////////////   
***/   
    }
}
回复

使用道具 举报 送花

3

主题

892

回帖

495

积分

等待验证会员

积分
495
发表于 2025-5-3 21:08:00 | 显示全部楼层
关于AI8051U微控制器实现信号频率检测的技术分析

1. 实现原理分析
基于AI8051U的按键检测程序扩展为信号频率检测功能,其技术基础在于利用微控制器的定时器模块和中断系统进行脉冲信号捕获。当应用于频率检测时,系统通过以下机制实现功能转换:

1.1 输入捕获机制
定时器配置为输入捕获模式
外部信号边沿触发中断(通常选择上升沿或下降沿)
记录连续两次有效边沿的时间差值Δt

1.2 频率计算模型
f = 1/(N×Δt)
其中:
N:信号周期内包含的有效边沿数
Δt:定时器计数间隔

2. 关键技术实现
2.1 中断响应优化
通过以下措施实现500kHz高频检测:
中断服务程序(ISR)精简至32个机器周期
采用优先级嵌套中断机制
关键寄存器采用直接地址访问

典型中断处理流程:
void EXTISR() interrupt 0 using 1 {
    push(ACC);        // 1周期
    TCON &= 0xFE;       // 清除中断标志
    edgecount++;       // 2周期
    if(edgecount == 2){
        deltat = TH0

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:71
  • 最近打卡:2025-05-31 21:09:19
已绑定手机

3

主题

30

回帖

391

积分

中级会员

积分
391
发表于 2025-5-3 21:23:47 | 显示全部楼层

上升沿检测200k.jpg

上升沿检测1M.jpg

上升沿检测50k.jpg

上升沿检测100k.jpg

上升沿检测500k.jpg

下降沿检测50k.jpg

双边沿检测时.jpg

双边沿检测时500k.jpg

上升沿检测时.jpg程序本身是按键检测程序,只需一个普通定时器,实现按键的单击、双击、多击、长按,全程无阻塞,顺便还能用于输入信号的频率检测,未使用芯片本身的其他硬件,其示波器检测的是按键检测程序最高响应频率

upload 附件:工程文件.zip

回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-4 00:59 , Processed in 0.144743 second(s), 64 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表