找回密码
 立即注册
查看: 391|回复: 9

感谢AI官方 免费 + 包邮 Ai8051U实验箱

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-05-02 06:05:26
已绑定手机

3

主题

16

回帖

109

积分

注册会员

积分
109
发表于 2025-1-24 06:17:40 | 显示全部楼层 |阅读模式
第一集   初步认识了 单片机实验箱的功能
AI8051U强在哪里?
一、优化了QSPI的FLASH读写能力
    案例展示使用8080的8位并口屏演示事例,手写的刷频率较高;可以用来驱动LED屏幕作为交互使用,同时对大容量视频的播放有了质的提升。
    新增的QSPI功能:即四线串行外设接口,是一种高速的、面向Flash存储器的串行接口标准。相比于传统的SPI,QSPI接口通过增加数据线的数量(从SPI的一条数据线增加到QSPI的四条数据线),实现了更高的数据传输速率和更大的吞吐量。这使得QSPI接口特别适合于需要高速访问大量数据的嵌入式系统。



二、 支持I2S录音放音功能
    视频展示了录放音功能,因为没讲原理所以不太清楚厉害在哪。所以查阅原理图、代码和手册进行分析。
    没有玩过音响,对这一块不太了解。看了一下原理图,录音功能主要是MIC后面接了低通滤波和运放后再接ADC功能(?),播放功能主要是TLV320AIC23芯片,借助其集成的ADC和DAC功能接MCU的I2S。软件源码方面,初步了解到采样后数据存储在FLASH中,播放时从FLASH读取数据通过I2S发送给芯片。对录音时的采样部分还要继续学习。



三、 PWM可以兼容DMA了,四、可以进行硬件浮点乘除单元计算,用于制作频谱分析仪
    视频通过上位机实现了频谱仪功能。这里查阅手册发现,对比STC32G和AI8051U,在DMA方面的提升可不只是一点点:
    在PWM/QPI/TFT LCD/方面加入了DMA支持,同时还支持P2P即外设到外设的数据传输,释放CPU算力(就好像老板雇了个工作能力超强的秘书)。



五、支持部署一些AI计算模型,比如手写计算器,也就是芯片名称AI的由来(硬件乘除,单精度浮点)
    这个网友的案例在活动群里早有了解。手写识别涉及到最基本的AI学习。经前期了解,这种功能大致实现思路是,通过构建一个适合与手写数字识别的神经网络算法模型,在电脑端导入训练素材并经过多次迭代计算后,将神经元输出结果限制在较为合理的误差范围内,得出变量的参数;然后将该算法部署在AI8051U当中进行实时计算。
    这个案例说明了这款芯片的算力是支持一些AI算法的。

除此之外,该芯片设计兼容了以往部分芯片的引脚等,同时在我前期制作开发板的过程中发现,这款MCU的最小外围电路极少,简直跟差点就能用没啥区别。

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-05-02 06:05:26
已绑定手机

3

主题

16

回帖

109

积分

注册会员

积分
109
发表于 2025-1-24 06:42:15 | 显示全部楼层

感谢AI官方 免费 + 包邮 Ai8051U实验箱

第二集  介绍了Ai8051U实验箱 的功能  对实验箱有了  了解。
截图202503171926235802.jpg
截图202503171927001078.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4850

回帖

8388

积分

超级版主

DebugLab

积分
8388
发表于 2025-1-24 07:28:54 | 显示全部楼层
每个人学习打卡以回复形式发到同一个帖,不要新开帖
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-05-02 06:05:26
已绑定手机

3

主题

16

回帖

109

积分

注册会员

积分
109
发表于 2025-1-27 10:24:26 | 显示全部楼层
第三集    感谢老师的讲解  从最简单的 LED 灯 讲起   知道了 KEIL 软件的 工程建立,和点亮一个LED  灯   #incoude" ai8051u.h"  viod main() { while(1 ) {    }}简单框架

实战小白化身点灯大师上线!(不是,其实基础功能已经学完一遍了)本节课主要讲了两部分重点内容,其一是工程的搭建,其二是IO点灯。

一、环境搭建

这里不再赘述,相比于使用vscode部署esp idf开发环境那个“难”以置信的方法,AI8051U环境搭建很为方便,技术手册里面也是手把手地教导。下面讲几个注意点:

1. AI8051U支持32位和8位两种方式,由不同编译器支持,注意区分,烧录时ISP也要注意选择;



2. 安装好编译环境后注意看一下软件的激活情况,没有激活时当项目工程体量较大会无法编译。这里官方没有讲到,因为要涉及到魔法激活的事情。激活后会有激活号。
未激活时报错如下:*** ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED
                             LIMIT:   0800H BYTES



二、IO点灯

很简单粗暴的一行代码实现: PXX=0(下拉)、PXX=1(上拉)。

因为我有强迫症,为了增加代码可读性,进行了封装:(这一部分代码是错误的,8051的运行逻辑不能照搬STM32,不用封装为宜,已有大佬指出)
  • // 为P5端口封装设置引脚状态的函数
  • void set_P5(unsigned char pin, unsigned char level) {
  •    if(pin>=0 && pin <=7){
  •                         if (level == HIGH) {        P5 |= (1 << pin);        }
  •                         else {        P5 &= ~(1 << pin);        }
  •                 }
  • }
  • void BoardLED_ON(void)        //        开发板板载绿色LED        P50
  • {
  •         set_P5(0,LOW);                //P50写入低电平开启LED
  • }
  • void BoardLED_OFF(void)
  • {
  •         set_P5(0,HIGH);
  • }


复制代码

下面给出一些拓展:

1. IO口模式

不同IO口有不同功能,技术手册也都解释说明了。这里板子启动时默认将所有IO口都设置为了准双向口。
准双向口的拉电流能力是270-150uA,因此也可以驱动高亮0603LED而不需要限流电阻。
但是,推挽输出的拉电流能力能够到20mA,会达到某些0603LED的Imax,因此需要电路串联限流电阻。当然,推挽输出模式下LED发光会更亮。

  • P5M0 = 0x01;                 //推挽输出模式开灯
  •         P5M1 = 0x00;                 //注释掉这两行为准双向口模式开灯

复制代码




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-05-02 06:05:26
已绑定手机

3

主题

16

回帖

109

积分

注册会员

积分
109
发表于 2025-1-27 11:05:08 | 显示全部楼层
第四集  讲了库文件的使用 (。lib  .h) 代码的复制   手册的查询  
接上一堂课拓展的有关芯片上电流程的话题,这节课讲了几种下载方式。从芯片最小电路得知,使用USB插头单刀直入地接入D+和D-就能实现电路下载。



而开发手册也贴心地分5V供电和3.3V供电,手动烧录、全自动单串口和双串口,几种模式分门别类地精讲了每类下载烧录方式的电路图和操作方法。下面简要总结一下:

一、USB手动下载

该方式会占用一个IO口,导致该IO口仅能用于特定的烧录功能,同时必须要设计电子开关或者机械自锁开关用于MCU-VCC的上电、停电操作。

方法一:P3.2接地借助INT0中断再结合电源开关。
方法二:使用P4.7nRST的复位功能,免通断电案件烧录。

这里强调一点,那就是无论是方法一还是方法二,只要设计了手动下载方式,就必须要设计一个MCU供电的硬件开关。仅仅使用USB口插拔的通断电是不行的,因为从芯片的上电过程可以了解到,MCU启动初期会进入系统ISP监控程序,此时会依据USB的电路情况判断是进入ISP下载模式还是直接进入用户程序区,这就要求这一时刻的状态应该是USB口先于MCU通电。当使用USB插拔通断时,芯片和USB是同时上电的,芯片会因为没有检测到USB电路判断为不需要进入ISP下载模式,从而直接进入用户程序区。这也是硬件设计需要注意的部分。



有同学会有疑问,方法二不是免通断电吗,那为什么还要设计一个开关呢?

这是因为,P4.7的复位功能需要芯片第一次上电后配置。该引脚默认配置模式为IO功能,需要先烧录一次并在ISP选择取消P4.7用作IO功能而使用复位功能。那么,如果不设计手动开关,就没办法进行这一次烧录,也就没有后面的 先有鸡还是先有蛋 的话题了。想省元器件的同学我这里提供一个思路,那就是把开关位置替代为两个测试点,首次使用时镊子短接停供电,然后再使用方法二。



二、USB自动下载


当然,论懒是永远没有官方懒的,为了图省事,官方干脆开发个USB自动烧录功能,这下不光省了串口芯片,连IO占用都免了。USB下载目前分两种方式,即USB-CDC方式和USB-HID方式。


以USB-CDC为例,执行烧录程序时有USB_INIT()函数,这里对库函数进行简要阅读,发现在配置好USB时钟、使能USB功能和中断后,在中断函数中读取了寄存器的值(有可能ISP的CMD命令就是存在这里),通过比较接受命令char *USER_STCISPCMD = "@STCISP#"值后执行数据接收等工作。(具体没细看,欢迎补充指正)


对于用户端而言,只需要在官网下载LIB并进行相关烧录后配置即可,当然这个烧录指令也是可以自定义的,只要ISP端和代码端一致即可。

三、串口自动下载


除了本节课讲的USB烧录方式,因为我在硬件开发过程中使用了Ai8H2K12U-SOP8芯片进行单串口自动烧录,而这个烧录芯片市场价0.95元,外围电路极少,买来自带烧录代码直接上手使用。甚至还有1元不到的SOP16封装的双串口芯片,在技术手册里同样进行了详细说明,按照电路图绘制后插电即可烧录,比CH340省钱省事多了。



附上我的串口电路



当然想学习体验手动和自动烧录的同学,可以使用下面的电路:


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-05-02 06:05:26
已绑定手机

3

主题

16

回帖

109

积分

注册会员

积分
109
发表于 2025-1-27 18:31:40 | 显示全部楼层
第五集  讲了 printf 输出  ascii 码表 关系运算符  #define 定义  if  else 条件判断


还是大一那一会学的C语言,因为专业问题C++没有学过,还好用KEIL基本用C就可以了。

一、关于printf

课程讲解了将USB-CDC串口通讯重定向至printf函数,使用LIB库仅需要取消注释即可实现。



使用UART串口的话,我的方法是如下这样,可以封装为一个函数,然后加个串口形参;也可以每个串口写一个。
  • //========================================================================
  • // 函数: void UART1_printf(char *fmt,...)
  • // 描述: 将串口发送函数重定向为UART1_printf
  • // 参数: fmt:  字符串指针,其余为可变变量
  • // 返回: none.
  • //========================================================================
  • void UART1_printf(char *fmt,...)
  • {
  •         u32 i,length;
  •         va_list ap;
  •         va_start(ap,fmt);
  •         vsprintf(TX1_Buffer,fmt,ap);
  •         va_end(ap);
  •         length=strlen((const char*)TX1_Buffer);
  •         //开始发送数据
  •         for(i=0;i<length;i++)
  •         {
  •                 SBUF  = TX1_Buffer;
  •                 B_TX1_Busy=1;
  •                 while(TI == 0);                //忙等待,等待当前字节发送完成
  •                 TI = 0;                                                //清除请求位
  •         }
  •         B_TX1_Busy=0;
  • }


复制代码

也有大佬直接用printf的,好像用的是啥putchar啥的没注意了解,有知道的大佬可以解释一下。(或许这里我可以宏定义一下?  #define    printf    UART1_printf

二、关于进制转换

有时候懒着用计算器,可以记住几个常用的简单的16进制和2进制转换:
BIN                HEX
0000 0001      0x01
0000 0010      0x02
0000 0100      0x04
0000 1000      0x08
0001 0000      0x10
0010 0000      0x20
0100 0000      0x40
1000 0000      0x80

实际应用中,比如要给P0M0赋值为 1100 0000(这里实际是要把高2位置1而不改变其他位数据),就可以 P0M0 |=(0X80 | 0X40);或者P0M0 |=(0X80 + 0X40);

三、关于变量类型

如果要使用64位变量需要在程序文件申明 #program float64,主要是双精度数据。其他的在USB文件里已经宏定义过了
  • typedef bit BOOL;
  • typedef unsigned char BYTE;
  • typedef unsigned int WORD;
  • typedef unsigned long DWORD;
  • typedef unsigned char u8;
  • typedef unsigned int u16;
  • typedef unsigned long u32;
  • typedef unsigned char uchar;
  • typedef unsigned int uint;
  • typedef unsigned int ushort;
  • typedef unsigned long ulong;
  • typedef unsigned char uint8_t;
  • typedef unsigned int uint16_t;
  • typedef unsigned long uint32_t;

复制代码


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-05-02 06:05:26
已绑定手机

3

主题

16

回帖

109

积分

注册会员

积分
109
发表于 2025-1-27 19:16:36 | 显示全部楼层
第六集 讲了 GPIO口  键盘消抖 20ms 。  (问题 1    头文件的制作   2 库文件的制作    )


结合上课讲的知识和查询手册发散的知识点,进行梳理如下:
一、IO口的硬件部分1. 电气特性方面:
  • IO口的VDD最大支持电压+5.5V,普通IO对地最大电压为VDD+0.3V。当工作在5V条件下时,IO最大电压5.3V;工作在3.3V条件下时,IO最大电压3.6V。
  • 3.3V工作条件下,双向模式和推挽模式的高电平电流如下,这个差距表明在比如spi有些条件写IO口要设置为推挽模式。同时,3.3V的IO口速度比5V工作条件下的低,比STM32的IO速度要低。另外,输出低电平的灌电流能力是20mA,注意电路设计时不要超电流了。
2. IO口的四种模式
  • 芯片上电进入工作状态时默认所有IO进入高阻输入状态,这就是为什么初始化里面要有下面的代码了,也就是说所有IO口在执行下面代码后、进入工作状态前全部初始化为准双向口。IO口模式配置可以在ISP里面可视化配置。
            P0M0 = 0x00; P0M1 = 0x00;         P1M0 = 0x00; P1M1 = 0x00;         P2M0 = 0x00; P2M1 = 0x00;         P3M0 = 0x00; P3M1 = 0x00;         P4M0 = 0x00; P4M1 = 0x00;         P5M0 = 0x00; P5M1 = 0x00; ​
  • 由于P3.0和P3.1为烧录用的通讯接口,所以这两个IO口的模式略有不同,手册里都写的很清楚。
  • 上面提到,推挽模式下高电平可输出达20mA,而准双向口仅200uA左右。在使用PWM、ADC等功能时要开启推挽模式。(修订:ADC需要高阻输入模式)


二、软件部分
按键检测电平代码很简单,即 if(!PXX)就可以。下面讲一些关于按键的驱动代码特征:
1. 关于按键消抖
按键电路不可避免的会在几个ms的时间内存在抖动,在这期间电平的波动变化的,因此会导致按键误触发的问题。这是所有按键都会存在的问题。
按键抖动有前言抖动和后沿抖动两种情况,而消抖分为软件消抖和硬件消抖两种方式。硬件层面可以通过在按键电路中加入100nF电容以达到去耦的目的,如下图
而软件消抖的逻辑则是判断按键按下的时刻后,通过延时避开抖动周期后再次检测按键逻辑,以规避掉前沿抖动。代码如下:
        if(Board_BTN_L == 0)                {                        delay_ms(50);                        if (Board_BTN_L == 0)        BoardLED_ON();                }​
这段代码的延时时间可以在几十ms到几百ms不等,根据个人按键习惯调整。
2. 关于延时函数
在使用ardiuno或者stm32环境进行单片机开发时很容易通过调用库函数实现 delay();或者在FreeRTOS中的 Vtaskdelay();或者 pdMS_TO_TICKS(500)等等。但是在刚使用AI8051时就有点摸不着头脑:延时函数呢?
其实AI8051的延时函数回归到单片机发生延时的最本质特性,即tick数(心跳)。每个单片机在进行计时时都是根据频率特定计算下的TICK数来实现计时的。打个比方,当MCU频率在10MHz时,一个TICK就是0.05us,要实现延时100ms,就需要100ms/0.05us=2000000个tick。因此在你研究AI8051U的计时函数时会发现它首先与系统频率有关:
void Delay100ms(void)        //@20.000MHz{        unsigned long edata i;        _nop_();        _nop_();        i = 499998UL;        while (i) i--;}​
那么这个i为什么在20MHz下取499998呢?这里的 499998UL很可能是经过事先估算或者调试得出的一个比较接近实现 100 毫秒延时效果的值(具体我也不太了解,有大佬解释一下吗)。
当然官方也给出了一个自适应系统频率的延时函数如下:
//========================================================================// 函数: 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 / 6000;          while(--i);     }while(--ms);}​3. 关于按键的短按、长按检测
在视频的按键实验环节会出现一个现象,也就是当持续按下按键时系统会不断循环执行判断和开关灯的代码,从而导致长按时达不到预期效果。解决方法很简单,就在执行开关灯后面加一个 while()判断就行了。
我这里再扩展一下,那么要实现长按操作呢?这里涉及到一个长按判断和连续长按判断的逻辑,也就是当按键按下时比如持续1秒后判断为长按,然后每3秒判断长按未松开时长按继续生效。感兴趣的同学可以写一下相关代码,这里应该要用到下节课的计时器。



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-05-02 06:05:26
已绑定手机

3

主题

16

回帖

109

积分

注册会员

积分
109
发表于 2025-3-16 20:36:35 | 显示全部楼层
第七集 使用 下载软件生成定时代码  定时器的线路框架,定时器代码的说明 定时频率 定时时间  高低间隔时间 等计算。函数的定义 使用 说明
捕获.PNG
1.PNG
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-05-02 06:05:26
已绑定手机

3

主题

16

回帖

109

积分

注册会员

积分
109
发表于 2025-3-27 13:28:48 | 显示全部楼层
第八集 定时器周期性调度任务   捕获1.PNG 捕获.PNG 捕获2.PNG
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-05-02 06:05:26
已绑定手机

3

主题

16

回帖

109

积分

注册会员

积分
109
发表于 2025-4-5 03:32:31 | 显示全部楼层
第九集 数码管
51单片机存储器结构
MCS-51单片机在物理结构上有四个存储空间
1、片内程序存储器
2、片外程序存储器
3、片内数据存储器
4、片外数据存储器
但在逻辑上,即从用户的角度上,8051单片机有三个存储空间:
1、片内外统一编址的64K的程序存储器地址空间
2、256B的片内数据存储器的地址空间
3、以及64K片外数据存储器的地址空间
在访问三个不同的逻辑空间时,应采用不同形式的指令(具体我们在后面的指令系统学习时将会讲解),以产生不同的存储器空间的选通信号。
下图是8051单片机存储器的空间结构图

程序存储器
    一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。程序相当于给微处理器处理问题的一系列命令。其实程序和数据一样,都是由机器码组成的代码串。只是程序代码则存放于程序存储器中。
    MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。强制CPU从外部程序存储器读取程序。对于内部有ROM的8051等单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。
    当=1时,程序从片内ROM开始执行,当PC值超过片内ROM容量时会自动转向外部ROM空间。
    当=0时,程序从外部存储器开始执行,例如前面提到的片内无ROM的8031单片机,在实际应用中就要把8031的引脚接为低电平。
    8051片内有4kB的程序存储单元,其地址为0000H—0FFFH,单片机启动复位后,程序计数器的内容为0000H,所以系统将从0000H单元开始执行程序。但在程序存储中有些特殊的单元,这在使用中应加以注意:
    其中一组特殊是0000H—0002H单元,系统复位后,PC为0000H,单片机从0000H单元开始执行程序,如果程序不是从0000H单元开始,则应在这三个单元中存放一条无条件转移指令,让CPU直接去执行用户指定的程序。
    另一组特殊单元是0003H—002AH,这40个单元各有用途,它们被均匀地分为五段,它们的定义如下:
     0003H—000AH  外部中断0中断地址区。
     000BH—0012H  定时/计数器0中断地址区。
     0013H—001AH  外部中断1中断地址区。
     001BH—0022H  定时/计数器1中断地址区。
     0023H—002AH  串行中断地址区。
    可见以上的40个单元是专门用于存放中断处理程序的地址单元,中断响应后,按中断的类型,自动转到各自的中断区去执行程序。从上面可以看出,每个中断服务程序只有8个字节单元,用8个字节来存放一个中断服务程序显然是不可能的。因此以上地址单元不能用于存放程序的其他内容,只能存放中断服务程序。但是通常情况下,我们是在中断响应的地址区安放一条无条件转移指令,指向程序存储器的其它真正存放中断服务程序的空间去执行,这样中断响应后,CPU读到这条转移指令,便转向其他地方去继续执行中断服务程序。
下图是ROM的地址分配图:

从上图中大家可以看到,0000H-0002H,只有三个存储单元,3个存储单元在我们的程序存放时是存放不了实际意义的程序的,通常我们在实际编写程序时是在这里安排一条ORG指令,通过ORG指令跳转到从0033H开始的用户ROM区域,再来安排我们的程序语言。从0033开始的用户ROM区域用户可以通过ORG指令任意安排,但在应用中应注意,不要超过了实际的存储空间,不然程序就会找不到。

数据存储器
    数据存储器也称为随机存取数据存储器。数据存储器分为内部数据存储和外部数据存储。MCS-51内部RAM有128或256个字节的用户数据存储(不同的型号有分别),片外最多可扩展64KB的RAM,构成两个地址空间,访问片内RAM用“MOV”指令,访问片外RAM用“MOVX”指令。它们是用于存放执行的中间结果和过程数据的。MCS-51的数据存储器均可读写,部分单元还可以位寻址。
    MCS-51单片机的内部数据存储器在物理上和逻辑上都分为两个地址空间,即:
数据存储器空间(低128单元);
特殊功能寄存器空间(高128单元);

这两个空间是相连的,从用户角度而言,低128单元才是真正的数据存储器。下面我们就来详细的与大家讲解一下:
低128单元:
    片内数据存储器为8位地址,所以最大可寻址的范围为256个单元地址,对片外数据存储器采用间接寻址方式,R0、R1和DPTR都可以做为间接寻址寄存器,R0、R1是8位的寄存器,即R0、R1的寻址范围最大为256个单元,而DPTR是16位地址指针,寻址范围就可达到64KB。也就是说在寻址片外数据存储器时,寻址范围超过了256B,就不能用R0、R1做为间接寻址寄存器,而必须用DPTR寄存器做为间接寻址寄存器。

从上图中我们可以看到,8051单片机片内RAM共有256个单元(00H-FFH),这256个单元共分为两部分。其一是地址从00H—7FH单元(共128个字节)为用户数据RAM。从80H—FFH地址单元(也是128个字节)为特殊寄存器(SFR)单元。从图1中可清楚地看出它们的结构分布。
1、通用寄存器区(00H-1FH)
    在00H—1FH共32个单元中被均匀地分为四块,每块包含八个8位寄存器,均以R0—R7来命名,我们常称这些寄存器为通用寄存器。这四块中的寄存器都称为R0—R7,那么在程序中怎么区分和使用它们呢?聪明的INTEL工程师们又安排了一个寄存器——程序状态字寄存器(PSW)来管理它们,CPU只要定义这个寄存的PSW的D3和D4位(RS0和RS1),即可选中这四组通用寄存器。对应的编码关系如下表所示。惹程序中并不需要用4组,那么其余的可用做一般的数据缓冲器,CPU在复位后,选中第0组工作寄存器。
捕获1.PNG
2、位寻址区(20H-2FH)
片内RAM的20H—2FH单元为位寻址区,既可作为一般单元用字节寻址,也可对它们的位进行寻址。位寻址区共有16个字节,128个位,位地址为00H—7FH。位地址分配如下表所示
截图202504050347502320.jpg

CPU能直接寻址这些位,执行例如置“1”、清“0”、求“反”、转移,传送和逻辑等操作。我们常称MCS-51具有布尔处理功能,布尔处理的存储空间指的就是这些为寻址区。
3、用户RAM区(30H-7FH)
在片内RAM低128单元中,通用寄存器占去32个单元,位寻址区占去16个单元,剩下的80个单元就是供用户使用的一般RAM区了,地址单元为30H-7FH。对这部份区域的使用不作任何规定和限制,但应说明的是,堆栈一般开辟在这个区域。
高128单元:(80H-FFH)
前面提到,在片内的RAM中,高128位是专用寄存器区,因这节比较重要,所以我们单独的安排一节课跟大家介绍。下节课我们就重点介绍51单片机片内RAM的高128位,即专用寄存器区。
片外数据存储器在这里我们就先在介绍,在后面关于数据存储器扩展的章节中我们再详细介绍。



回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 03:11 , Processed in 0.850227 second(s), 103 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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