找回密码
 立即注册
查看: 1273|回复: 14

学习Ai 8051 U 第一天

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:22
  • 最近打卡:2026-01-02 14:48:10
已绑定手机

16

主题

42

回帖

221

积分

中级会员

积分
221
发表于 2025-4-12 15:55:32 | 显示全部楼层 |阅读模式
今天去拿快递收到了咱发过来的开发板,然后也不知道啥原因,就去问了一下水友,看看怎么解决。

发现没有设置.png


编译环境:
\尝试通过ISP进行烧录,发现没法识别串口,于是去帖子上找原因,找到了解决方案:
1.先长按P32,,,
2.紧接着再按POWER,


修改源代码 2.png

30.png


展示效果(不理解准双向口啥意思):

3.jpg

发现没有设置.png
回复

使用道具 举报 送花

3

主题

2857

回帖

1461

积分

等待验证会员

积分
1461
发表于 2025-4-12 15:58:00 | 显示全部楼层
您好,感谢您对国芯人工智能产品的关注与支持。针对您在使用Ai 8051 U开发板过程中遇到的问题,以下是一些专业的建议和解决方案:

1. 串口识别问题:
您提到无法通过ISP识别串口,这可能是由于开发板的初始化状态或连接问题导致的。按照您找到的解决方案,长按P32键再按POWER键,这是一种常见的硬件复位方法,可以尝试重新初始化开发板的通信接口。
如果问题依然存在,建议检查以下几点:
确保USB线连接正常,且驱动程序已正确安装。
确认开发板的电源供应稳定,避免因电压不稳导致的通信问题。
检查开发板的串口引脚是否与电脑的串口引脚正确对应。

2. 编译环境与烧录:
您提到的编译环境未明确,建议使用官方推荐的开发工具,如Keil C51或SDCC,以确保代码的兼容性和稳定性。
在烧录过程中,如果遇到问题,可以尝试以下步骤:
确认烧录工具(如ISP软件)的版本与开发板兼容。
检查烧录设置,如波特率、串口号等,确保与开发板匹配。
如果烧录失败,可以尝试重新连接开发板,或使用其他烧录方法(如JTAG)。

3. 源代码修改:
您提到修改了源代码(92905、92906),建议在修改前备份原始代码,以便在出现问题时可以快速恢复。
修改代码时,注意遵循编程规范,避免引入不必要的错误。如果对某些概念(如准双向口)不理解,可以参考官方文档或相关技术资料,确保代码的正确性。

4. 准双向口概念:
准双向口(Quasi-bidirectional Port)是8051单片机中的一种I/O端口模式,它结合了输入和输出的特性。在这种模式下,端口可以同时作为输入和输出使用,但需要注意电平的稳定性和驱动能力。
在使用准双向口时,建议了解其工作原理,并根据实际需求进行配置,以避免因电平冲突导致的硬件损坏或功能异常。

5. 展示效果:
您提到展示效果(92907),如果对某些功能或现象不理解,建议通过调试工具(如逻辑分析仪或示波器)进行实时监测,以获取更直观的数据和分析结果。
如果展示效果与预期不符,可以逐步排查代码、硬件连接和配置设置,找出问题所在并进行调整。

总之,使用开发板时,遇到问题是很正常的,关键是通过合理的排查和调试,逐步解决问题。希望以上建议能对您有所帮助,祝您在Ai 8051 U开发板的学习和开发过程中取得更多成果。如有进一步问题,欢迎随时咨询。

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:359
  • 最近打卡:2026-03-20 21:53:40

844

主题

1万

回帖

2万

积分

管理员

积分
22719
发表于 2025-4-12 22:14:00 | 显示全部楼层
看下最新用户手册的第2章节, 2.1 ~ 2.12
https://www.stcaimcu.com/data/download/Datasheet/AI8051U.pdf
做完这个实验:

截图202504122213064723.jpg

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:22
  • 最近打卡:2026-01-02 14:48:10
已绑定手机

16

主题

42

回帖

221

积分

中级会员

积分
221
发表于 2025-4-13 11:31:00 | 显示全部楼层
国芯人*** 发表于 2025-4-12 15:58
您好,感谢您对国芯人工智能产品的关注与支持。针对您在使用Ai 8051 U开发板过程中遇到的问题,以下是一些 ...

哇塞!!超级感动,咱这个论坛对新手太友好了,必须狠狠支持!感谢您的答复,我会认真梳理复盘的
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:22
  • 最近打卡:2026-01-02 14:48:10
已绑定手机

16

主题

42

回帖

221

积分

中级会员

积分
221
发表于 2025-12-23 13:45:14 | 显示全部楼层
打卡第二天,第③集

今天遇到状况了,今天烧录程序时,发现ISP连接不上了~~~

https://www.stcaimcu.com/forum.p ... 2ODY3MnwzOTk2MXw%3D

然后头文件啥的都弄到k   c251里面了,今天就遇到了这个问题
代码如下:

#include "ai8051u.h"                                                //调用
#include "stc32_stc8_usb.h"                                  //        头文件
#include "intrins.h"                                                 //调用nop的头文件

#define u8 unsigned char                                           //无符号字符变量(0~255)
#define u16 unsigned int                                        //无符号变量
u8 state = 0;        //设置标志位
u8 i = 0;
void Delay20ms(void)                                                //@24.000MHz  Delay20ms()
{
        unsigned long edata i;

        _nop_();
        _nop_();
        i = 119998UL;
        while (i) i--;
}

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

                P2M0 = 0X00;
                P2M1 = 0X00;
        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;
       
        usb_init();                                     //USB CDC 接口配置               
        P40 = 0;
       
               
        IE2 |= 0x80;                                    //使能USB中断
        EA = 1;                                                                                        //IE |= 0X80;(总中断)
        while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
       
       
        while(1)
        {       
                  if (bUsbOutReady)
        {
            //USB_SendData(UsbOutBuffer,OutNumber);           //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
            usb_OUT_done();
        }
//                //任务1:按下p32灯亮,松开灯灭;
//                if (P32 == 0)
//                {       
//                        P20 = 0;
//                }
//                else
//                {
//                        P20 = 1;
//                }
//                }
               
//                        //任务2:按下p32灯灭,松开灯开;
//                if (P32 == 1)
//                {       
//                        P20 = 0;
//                }
//                else
//                {
//                        P20 = 1;
//                }
//                }
                        //任务3:按一下p32灯亮,再按一下灯灭;   最好执行取反操作
//                if (P32 == 0)           //如果按下p32执行语句
//                {       
//                        Delay20ms();                        //延时消抖
//                        if(32 == 0)
//                        {       
//                        state =! state;
//                        P20 = state;                //点灯
//                        printf("state:%d\r\n",state);
//                        while(P32 == 0);                //等待p32松开
//                        }
//                }
//   课堂任务1完成,按下P32点亮四个大灯,按下P33熄灭
//        if(P32 == 0)
//        {       
//                P20 = 0;
//                P21 = 0;
//                P22 = 0;
//                P23 = 0;
//        }
//        else if (P33 == 0)
//        {       
//                P20 = 1;
//                P21 = 1;
//                P22 = 1;
//                P23 = 1;
//        }
//  任务2,按下P32点亮一个灯,再按再点亮两个灯.......
        if(P32 == 0)
        {       
                for (i = 0; i < 8; i++)
                {
                        P3i = 0;
                }
        }       
        }
        }


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:22
  • 最近打卡:2026-01-02 14:48:10
已绑定手机

16

主题

42

回帖

221

积分

中级会员

积分
221
发表于 2025-12-23 13:49:20 | 显示全部楼层
打卡第③集 点灯配置

成功电灯,学到了准双向口:以及四种推挽模式

微信截图_20250415141252.png

准双向口的配置设置

准双向口的配置设置

成果展示:

展示成果

展示成果


微信截图_20250414203358.png

微信截图_20250414210039.png

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:22
  • 最近打卡:2026-01-02 14:48:10
已绑定手机

16

主题

42

回帖

221

积分

中级会员

积分
221
发表于 2025-12-23 13:52:05 | 显示全部楼层
学习Ai 8051 U 第五天,打卡<USB直接下载>
## 一些较为常用的宏定义,需要重点记忆防止,溢出:

一些常用的宏定义代码.png

需要重点记忆这几个数\xfd,超过255的定义u16
代码组成部分.png


今天打开后,准备烧录程序呢,,

打开ISP后没有串口 了。。扫描也出不来,
重新插拔也没用,关键连提示音都没有了

截图202512231350571653.jpg



本节代码示例如下:

        #include "ai8051u.h"        //调用
        #include "stc32_stc8_usb.h"  //        头文件
        #define u8 unsigned char   //无符号字符变量(0~255)
        #define u16 unsigned int        //无符号变量
        u8 X = 200;
        u8 Y = 10;
        void main(void)         
{       
        P_SW2 |= 0X80;           //B7位置1,使能访问XFR,usb寄存器
                P2M0 = 0X00;
                P2M1 = 0X00;
        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;
       
        usb_init();                                     //USB CDC 接口配置               
        P40 = 0;
       
               
        IE2 |= 0x80;                                    //使能USB中断
        EA = 1;                                                                                        //IE |= 0X80;(总中断)
        while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
       
       
        while(1)
        {       
                  if (bUsbOutReady)
        {
            //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                if (X % Y)
                {       
                        printf("条件为真\r'n");
                        printf("X * Y = %u\r\n",(u16)(X*Y));
                }   
                else
                {
                        printf("条件为假\r\n");
                        printf("X * Y = %u\r\n",(u16)(X*Y));        //两个百分号是为了转义后依然是%
                }
            usb_OUT_done();
        }
//                P25 = 0;
//                P26 = 0;
//                P27 = 0;        //P20端口输出0V
//                P21 = 0;        //P21端口输出0V
//                P22 = 0;
//                P23 = 0;
//                P24 = 0;
        }

}





问题已经解决,原因是没有按P32进行冷启动,,源程序当中,也存在没有引用.h文件的情况






回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:22
  • 最近打卡:2026-01-02 14:48:10
已绑定手机

16

主题

42

回帖

221

积分

中级会员

积分
221
发表于 2025-12-23 13:55:32 | 显示全部楼层

学习Ai 8051 U 第⑦天,打卡<第七集定时器中断>

擎天柱  第七集
代码书写:

void Timer0_Init(void)                //500毫秒@24.000MHz
{
        TM0PS = 0x0F;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
        AUXR &= 0x7F;                        //定时器时钟12T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0xDC;                                //设置定时初始值
        TH0 = 0x0B;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断
}

void Timer0_Isr(void) interrupt 1                //3秒执行一次
{
        state = !state;               
      
        P20 = state;
        P21 = !state;
}


截图202512231354594638.jpg
#代码分析
1. 定时器初始化函数 Timer0Init:
TM0PS = 0x0F;:设置定时器0的预分频器为0x0F。预分频器的作用是将系统时钟分频,以降低定时器的计数频率。具体分频比例需要参考芯片的数据手册。
AUXR &= 0x7F;:将AUXR寄存器的第7位清零,设置定时器0为12T模式。12T模式表示定时器时钟为系统时钟的1/12。
TMOD &= 0xF0;:清除TMOD寄存器的低4位,设置定时器0为模式1(16位定时器模式)。
TL0 = 0xDC; 和 TH0 = 0x0B;:设置定时器0的初始值。通过这两个寄存器,可以控制定时器的计数起点,从而决定定时器的溢出时间。
TF0 = 0;:清除定时器0的溢出标志位。
TR0 = 1;:启动定时器0。
ET0 = 1;:使能定时器0的中断。

2. 中断服务程序 Timer0Isr:
state = !state;:每次中断发生时,切换state的状态。state是一个全局变量,用于记录当前的状态。
P20 = state; 和 P21 = !state;:根据state的值,控制P20和P21的输出状态。当state为1时,P20输出高电平,P21输出低电平;反之亦然。

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:22
  • 最近打卡:2026-01-02 14:48:10
已绑定手机

16

主题

42

回帖

221

积分

中级会员

积分
221
发表于 2025-12-23 14:03:52 | 显示全部楼层
学习Ai 8051 U 第⑧天,打卡<第七集定时器中断处理周期任务>



、想请问一下论坛的大佬们,我这个定时器中断程序为啥没有办法运转呢?就是控制灯的亮灭(3秒)无法实现。


截图202512231400364245.jpg
截图202512231400511029.jpg
两个相关的代码程序:
截图202512231401402981.jpg 截图202512231401553341.jpg
但是串口通信还是可以正常使用。


在对于中断控制那里,我将中断语言放到main前面,但还是不行


代码分析:


1. 定时器溢出时间计算:
定时器的溢出时间取决于系统时钟频率、预分频器设置以及定时器的初始值。在您的代码中,系统时钟频率为24MHz,预分频器设置为0x0F,定时器初始值为0x0BDC。根据这些参数,可以计算出定时器的溢出时间。
计算公式为:溢出时间 = (65536 - 初始值)  (预分频器 + 1) / 系统时钟频率。
代入的参数:溢出时间 = (65536 - 0x0BDC)  (0x0F + 1) / 24000000 ≈ 0.5秒。

2. 中断频率与代码逻辑:
需要3秒执行一次,需要调整定时器的初始值或预分频器设置。

3. IO口控制:
在中断服务程序中,通过P20 = state;和P21 = !state;控制两个IO口的输出状态。需要注意的是,IO口的输出状态可能会受到其他代码或硬件电路的影响,建议在初始化时明确设置IO口的方向(输入或输出)。


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:22
  • 最近打卡:2026-01-02 14:48:10
已绑定手机

16

主题

42

回帖

221

积分

中级会员

积分
221
发表于 2025-12-23 14:05:47 | 显示全部楼层
学习Ai 8051 U 第⑨天,打卡<温故之前的课程重新学一遍>
##今天把之前只顾着模仿的课程,从新梳理了一遍,功能基本实现,代码又重新码了一遍(特别是USB-CDC那一节课)

2.一开始不知道XFR是51单片机拓展的特殊寄存器,后来查了查相关知识点,又翻阅了ai8051的头文件,发现里面大多数,都被作者提前规划好了,怪不得用起来真么顺手
3.相较于STC89C52RC,他 截图202512231405419241.jpg 们头文件当中并没包含这些,相反,还需要自己码sbit,sfr,如果自己设置的话,就可以用LED直接代表该端口,也能够看懂,不过8051这块擎天柱还是好用的,加油明天继续学习
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-3-23 23:12 , Processed in 0.126807 second(s), 88 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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