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

学习《Ai8051U教学视频》发表七集 以上学习心得,送强大的 Ai8051U实验箱

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:35
  • 最近打卡:2025-04-16 04:14:51

3

主题

41

回帖

360

积分

中级会员

积分
360
发表于 2024-12-5 17:43:57 | 显示全部楼层 |阅读模式

学习《Ai8051U教学视频》发表七集 以上学习心得,送强大的 Ai8051U实验箱

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:35
  • 最近打卡:2025-04-16 04:14:51

3

主题

41

回帖

360

积分

中级会员

积分
360
发表于 2024-12-6 16:33:56 | 显示全部楼层

image.png

第一集 序言8051U深度入门到32位 51大型实战视频

哪怕梦想让我们拼的遍体麟伤,这次我们也要勇往直前;

Ai8051U,USB 型 1T 8051,支持32位和8位指令集, RMB2.3 管脚兼容天王级别的:  89C52RC,  12C5A60S2 要兼容 8位8051指令集,  可以用 Keil C51/IAR/SDCC 编译器 ===就相当于更强大的 8H8K64U 要兼容 32位8051指令集,可以用 Keil C251 编译器,双核兼容设计 ===就相当于更强大的 32G12K128, 32G8K64 34K SRAM(2K edata, 32K xdata), 64K Flash TFPU@120MHz, 硬件浮点/硬件三角函数 运算器 DMA支持PWM, DMA支持外设直接到外设, P2P 120MHz-PWM支持硬件移相,16位PWM; 真12位ADC USB, 4组串口,12位ADC, 轨到轨比较器 QSPI, SPI, I2S, I2C,  TFT-i8080/M6800 接口 PDIP40,LQFP44,LQFP48

STC 的51单片机越来越强大了;进入Ai的阶段。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:35
  • 最近打卡:2025-04-16 04:14:51

3

主题

41

回帖

360

积分

中级会员

积分
360
发表于 2024-12-6 16:56:07 | 显示全部楼层

image.png

第二集-Ai8051U视频教程硬件及工具介绍配套程序

Ai8051U 实验箱 使用说明: 一、Ai8051U实验箱外观;二、Ai8051U实验箱布局;三、下载程序到Ai8051U实验箱;四、新建 Keil 项目;五、使用 USB Link1D 仿真Ai8051U实验箱1、USB Link1D 工具连接方式。

案例:

AI8051U为主控芯片的程序P0口来演示跑马灯,输出低驱动。

下载时, 选择时钟 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

//==========================================================================

/***** 本地常量声明 **/

/***** IO口定义 **/

/***** 本地变量声明 **/

/***** 本地函数声明 **/

void delay_ms(u8 ms);

/**** 外部函数声明和外部变量声明 *****/

/**** 主函数 **/ void main(void) { P_SW2 |= 0x80; //扩展寄存器(XFR)访问使能

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;   //设置为准双向口

P40 = 0;        //LED Power On

while(1)
{
    P00 = 0;        //LED On
    delay_ms(250);
    P00 = 1;        //LED Off

    P01 = 0;        //LED On
    delay_ms(250);
    P01 = 1;        //LED Off

    P02 = 0;        //LED On
    delay_ms(250);
    P02 = 1;        //LED Off

    P03 = 0;        //LED On
    delay_ms(250);
    P03 = 1;        //LED Off

    P04 = 0;        //LED On
    delay_ms(250);
    P04 = 1;        //LED Off

    P05 = 0;        //LED On
    delay_ms(250);
    P05 = 1;        //LED Off

    P06 = 0;        //LED On
    delay_ms(250);
    P06 = 1;        //LED Off

    P07 = 0;        //LED On
    delay_ms(250);
    P07 = 1;        //LED Off
}

}

//======================================================================== // 函数: void delay_ms(unsigned char ms) // 描述: 延时函数。 // 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟. // 返回: none. // 版本: VER1.0 // 日期: 2013-4-1 // 备注:

//======================================================================== void delay_ms(u8 ms) { u16 i; do{ i = MAIN_Fosc / 10000; while(--i); }while(--ms); }

Ai8051U功能强大,兼容性强。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:35
  • 最近打卡:2025-04-16 04:14:51

3

主题

41

回帖

360

积分

中级会员

积分
360
发表于 2024-12-6 17:24:07 | 显示全部楼层

image.png

第三集 点亮第一颗LED

哪怕梦想让我们拼的遍体麟伤,这次我们也要勇往直前

一、新建工程:

1、创建空工程(参考手册6.5章节)

2、添加头文件(利用ISP软件,结合手册6.4章节)

3、输入代码,并编译;

程序代码:

include "ai8051u.h" //调用头文件

void main(void) { P0M0 = 0; //P0端口(P00-P07)为准双向口 P0M1 = 0;

P4M0 = 0;       //P4端口为准双向口
P4M1 = 0;

while(1)
{
    P40 = 0;    //P40端口输出0V
    P00 = 0;    //P00端口输出0V
    P01 = 0;    //P01端口输出0V
}

}

image.png

重新深入学习强大的AI8051!

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:35
  • 最近打卡:2025-04-16 04:14:51

3

主题

41

回帖

360

积分

中级会员

积分
360
发表于 2024-12-8 00:34:28 | 显示全部楼层

image.pngAI051U深度入门到32位 51大型实战视频:第四集 AI051UUSB不停电下载

哪怕梦想让我们拼的遍体麟伤,这次我们也要勇往直前;

1.程序实验对比演示
2.程序下载所需文件(STC官网-软件工具-库函数-USB库文件)
3.程序移植关键部分到工程:
3.1程序 添加头文件
3.2 USB初始化函数(lib+.h库实现)
3.3 命令参数
3.4 打开P_SW2寄存器和IE2寄存器.

例程笔记:

#include "ai8051u.h" //调用头文件

#include "stc32_stc8_usb.h" //调用头文件

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

void main(void)
{
P_SW2 |= 0x80; //B7位写1,使能访问XFR

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 接口配置

IE2 |= 0x80;                                    //使能USB中断
EA = 1;											//IE |= 0X80;

while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置

while(1)
{

    if (bUsbOutReady)
    {
        USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
      
        usb_OUT_done();
    }

	P40 = 0;	//P40端口输出0V
	P00 = 0;	//P00端口输出0V
	P02 = 0;	//P02端口输出0V
	//P01 = 0;	//P01端口输出0V
	//
}

}

AI051UUSB不停电下载还是比较实用的。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:35
  • 最近打卡:2025-04-16 04:14:51

3

主题

41

回帖

360

积分

中级会员

积分
360
发表于 2024-12-8 01:36:10 | 显示全部楼层

image.png

image.png

AI051U深度入门到32位 51大型实战视频:第五集 C语言基础

一、摘要:

1.C语言 USB-CDC串口之printf函数的实现
2.数的进制:2进制、10进制、16进制
3.数据的基本类型
4.C语言常用运算符

二、C语言 USB-CDC串口之printf函数的实现

1.打开USB库中的PRINTF_HID宏定义(去掉//)
2.理解PRINTF的函数原型的定义
#define printf printf_hid
int printf_hid (const char *fmt, ...);

参数fmt -- 是格式控制字符串,包含了两种类型的对象:普通字符和转换说明 。

普通字符:在输出时,普通字符将原样不动地复制到标准输出。
printf("8051U深度入门到32位51大型实战视频\r\n");

转换说明:不直接输出,用于控制 printf 中参数的转换和打印。每个转换说明都由一个百分号字符(%)开始,以转换说明符结束,从而说明输出数据的类型、宽度、精度等。
printf("8051U深度入门到32位51大型实战视频,%s\r\n","加油");

转换说明简介:
1.类型:根据不同的 fmt 字符串,函数可能需要一系列的附加参数,每个
参数包含了一个要被插入的值,替换了 fmt 参数中指定的每个 % 标签。
关于附加参数,既可以是变量,也可以是常量。

2.位置:printf()函数的普通字符和转换说明放在" "双引号内,附加参数
放在双引号外,每个附加参数之间用逗号隔开。

3.数量:printf() 的附加参数与转换说明符是⼀⼀对应关系,如果有 n 个转
换说明符, printf() 的参数就应该有 n + 1 个。如果参数个数少于对应的转
换说明符,printf() 可能会输出内存中的任意值。

image.png

image.png

C语言基础极为重要,基础必须记熟。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:35
  • 最近打卡:2025-04-16 04:14:51

3

主题

41

回帖

360

积分

中级会员

积分
360
发表于 2024-12-8 10:58:09 | 显示全部楼层

image.png

Ai8051U视频教程第六集-IO输入输出

一、GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。

单片机输出高电平就是输出VCC电压,输出低电平就是输出GND的电压;高电平就是指接近于电源正极电压的电平;也叫逻辑“1”;

image.png

image.png

二、按键抖动:

1.PNG

例程代码:

#include "ai8051u.h" //调用头文件

#include "stc32_stc8_usb.h" //调用头文件
#include "intrins.h" //d调用头文件

#define u8 unsigned char //8位无符号变量(0-255)
#define u16 unsigned int //16位无符号变量(0-65535)

u8 state = 0; //初始状态

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

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速度

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 接口配置

IE2 |= 0x80;                                    //使能USB中断
EA = 1;											//IE |= 0X80;

P40 = 0;

while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置

while(1)
{

    if (bUsbOutReady)							//如果接收到了数据
    {
        //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
      
        usb_OUT_done();							//
    }

// //任务1:按下P32按钮灯亮,松开P32按钮灯灭;
// if( P32 == 0 ) //判断P32按钮是否按下
// {
// P00 = 0;
// }
// else
// {
// P00 = 1;
// }
//

// //任务2:按下P32按钮灯灭,松开P32按钮灯亮;
// if( P32 == 1 ) //判断P32按钮是否按下
// {
// P00 = 0;
// }
// else
// {
// P00 = 1;
// }

	//任务3:按一下灯亮,按一下灯灭
	if( P32 == 0 )								//判断P32按钮是否按下
	{
		Delay20ms();							//延时20ms消抖
		if( P32 == 0 )
		{
			state = !state;						//变量取反 0 1 0 1 0 1
			P00 = state;
			printf("state:%d\r\n",(int)state);
		
			while( P32 == 0 );					//等待P32松开
		
		}
	}


}

}

这些都是硬件的基础,必须搞懂。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:35
  • 最近打卡:2025-04-16 04:14:51

3

主题

41

回帖

360

积分

中级会员

积分
360
发表于 2024-12-8 13:39:19 | 显示全部楼层

image.png

AI051U深度入门到32位 51大型实战视频:第七集 AI051U定时器中断

哪怕梦想让我们拼的遍体麟伤,这次我们也要勇往直前!

一、1.定时器的介绍

定时器作用:
(1) 用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作
(2) 替代长时间的Delay,提高程序的运行效率和处理速度(可以打断主循环)
2.定时器的应用

任务1:LED灯三秒取反一次,这期间任意时刻按下按钮,串口打印按键次数。

image.png

image.png

image.png

image.png

3.函数的定义、声明、调用

image.png

22.PNG

老师讲得非常好,讲的易懂。

例程:

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

#define u8 unsigned char //8位无符号变量(0-255)
#define u16 unsigned int //16位无符号变量(0-65535)

u8 state = 0; //初始状态
u8 Run_State = 0; //运行状态

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

void Delay20ms(void) //@24.000MHz Delay20ms();
{
unsigned long edata i;

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

}
void Timer0_Init(void); //3秒@24.000MHz //函数声明

void main(void)
{
int count=1; //按键计数变量

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;

usb_init(); //USB CDC 接口配置

IE2 |= 0x80; //使能USB中断

code

code

code

code

code

code

code

code

code

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:35
  • 最近打卡:2025-04-16 04:14:51

3

主题

41

回帖

360

积分

中级会员

积分
360
发表于 2024-12-8 20:25:28 | 显示全部楼层

image.png

AI051U深度入门到32位 51大型实战视频:第八集 AI051UUSB定时器周期性调度任务

哪怕梦想让我们拼的遍体麟伤,这次我们也要勇往直前!

一、

1.周期性任务介绍

image.png

image.png

2.文件的创建(.c和.h)

image.png

3.结构体的介绍

image.png

image.png

4.结构体数组的周期性任务调度

image.png

image.png

例子:

include "config.h"
#include "task.h"
#include "io.h"

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

void main(void)
{
Sys_init(); //系统初始化
usb_init(); //USB CDC 接口配置

IE2 |= 0x80;                                    //使能USB中断
Timer0_Init();									//定时器初始化
EA = 1;											//IE |= 0X80;

P40 = 0;

while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置

while(1)
{

    if (bUsbOutReady)							//如果接收到了数据
    {
        //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
	
        usb_OUT_done();							//
    }
	Task_Pro_Handler_Callback();				//执行功能函数

}

}

void Timer0_Isr(void) interrupt 1 //1MS执行一次
{

Task_Marks_Handler_Callback();					//系统计时

}

讲的太好,继续学习

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:35
  • 最近打卡:2025-04-16 04:14:51

3

主题

41

回帖

360

积分

中级会员

积分
360
发表于 2024-12-9 21:12:12 | 显示全部楼层

AI051U深度入门到32位 51大型实战视频:第八集补充!

注:
第8集在7分23秒用ISP软件的定时器计算器生成定时时间的时候,
千万记得把使能定时器中断选项的勾勾给勾上!
千万记得把使能定时器中断选项的勾勾勾上!
千万记得把使能定时器中断选项的勾勾勾上!
常见错误:
1.关键词/变量函数名称的大小写错误或者漏了一个字符,P00写出p00,u8写成U8等等;
2.大括号缺了半个;(大括号上下一定要对齐,就不容易遗漏)
3.符号的中英文错误;
4.语句结尾没加分号;
5.变量/函数定义之后没有声明/重复定义;
6.#include在调用头文件时后面要先加一个空格,在+引号头文件名称

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-8 02:04 , Processed in 0.135769 second(s), 109 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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