找回密码
 立即注册
楼主: MJBZ

Ai8051U学习打卡

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-10-25 09:42:52 | 显示全部楼层
学习了Ai8051U学习视频的第三集,点亮一个led,
我了解到Ai8051U使用的keil是跟stm32一样的arm版本,还需要用isp软件给keil一键安装Ai8051U的头文件。
点亮led的代码过程与STC8的一样,先配置引脚的工作模式,再开设置引脚的高低电平。
代码如下:
#include "ai8051U.h"
void main(void)
{
P0M1=0X00;//配置P0口工作模式为双向模式
P0M0=0X00;
P4M1=0X00;//配置P1口工作模式为双向模式
P4M0=0X00;

while(1)
{
P40=0;
P00=0;
}
}
PNM0,PNM1要同时设置才能对某一个或者某几个引脚起作用。

看了视频才知道,用P00点亮led是因为P40配置低电平启动一个三极管,这个三极管的作用是给P0口做开关。所以要点亮P00口的led,需要把P40和P00都设置为低电平。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-10-25 14:49:35 | 显示全部楼层
今天学习了Ai8051U深度入门课程的第四节,USB不停电下载,学习到了1.下载usb库,2.ISP软件和Keil程序中引用usb库、相关头文件,3.修改寄存器,可以免去了下载rhex文件时还要按两个按键,实现Ai8051U的不停电下载,USB不停电下载功能是真的好,我就因为不懂STC8G1A08A的下载方法,在下载这个环节卡了一个多月,哈哈哈。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-10-25 15:47:37 | 显示全部楼层
今天学习了 Ai8051U深度入门视频课的第五集 C语言基础,学习了Ai8051U的USB-CDC模拟串口的设置和printf函数的使用(usb-cdc模拟串口就是usb通信速率最快可到12M,所以在ISP软件中设置任何波特率都可以,速度都是一样的),变量类型的使用以及用错可能出现的现象,还复习了C语言算数运算符,关系运算符,赋值运算符等C语言基础知识。温故而知新。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-10-26 09:29:10 | 显示全部楼层
今天学习了Ai8051U深度入门第六集 I/O输入输出,学习到了 PNM0 PNM1组合配置一个或几个I/O接口,有四种模式,
PNM1   PNM0     工作模式
0           0         准双向口  既能做输入也能做输出
0           1         推挽输出
1           0         高阻输入
1           1         开漏模式

端口触发施密特要注意触发的高电平和低电平是否达到要求。
还通过按P32按键点亮P00的LED灯学习了if else语句和 变量取反控制led灯
可以用while()语句钳住led状态。
代码调用延时函数Delay之前还要设置寄存器 WTST EAXFR,CKCON
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-10-26 10:50:50 | 显示全部楼层
今天学习了《Ai805U深度入门》学习视频第七集 定时器中断
定时器非常有用,可以避免delay一根筋的浪费cpu时钟,使用定时器可以让单片机执行多个任务,提高效率
在printf打印的时候汉字“数”出不来,因为字符串中不吭含有带0xFD编码的汉字,否则keil编译时会跳过0xFD,因为keil编译器使用了0xfd、0xfe和0xff这三个字符编码,
解决办法也很简单,在0xfd编码的字符后面增加一个0xfd就可以了,
例如printf(“数\xdf学”),"\x"表示后面的1-2个字符为16进制数,“\xfd”表示16进制数0xfd插入到字符串中。因为“数”的汉字编码是0xcafd,keil会跳过其中的fd,再手动添加fd就可以正常显示汉字“数”
还学习了时钟计算方法,学习了定时频率计算和定时时间计算。
还学习了函数的定义、声明、调用
返回值类型 函数名(入口参数)
{
    //函数体
    函数执行的代码;
    return返回值;
}
返回值类型 函数名(入口参数);
函数名(入口参数);
定时器看起来使用的时候比delay多几个步骤,但是灵活性非常高,可以最大程度发挥cpu时钟资源,实现很多需要的功能
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-10-27 22:17:32 | 显示全部楼层
今天学习了西西坛主推荐的视频“printf_usb("Hello World !\r\n")及usb不停电下载”,学习了ISP软件V6.95v中AIcube的使用,
AiCube实验一
在isp软件中点击AiCube,点击新建-》选择单片机型号-》数目项目名称-》设置项目保存路径-》选择单文件项目
在AiCube项目创建助手中,可以使用图形化I/O口配置,左键选择管脚功能,右键配置管脚模式,需要注意的是,在软件界面右侧选中管脚并设置管脚模式后,还要在软件界面左侧在相应的管脚大类中打勾选中,按F5创建工程
在生成的keil5工程中修改代码,例如isp软件范例代码,深圳大学的,程序编译完成后
在ISP6.59Y中,打开程序文件-》IRC调节模式选择不调节,使用内部预制频率-》IRC频率选择40MHz-》点击下载,还可以设置不停电下载,在“收到用户命令后复位到ISP监控程序区”把下面的三个勾都勾上,之后keil工程编译之后就可以自动下载

AiCube实验二
USB-CDC查询方式 printf_usb打印返回
步骤与实验一类似,点击回送“Hello World”就接收到“Hello World ”

AiCube实验 三
USB-CDC中断方式 printf_usb打印返回
步骤与实验一类似,点击回送“Hello World”就接收到“Hello World ”
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-10-27 22:56:50 | 显示全部楼层
今天学习了西西坛主推荐的第二个视频,实验一直接输出,实验二查询方式,实验三中断方式
内容与推荐的第一个视频类似,但是使用的isp软件版本是6.95W,推荐的第一个视频版本是6.95Y,两个版本中间相隔7天左右,软件更新的真快,我学习STC8G1K08A的时候,就用了5个版本的isp,很明显的能看到添加Keil5 C51头文件的数量是不断增加的。
在AiCube中生成HEX格式选项中,超过64k就选HEX-386,一般选80就够了。
整体的内容与7月11日的视频内容类似,但是两个视频中都强调了用户程序要放在//《AICUBE_USER_INCLUDE_BEGIN》 //《AICUBE_USER_INCLUDE_END》之间,好像是用Aicube再次添加功能的时候,用户自己写的程序会被保留,提高效率。
还可以在keil中点击windows-》Split,把编程界面四分屏。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-10-28 23:38:34 | 显示全部楼层
今天使用了吴经理赠送的擎天柱核心板,实验了前几天学的点灯程序,从isp软件中找LED实例程序,但是下载程序要按P32和gnd,弄了几遍就烦了,又尝试usb不停电下载,真的非常方便,按照冲哥视频里教授的方法一步一步做就能实现,但是出现了报错,是Lib文件里有char *USER_STCISPCMD ="@STCISP#"; 程序里再出现char *USER_STCISPCMD ="@STCISP#";就出现重定义报错,注释掉就一切正常了 ,于是开启了点灯大师的第一步。
#include <AI8051U.H>                //包含AI8051U的头文件
#include "intrins.h"                //使用_nop_()函数所必须要包含的头文件,
                                    //否则延时函数中调用的_nop_()函数没有被头文件引用过来,
                                    //会导致编译器找不到这个而函数而报错。
#include "stc32_stc8_usb.h"                                        //不断电下载头文件

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
//char *USER_STCISPCMD ="@STCISP#";

void Delay500ms(void)               //延时函数,主频40MHz
{
    unsigned long edata i;          //定义变量
    _nop_();                        //空指令
    _nop_();
    i = 4999998UL;                  //变量初始化
    while (i) i--;                  //循环等待
}
                                    //上面延时函数部分代码可使用AIapp-ISP软件的“软件延时计算器”工具来生成。

void main(void)
{
    EAXFR = 1;                      //允许访问扩展的特殊寄存器,XFR
                                    //(32 位模式请使用这句,注释下一句)
    P_SW2 |= 0x80;                  //允许访问扩展的特殊寄存器,XFR
                                    //(8位模式请使用这句,注释上一句)。
    WTST = 0;                       //设置取程序代码等待时间,
                                    //赋值为 0表示不等待,程序以最快速度运行
    CKCON = 0;                      //设置访问片内的 xdata速度,
                                    //赋值为 0表示用最快速度访问,不增加额外的等待时间
                                    
    P0M0 = 0x00; P0M1 = 0x00;       //设置P0口为准双向口模式
    P1M0 = 0x00; P1M1 = 0x00;       //设置P1口为准双向口模式
    P2M0 = 0x00; P2M1 = 0x00;       //设置P2口为准双向口模式
    P3M0 = 0x00; P3M1 = 0x00;       //设置P3口为准双向口模式
    P4M0 = 0x00; P4M1 = 0x00;       //设置P4口为准双向口模式
    P5M0 = 0x00; P5M1 = 0x00;       //设置P5口为准双向口模式
    P6M0 = 0x00; P6M1 = 0x00;       //设置P6口为准双向口模式
    P7M0 = 0x00; P7M1 = 0x00;       //设置P7口为准双向口模式
                                    //上面的将所有I/O口都初始化为准双向口工作模式的程序,
                                    //可以使用AIapp-ISP软件的“I/O口配置工具”来生成。
    usb_init();                     //USB CDC 接口配置
          IE2 |=0x80;                                                                                  //使能USB中断                                                               
                EA = 1;

          while (DeviceState != DEVSTATE_CONFIGURED);//等待USB完成配置
               
    P40 = 0;                        //打开LED部分的供电
    while(1)                        
    {   
                if (bUsbOutReady)
        {
            USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
            
            usb_OUT_done();
        }


                                                                                                                                          //LED循环自动闪烁部分
        P2 = ~P2;                   //对P0端口取反
//      P00 = ~P00;                //对单个端口取反
        Delay500ms();               //调用延时函数,延时0.5s
    }
}

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-10-28 23:40:27 | 显示全部楼层
#include <AI8051U.H>                //包含AI8051U的头文件
#include "intrins.h"                //使用_nop_()函数所必须要包含的头文件,
                                    //否则延时函数中调用的_nop_()函数没有被头文件引用过来,
                                    //会导致编译器找不到这个而函数而报错。
#include "stc32_stc8_usb.h"                                        //不断电下载头文件

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
//char *USER_STCISPCMD ="@STCISP#";

void Delay500ms(void)               //延时函数,主频40MHz
{
    unsigned long edata i;          //定义变量
    _nop_();                        //空指令
    _nop_();
    i = 4999998UL;                  //变量初始化
    while (i) i--;                  //循环等待
}
                                    //上面延时函数部分代码可使用AIapp-ISP软件的“软件延时计算器”工具来生成。

void main(void)
{
    EAXFR = 1;                      //允许访问扩展的特殊寄存器,XFR
                                    //(32 位模式请使用这句,注释下一句)
    P_SW2 |= 0x80;                  //允许访问扩展的特殊寄存器,XFR
                                    //(8位模式请使用这句,注释上一句)。
    WTST = 0;                       //设置取程序代码等待时间,
                                    //赋值为 0表示不等待,程序以最快速度运行
    CKCON = 0;                      //设置访问片内的 xdata速度,
                                    //赋值为 0表示用最快速度访问,不增加额外的等待时间
                                    
    P0M0 = 0x00; P0M1 = 0x00;       //设置P0口为准双向口模式
    P1M0 = 0x00; P1M1 = 0x00;       //设置P1口为准双向口模式
    P2M0 = 0x00; P2M1 = 0x00;       //设置P2口为准双向口模式
    P3M0 = 0x00; P3M1 = 0x00;       //设置P3口为准双向口模式
    P4M0 = 0x00; P4M1 = 0x00;       //设置P4口为准双向口模式
    P5M0 = 0x00; P5M1 = 0x00;       //设置P5口为准双向口模式
    P6M0 = 0x00; P6M1 = 0x00;       //设置P6口为准双向口模式
    P7M0 = 0x00; P7M1 = 0x00;       //设置P7口为准双向口模式
                                    //上面的将所有I/O口都初始化为准双向口工作模式的程序,
                                    //可以使用AIapp-ISP软件的“I/O口配置工具”来生成。
    usb_init();                     //USB CDC 接口配置
          IE2 |=0x80;                                                                                  //使能USB中断                                                               
                EA = 1;

          while (DeviceState != DEVSTATE_CONFIGURED);//等待USB完成配置
               
    P40 = 0;                        //打开LED部分的供电
    while(1)                        
    {   
                if (bUsbOutReady)
        {
            USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
            
            usb_OUT_done();
        }


                                                                                                                                          //LED循环自动闪烁部分
        P2 = ~P2;                   //对P0端口取反
//      P00 = ~P00;                //对单个端口取反
        Delay500ms();               //调用延时函数,延时0.5s
    }
}

不停电下载的所有程序,char *USER_STCISPCMD ="@STCISP#";出现报错说是LIB文件里有,重定义,注释掉就一切正常了
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-10-29 13:21:01 | 显示全部楼层
今天收到了Ai8051实验箱,非常感谢STC公司,也十分感谢吴经理。收到实验箱后,我就烧写了USB不断电下载程序,能省很多时间,我会使用实验箱认真的从第一节课学习到最后一节课,争取多学习知识,然后做出简单高效耐用可量产的产品。
截图202510291314596902.jpg https://www.stcaimcu.com/forum.php?mod=attachment&aid=MTE5NDQ1fDQ2MDViZjczfDE3NjYwMjUwMjB8MHw%3D
截图202510291315188424.jpg
截图202510291320433196.jpg
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-12-18 10:30 , Processed in 0.120499 second(s), 78 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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