找回密码
 立即注册
查看: 193|回复: 10

我测AI8051的IO翻转速度4-6us

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-07-16 17:24:23
已绑定手机

3

主题

12

回帖

71

积分

注册会员

积分
71
发表于 2025-7-9 16:13:53 | 显示全部楼层 |阅读模式
我测这个单片机的IO翻转速度间隔在4-6us正常吗
回复

使用道具 举报 送花

3

主题

252

回帖

-785

积分

等待验证会员

积分
-785
发表于 2025-7-9 16:18:00 | 显示全部楼层
您提到的AI8051单片机IO翻转速度在4-6微秒(μs)之间,这一数值是否正常,需结合具体型号、工作频率及实际应用场景综合判断。

首先,AI8051是基于8051架构的增强型单片机,其核心指令周期通常与标准8051相似,即每条指令执行时间为12个时钟周期。若该单片机运行于12MHz主频,则每个时钟周期为83.3ns,一条指令执行时间为1μs。因此,在标准情况下,IO口的翻转速度理论上至少应达到1μs以上,以满足指令执行时间的要求。

然而,实际IO翻转速度受多种因素影响:

1. 指令执行效率:若程序中频繁调用延时函数或使用复杂逻辑控制IO,可能导致翻转速度变慢。
2. 外设配置:部分单片机支持快速IO模式,但需通过寄存器配置启用。若未正确配置,可能限制IO响应速度。
3. 引脚负载:若IO连接的外部电路负载较大(如大电容、高阻抗设备),可能延长信号上升/下降时间。
4. 电源稳定性:电压波动或电源噪声也可能影响IO输出的稳定性与速度。

对于AI8051系列而言,若其主频为12MHz,4-6μs的IO翻转速度属于合理范围,尤其在未进行特殊优化的情况下。若您希望提升IO响应速度,可考虑以下优化措施:
使用更高速度的主频(如24MHz或更高);
简化控制逻辑,减少不必要的指令调用;
启用快速IO模式(如有);
优化外围电路设计,降低负载影响。

综上所述,4-6μs的IO翻转速度在AI8051单片机中属于正常范围,具体表现还需结合实际应用环境和配置进行评估。如需进一步优化性能,建议查阅官方技术文档并进行针对性调试。

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:143
  • 最近打卡:2025-07-30 11:07:10

759

主题

1万

回帖

1万

积分

管理员

积分
18083
发表于 2025-7-9 22:07:28 | 显示全部楼层
20MHz
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:98
  • 最近打卡:2025-07-30 08:25:06
已绑定手机

17

主题

474

回帖

1471

积分

金牌会员

积分
1471
发表于 2025-7-10 10:35:50 | 显示全部楼层
也要看代码怎么写的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:440
  • 最近打卡:2025-07-31 00:01:05
已绑定手机

149

主题

1786

回帖

2994

积分

金牌会员

积分
2994
发表于 2025-7-10 11:18:20 | 显示全部楼层
我记得手册上面好像更快
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:610
  • 最近打卡:2025-07-30 00:03:00

11

主题

1216

回帖

5782

积分

论坛元老

积分
5782
发表于 2025-7-10 11:36:54 | 显示全部楼层


我用24MHz。



#include "AI8051U.h"
#include "stdio.h"
#include "intrins.h"

typedef         unsigned char        u8;
typedef         unsigned int        u16;
typedef         unsigned long        u32;

#define MAIN_Fosc        24000000UL

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

    P0M1 = 0x00;   P0M0 = 0xff;   //设置为推挽输出
    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;   //设置为准双向口
   
          P1M0 = 0x80; P1M1 = 0x00;
//    P1SR = 0x7f;


    while(1)
    {
                        P16 = ~P16;
                        P17 = ~P17;
//                        P17 = 0;
//                        P17 = 1;
                }
}


屏幕截图 2025-07-10 110227.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-07-16 17:24:23
已绑定手机

3

主题

12

回帖

71

积分

注册会员

积分
71
发表于 2025-7-10 13:54:15 | 显示全部楼层
#include "../h/system.h"

unsigned int run_count = 0;

// 主函数
void main(void)
{
    WTST = 0;  // 设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; // 扩展寄存器(XFR)访问使能
    CKCON = 0; // 提高访问XRAM速度
    // CLK_Init();
    // LCD_Init();
    // LCD_Clear(BLACK);
    // key_Set_GPIO();
    // Initial_DS1302();
    // Uart2_Init();
    // DIsplay_Init();
    P1M0 |= 0x0c; P1M1 &= ~0x0c;

    while (1)
    {

        P12 = !P12;
        // Dispaly();
        // key();
        // run_count++;
        // if (run_count >= 600)
        // {
        //     run_count = 0;
        // }
        // if ((unsigned char)(run_count % 10) == 0)
        // {
        //     SendData_UART2(curr_time.minute);
        //     // second = Read1302(READ_second);
        //     // // curr_time.minute = Read1302(READ_minute);
        //     // // curr_time.hour = Read1302(READ_hour);
        //     // if (hour > 23)
        //     //     hour = 0;
        //     // if (minute > 59)
        //     //     minute = 0;
   
        // }
    }
}
#define HIRC                    40000000UL
#define FOSC                    40000000UL
#define SYSCLK                  FOSC
#define MAIN_Fosc               FOSC
40M内部,这个翻转速度,怎么做到的
截图202507101352535040.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:610
  • 最近打卡:2025-07-30 00:03:00

11

主题

1216

回帖

5782

积分

论坛元老

积分
5782
发表于 2025-7-10 17:16:35 | 显示全部楼层
unal*** 发表于 2025-7-10 13:54
#include "../h/system.h"

unsigned int run_count = 0;



不要用P12 = !P12;,要用这个P12 = ~P12;。



    1          #include "AI8051U.h"
    2          #include "stdio.h"
    3          #include "intrins.h"
    4         
    5          typedef   unsigned char u8;
    6          typedef   unsigned int  u16;
    7          typedef   unsigned long u32;
    8         
    9          #define MAIN_Fosc        24000000UL
   10         
   11          void main(void)
   12          {
   13   1          WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
   14   1          EAXFR = 1; //扩展寄存器(XFR)访问使能
   15   1          CKCON = 0; //提高访问XRAM速度
   16   1      
   17   1          P0M1 = 0x00;   P0M0 = 0xff;   //设置为推挽输出
   18   1          P1M1 = 0x00;   P1M0 = 0xff;   //设置为推挽输出
   19   1          P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
   20   1          P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
   21   1          P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
   22   1          P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
   23   1          P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
   24   1          P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
   25   1         
   26   1          P1M0 = 0x80; P1M1 = 0x00;
   27   1      //    P1SR = 0x7f;
   28   1      
   29   1      
   30   1          while(1)
   31   1          {
   32   2            P16 = ~P16;
   33   2            P17 = ~P17;
   34   2            P15 = !P15;
   35   2      //      P17 = 0;
   36   2      //      P17 = 1;
   37   2          }
   38   1      }
   39         
   40         
   41         
   42         

;       FUNCTION main (BEGIN)
                                                ; SOURCE LINE # 11
000000 120000      R  LCALL    _m
000003 6D33           XRL      WR6,WR6
000005 7E240000    R  MOV      WR4,#WORD0 ?SC_0000
000009 020000      E  LJMP     sprintf
;       FUNCTION main (END)

;       FUNCTION _m (BEGIN)
                                                ; SOURCE LINE # 11
                                                ; SOURCE LINE # 13
000000 75E900         MOV      WTST,#00H
                                                ; SOURCE LINE # 14
000003 A9D7BA         SETB     EAXFR
                                                ; SOURCE LINE # 15
000006 75EA00         MOV      CKCON,#00H
                                                ; SOURCE LINE # 17
000009 759300         MOV      P0M1,#00H
00000C 7594FF         MOV      P0M0,#0FFH
                                                ; SOURCE LINE # 18
00000F 759100         MOV      P1M1,#00H
000012 7592FF         MOV      P1M0,#0FFH
                                                ; SOURCE LINE # 19
000015 759500         MOV      P2M1,#00H
000018 759600         MOV      P2M0,#00H
                                                ; SOURCE LINE # 20
00001B 75B100         MOV      P3M1,#00H
00001E 75B200         MOV      P3M0,#00H
                                                ; SOURCE LINE # 21
000021 75B300         MOV      P4M1,#00H
000024 75B400         MOV      P4M0,#00H
                                                ; SOURCE LINE # 22
000027 75C900         MOV      P5M1,#00H
00002A 75CA00         MOV      P5M0,#00H
                                                ; SOURCE LINE # 23
00002D 75CB00         MOV      P6M1,#00H
000030 75CC00         MOV      P6M0,#00H
                                                ; SOURCE LINE # 24
000033 75E100         MOV      P7M1,#00H
000036 75E200         MOV      P7M0,#00H
                                                ; SOURCE LINE # 26
000039 759280         MOV      P1M0,#080H
00003C 759100         MOV      P1M1,#00H
                                                ; SOURCE LINE # 30
               ?C0003:
                                                ; SOURCE LINE # 32
00003F B296           CPL      P16  ; 用这个P16 = ~P16; 只有汇编的一行代码。

                                                ; SOURCE LINE # 33
000041 B297           CPL      P17
                                                ; SOURCE LINE # 34
000043 209503         JB       P15,?C0005    ;用P15 = !P15; 会有好多行的汇编代码。
000046 D3             SETB     C
000047 8001           SJMP     ?C0006
               ?C0005:
000049 C3             CLR      C
               ?C0006:
00004A 9295           MOV      P15,C
                                                ; SOURCE LINE # 37
00004C 80F1           SJMP     ?C0003
;       FUNCTION _m (END)



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:143
  • 最近打卡:2025-07-30 11:07:10

759

主题

1万

回帖

1万

积分

管理员

积分
18083
发表于 2025-7-10 19:19:53 | 显示全部楼层
用 时钟输出功能,测 I/O 输出速度
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:610
  • 最近打卡:2025-07-30 00:03:00

11

主题

1216

回帖

5782

积分

论坛元老

积分
5782
发表于 2025-7-10 19:35:17 | 显示全部楼层



频率输出有两个限制,极限值由系统电压决定,通常情况下,5V最大36Mhz,3.3V最大25Mhz。具体可以参考技术手册“电气特性”部分。
其次就是系统频率,硬件最快可以输出系统时钟的一分频,也就是最大系统时钟频率。具体请参考技术手册“时钟管理”部分

屏幕截图 2025-07-10 184508.jpg

端口输出速度最快7.6MHz  系统频率40MHz
屏幕截图 2025-07-10 173327.jpg


    P4SR = 0x7f;     P4DR = 0x7f;
   
//    P1SR = 0x7f;

    MCLKOCR = 0x01; //主时钟输出到 P4.7 口
//  MCLKOCR = 0x02; //主时钟 2 分频输出到 P4.7 口
//  MCLKOCR = 0x04; //主时钟 4 分频输出到 P4.7 口
//  MCLKOCR = 0x84; //主时钟 4 分频输出到 P5.6 口


STC单片机 系统时钟对外分频输出高频时钟 系统频率36.864MHz
屏幕截图 2025-07-10 180837.jpg





回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-7-31 03:46 , Processed in 0.128219 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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