找回密码
 立即注册
查看: 153|回复: 8

ai8051U--学习记录

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-09-02 07:57:01
已绑定手机

1

主题

9

回帖

93

积分

注册会员

积分
93
发表于 2025-8-17 15:12:41 | 显示全部楼层 |阅读模式

ai8051U点亮LED--打卡1

ai8051U有48个引脚。首先配置I/O口,每组口都有8个引脚,用两个寄存器配置。P0M0指向寄存器地址为0x94,P0M1指向寄存器地址为0x93。P0M0和P0M1的第0位组合配置P0.0引脚的模式。

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-09-02 08:48:20

16

主题

87

回帖

972

积分

版主

积分
972
发表于 2025-8-19 13:27:47 | 显示全部楼层
推荐优先看的 printf_usb("Hello World !\r\n")及usb不停电下载, 演示视频链接

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-09-02 07:57:01
已绑定手机

1

主题

9

回帖

93

积分

注册会员

积分
93
发表于 2025-8-23 15:58:19 | 显示全部楼层

ai8051U--USB不停电下载--打卡2

1. USB-CDC和USB-HID

引用自: https://blog.csdn.net/Darlingqiang/article/details/144365858

  • HID优点:
    • 实时性高,适合需要周期性小数据包传输的设备,操作系统支持好,无需额外驱动。
    • 缺点是带宽有限,不适合MR串流中需要高吞吐量的应用场景。
  • CDC优点:
    • 带宽高,支持大数据包传输,灵活性强,能高效处理MR串流中多种类型的数据。
    • 缺点是实时性稍弱,且可能需要安装驱动或配置。
  • USB HID和USB CDC是USB接口的两种不同类型,它们具有不同的功能和应用场景。
    • USB HID(Human Interface Device)是一种人机交互设备,通常用于连接键盘、鼠标、游戏控制器等外设。在USB HID接口下,这些设备可以以默认的数据接口形式进行连接和传输数据。
    • USB CDC(Communication Device Class)则是一种通信设备类,用于模拟提供虚拟 COM 端口 UART 接口的串行端口。通过扫码设置成此接口,开发人员可以使用与以前相同的 COM 端口接口将旧应用程序与新产品一起使用,而只需很少的硬件和软件修改。因此,USB CDC通常被用于开发与串口相关的通信应用中,例如与POS终端等设备进行通信。

总体来说,USB HID和USB CDC的主要区别在于它们的应用场景和功能不同。USB HID主要用于连接外设,而USB CDC则主要用于模拟串行端口通信。

2. 查询方式和中断方式

引用自: https://blog.csdn.net/weixin_45604914/article/details/118479618https://blog.csdn.net/weixin_45604914/article/details/118479618

  • 查询方式
    • CPU与设备串行工作、数据传送与主程序串行工作;适合于工作不太繁忙的系统。
  • 中断方式
    • CPU与设备并行工作、数据传送与主程序串行工作;适合于CPU任务比较忙的情况下,尤其适合实时控制和紧急事件的处理。
  • DMA方式
    • CPU与设备并行工作、数据传送与主程序并行工作;适合于需要高速而又频繁地与存储器进行批量的数据交换的I/O设备。

3. USB不停电下载

首先导入库文件和头文件,更改项目的配置,然后对main文件进行编程,最后到 ISP 中下载直接点击发送用户自定义命令并开始下载
编译后,hex文件变化时自动装载,需要勾选当目标文件变化时自动装载并发送下载命令。

项目配置如图:

项目配置图片.png

main文件如图:

main文件图片.png

ISP设置如图:

ISP设置图片.png

注释如有误请批评指正

4. 出现ERROR L104: MULTIPLE PUBLIC DEFINITIONS错误报警解决方法

使用最新版的USB-CDC库时(如下图),可以注释掉如下三行,库中已经自带。
库和头文件图片.png

// 设备型号描述
//char *USER_DEVICEDESC = NULL;
// 产品信息描述
//char *USER_PRODUCTDESC = NULL;
// 协议头标识--校验指令
//char *USER_STCISPCMD = "@STCISP#";

如果没有注释会出现如下报错

*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
    SYMBOL:  USER_STCISPCMD

**L104 错误** 是 Keil C51 编译器的链接错误,提示 **`USER_STCISPCMD` 符号被多次定义**
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-09-02 07:57:01
已绑定手机

1

主题

9

回帖

93

积分

注册会员

积分
93
发表于 2025-8-23 16:06:36 | 显示全部楼层

ai8051U--C语言基础--打卡3

1. 特殊符号定义

image.png

2. 进制转换

image.png

3. 数据类型

image.png

#define u8 unsigned char;

之后可以直接使用u8代表unsigned char类型。

4. 运算符

image1.png

image2.png

image3.png

5. 最新库printf打印使用方法

在头文件中将用到的输出口宏定义打开,才能接收到文本内容。

图片.png

项目编码格式为UTF-8时,在SIP的串口助手中汉字输出乱码为正常现象,可以在设置里面设置其编码格式为UTF-8。

image.png

代码多练即可

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-09-02 07:57:01
已绑定手机

1

主题

9

回帖

93

积分

注册会员

积分
93
发表于 2025-8-23 16:09:41 | 显示全部楼层

ai8051U--I/O输入输出--打卡4

GPIO通用输入/输出端口

GPIO(General Purpose Input Output,通用输入输出)是一种通用的数字输入/输出端口。在嵌入式系统中,GPIO被设计为灵活的引脚,可以被配置为输入或输出,以满足不同的应用需求。

物理按键抖动问题

单片机在读取按键状态时可以采用延时法进行防抖处理,当按键按下时延时10-20ms左右,等按键稳定后再次判断按键是否按下。

图片.png

记录

高电平:接近于VCC电源正极电压的电平,逻辑为“1”;
低电平:接近于GND电源负极电压的电平,逻辑为“0”。

施密特触发
按键输入为低电平时,左右两侧电压要小于最大值;
按键输入为高电平时,左右两侧电压要大于最小值。

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-09-02 07:57:01
已绑定手机

1

主题

9

回帖

93

积分

注册会员

积分
93
发表于 2025-8-23 16:10:29 | 显示全部楼层
AI8051U是一款专为嵌入式应用设计的高性能微控制器,其内置的GPIO(通用输入输出)端口在系统中扮演着至关重要的角色。本文将围绕AI8051U的GPIO功能、物理按键抖动处理方法、电平定义以及施密特触发机制进行专业阐述。

AI8051U支持4个独立的GPIO端口,这些端口具备高度灵活性,可根据应用需求配置为输入或输出模式。作为通用I/O接口,它们可直接连接外部设备,如传感器、LED、按键等,实现数据采集与控制功能。在实际应用中,GPIO的配置通常通过寄存器设置完成,确保系统运行的稳定性与可靠性。

在使用GPIO读取物理按键状态时,常会遇到按键抖动问题。由于机械开关在按下或释放过程中会产生短暂的不稳定信号,导致误判。为解决这一问题,常见的处理方式是采用延时法。当检测到按键状态变化时,系统可延时10-20ms,等待按键稳定后再进行状态判断,从而有效消除抖动带来的干扰。

在逻辑电平方面,AI8051U遵循标准的数字信号规范:高电平(Logic '1')接近于VCC电源电压,低电平(Logic '0')则接近于GND地电位。这种设计确保了与外部设备的兼容性,并提高了系统的抗干扰能力。

此外,AI8051U的GPIO还集成了施密特触发器(Schmitt Trigger),用于增强输入信号的稳定性。当按键输入为低电平时,施密特触发器确保输入电压低于设定的最大阈值;而当输入为高电平时,则保证电压高于最小阈值。该机制有效过滤了噪声和不稳定信号,提升了系统对输入信号的识别精度。

综上所述,AI8051U的GPIO端口不仅具备灵活的配置能力,还通过防抖处理、电平识别与施密特触发机制,保障了系统的稳定运行与精确控制。其在工业自动化、智能终端及物联网等领域的广泛应用,体现了其在嵌入式系统中的核心价值。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-09-02 07:57:01
已绑定手机

1

主题

9

回帖

93

积分

注册会员

积分
93
发表于 2025-8-23 16:11:27 | 显示全部楼层

ai8051U--定时器中断--打卡5

定时器参数功能
TM0PS = 0x5B; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式--GATE,C/T,M0,M1
TL0 = 0x3F; //设置定时初始值--定时/计数器
TH0 = 0x01; //设置定时初始值--定时器
TF0 = 0; //清除TF0标志--定时器0的中断请求标志位;1为有中断请求
TR0 = 1; //定时器0开始计时--值为1时,定时器0打开;值为0时,定时器0关闭
ET0 = 1; //使能定时器0中断
更详细说明参照芯片说明书。sysclk(hz)系统时钟频率--24MHZ=24000000HZ

注意事项
用ISP软件的定时器计算器生成定时时间的时候,千万记得把使能定时器中断选项的勾勾给勾上!
**

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-09-02 07:57:01
已绑定手机

1

主题

9

回帖

93

积分

注册会员

积分
93
发表于 2025-8-23 16:12:48 | 显示全部楼层

i8051U--定时器周期性调度任务--打卡6

定时器周期性调度任务

定时器周期性调度任务:通过定时器中断触发任务切换,以实现多任务的并行处理。

定时器:能够对内部时钟信号或外部输入信号进行计数,数值达到设定要求时,向CPU发起中断请求,完成外部程序的运行。
定时方式由单片机晶振分频和定时模式及初值决定定时的时间。

中断系统

中断:单片机在执行main函数时,如果系统出现随机产生的突发事件,单片机会暂停main函数的程序转而去处理突发事件,处理完后再返回到刚才暂停的位置继续执行main函数中的程序。

中断系统组成:中断源、中断请求标志位、中断控制位和中断优先级控制位。

  1. 中断源

    1. 中断源是引起中断的原因和申请中断的来源。
    2. 中断源有外部中断、定时/计数器中断和串行口中断。
  2. 中断请求标志位

    1. 用于判断中断的来源。
    2. TCON是定时器/计数器控制寄存器
    3. SCON是串口中断控制寄存器
  3. 中断使能寄存器IE

    1. IE是单片机中断的使能控制寄存器。
    2. 中断使能开关分两级:第1级为总开关EA,用于所有中断的控制;第2级为分级开关,分别对单片机5个中断源进行控制。
  4. 中断优先级控制位IP

    1. 中断源默认的中断优先级别,从高到低分别为:外部中断0、定时器/计数器0、外部中断1、定时器/计数器
    2. 中断优先级可更改:1是高优先级中断,0是低优先级中断

中断服务函数

中断服务函数是指当中断源申请中断后,单片机中断main函数的程序转而去执行的函数。中断服务函数优于main函数。

void 函数名称(void) interrupt 中断编号 using 工作寄存器组编号
{
  中断服务程序
}

中断编号:0--外部中断0,1--定时/计数器中断0,2--外部中断1,3--定时/计数器1,4--串口中断

中断服务函数注意事项:

  1. 中断服务函数优于main函数,不能直接被main函数调用,否则将导致编译失败。
  2. 中断服务函数没有返回值,应将中断服务函数定义为void类型。
  3. 中断服务函数参数函数,即中断服务函数不能有传参列表,否则将导致编译错误。
  4. 中断服务函数只识别中断编号,不识别中断服务函数名称。因此函数名称只要符合命名规则即可,但中断编号必须一一对应。
  5. 若中断服务函数中调用了其他函数,则被调用函数使用的寄存器编号必须与中断函数相同,也就是using 后面的数字必须一样。
  6. 中断服务函数使用浮点运算时,要保存浮点寄存器状态。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-09-02 07:57:01
已绑定手机

1

主题

9

回帖

93

积分

注册会员

积分
93
发表于 2025-8-23 16:13:38 | 显示全部楼层

i8051U定时器周期性调度任务是实现多任务并行处理的重要机制,通过定时器中断触发任务切换,可有效提升系统响应效率与任务管理能力。以下是对该机制的详细说明。

在i8051U单片机中,定时器用于对内部时钟信号或外部输入信号进行计数,当计数值达到设定值时,会向CPU发起中断请求,从而触发任务切换。定时器的工作方式由晶振分频、定时模式及初值共同决定,不同的配置可实现不同时间间隔的中断触发,适用于多种应用场景。

中断系统是单片机处理突发事件的核心机制。当中断源产生中断请求时,单片机会暂停当前执行的main函数,转而执行对应的中断服务程序,处理完成后返回原处继续执行。这一过程确保了系统能够及时响应外部事件,提高了整体运行效率。

中断源包括外部中断、定时/计数器中断和串行口中断。其中,定时器中断常用于任务调度,因其具备高精度和可编程性,适合实现周期性任务切换。

中断请求标志位用于标识中断来源,例如TCON寄存器用于控制定时器/计数器的中断状态,SCON寄存器则用于串行口的中断控制。这些寄存器的设置直接影响中断的触发与处理。

中断使能寄存器IE用于控制中断的开启与关闭。其分为两级:第一级为总开关EA,用于全局控制所有中断;第二级为各中断源的分级开关,分别控制外部中断、定时器中断等。

中断优先级控制位IP决定了中断的响应顺序。默认优先级从高到低依次为外部中断0、定时器/计数器0、外部中断1、定时器/计数器1、串行口。用户可通过设置IP寄存器调整中断优先级,以适应不同应用需求。

中断服务函数是中断处理的核心代码段,其格式如下:

void 函数名称(void) interrupt 中断编号 using 工作寄存器组编号
{ 
   // 中断服务程序
}

其中,中断编号对应不同的中断源,如0表示外部中断0,1表示定时器/计数器0中断,2表示外部中断1,3表示定时器/计数器1中断,4表示串行口中断。

通过合理配置定时器、中断源及中断服务函数,可以实现多任务的周期性调度,提高系统的实时性和稳定性。在实际应用中,应根据具体需求选择合适的定时器模式、初值及中断优先级,以优化任务调度效果。

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-09-02 07:57:01
已绑定手机

1

主题

9

回帖

93

积分

注册会员

积分
93
发表于 2025-8-23 16:15:00 | 显示全部楼层

ai8051U--数码管--打卡7

静态数码管

共阳极接法:所有LED阳极并联接到电源正极,低电平点亮。
共阴极接法:所有LED阴极并联接到电源负极,高电平点亮。
AS表示单色
BS表示双色
LED灯区分正负极:金属片面积小的是正极,面积大的是负极;引脚长的是正极,引脚短的是负极。
74HC245驱动芯片,74HC245是方向可控的八路缓冲器,主要用于实现数据总线的双向异步通信。为了保护脆弱的主控芯片,通常在主控芯片的并行接口与外部受控设备的并行接口间添加缓冲器。当主控芯片与受控设备之间需要实现双向异步通信时,自然就得选用双向的八路缓冲器了,74HC245就是面向这种需求的。常见于同并口液晶屏、并口打印机、并口传感器或通讯模块等设备的接口上。

74HC595驱动芯片

74HC595脚位图及说明

74HC595.png

管脚说明:

14脚:DS(SER),串行数据输入引脚
13脚:OE,输出使能控制脚,它是低电才使能输出,所以接GND
12脚:RCK(STCP),存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器转存到存储寄存器。
11脚:SCK(SHCP),移位寄存器时钟引脚,上升沿时,移位寄存器中的bit 数据整体后移,并接受新的bit(从SER输入)。
10脚:MR,低电平时,清空移位寄存器中已有的bit数据,一般不用,接 高电平即可。
9 脚 :串行数据出口引脚。当移位寄存器中的数据多于8bit时,会把已有的bit“挤出去”,就是从这里出去的。用于595的级联。
Q0~Q7:并行输出引脚

使用参数:

VCC:2V~6V,5V最好
IQn:± 35mA

注意事项:

第一个从SER送入的bit将会从Q7出去。

74HC595功能为串行输入,并行输出
74HC595里面有2个8位寄存器:移位寄存器、存储寄存器。
移位寄存器
串行输入:进入的位数据依次下移,第一个输入的位,是并行输出的最后一个位。(移位寄存器就像8位竖形糖罐,首先进去的最后出)。

74HC595的14脚:DS,又叫SER 英文全称是:Serial data input ,顾名思义,就是串行数据输入口。

74HC595的数据来源只有这一个口,一次只能输入一个位,连续输入8次,就可以积攒为一个字节了。
74HC595的11脚,(shift register clock input) 移位寄存器时钟引脚。上升沿有效。
上升沿:电平从低到高的那个过程。

存储寄存器
存储寄存器直接和8个输出引脚相通,将移位寄存器的数据转移到存储寄存器后,Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 就可以接收到我们开始输入的一个字节的数据。所谓存储寄存器,就是数据可以存在这个寄存器中,并不会随着一次输出就消失,只要74HC595不断电,也没有新的数据从移位寄存器中过来,数据就一直不变且有效。新的数据过来后,存储寄存器中的数据就会被覆盖更新。

74HC595的12脚: (storage register clock input ) 存储寄存器时钟

数据从位移寄存器转移到存储寄存器,也是需要时钟脉冲驱动的,这就是12脚的作用。它也是上升沿有效。

移位寄存器的8个位填满后,再往移位寄存器中塞一个,移位寄存器的最后一个位数据会被挤出去,从9脚输出。如果我们把第一个595的9脚连接到第二个的串行数据输入脚SER,那么,就形成了595的级联。这样,如果我们用2个595组合成了一个新的超级595,这个超级595的移位寄存器和存储寄存器的容量都翻倍了,1口控制16口。

  • Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 分别接 8个LED正极
  • 14脚SER 接 单片机P3.4
  • 11脚SCK 接 单片机P3.6
  • 12脚RCK接 单片机P3.5
  • 13脚OE接GND
  • 10脚MR接VCC
  • 9脚Q7S接下一个74HC595的14脚SER

第一个74HC595控制每个数码管的电平,第二个74HC595控制LED的每个段。

段码控制一个LED的显示数字,位码控制哪个数码管亮。

动态数码管

第一个数码管的a段与第二个数码管的a段连接起来,依次连接,留出每位的数码管的公共端。

第一位数码管输出对应的位码,输出该位数码管的段码,延时消影处理,依次循环,实现动态数码管。
人眼的视觉不容易分辨出50HZ以上的动态刷新,人眼存在视觉暂留效应,只要每位显示间隔足够短,就可以给人同时显示的感觉。
每个数码管显示周期太短会有重影,周期过长会有闪烁现象。

仿真

调用库函数进行试验。

回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-9-3 08:53 , Processed in 0.152778 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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