找回密码
 立即注册
楼主: 大亮

《STC教学研讨会STC8H/STC32G》--学习记录/学习心得--打卡帖 | 建议送

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 20:40:21

1

主题

75

回帖

345

积分

中级会员

积分
345
发表于 2023-9-14 17:48:56 | 显示全部楼层
《何老师 STC32位8051单片机原理及应用-STC32G12K128》2023/8/18


Intel 80C51 ISA Reference


逻辑指令:与 ANL A,Rn   /   ANL A.dir8 / ANL A, @Ri/ ANL A, #data/    ANL dir8,A(复杂指令集架构,在存储器上操作,ARM MIPS 在寄存器上操作,流水线、优化)/ANL dir8, #data  /....
截图202309141149468699.jpg 截图202309141150192162.jpg

ORL A,Rn/ ORL A,dir8 /ORL A,@Ri...                   []索引位
截图202309141403181565.jpg 截图202309141403465010.jpg 32位操作引入后,去做应用,更加精彩

逻辑异或指令,取反的概念,XRL 数学计算和寄存器状态配置
清除指令: CLR A     机器码E4   
取反指令: CPL A      F4
移位指令: RL A    循环左移
循环左移带进位:   RLC A             [7]-->CY  CY-->[0]  带着CY去循环左移
RR A   右移   RRC A 带进位的循环右移
逻辑左移  SLL Rm  8位操作,[0]补0          SLL WR   SRA Rm 算数右移 移出的最高位保持不变,最低为移进CY     SRL 算数左移
SWAP A 3:0 交换7:4  半字节交换指令 电路 硬件描述语言

数据传输指令:(汇编语言的作用,深入理解计算机底层的逻辑)
1、数据传输指令:MOV
          1、内部数据传输指令
          2、外部数据传输指令
          3、查找表传输指令
2、堆栈操作指令  PUSH
3、数据交换指令 XCH 数据交换  累加器A 8051源内容
截图202309141633564414.jpg

压栈PUSH 入栈时,堆栈指针自动加1(地址加一)
出栈POP 把堆栈内容放到源寄存器,堆栈指针减一

位指令:清除指令 CLR bit (251存储器区域)/   CLR bit51(8051存储器区域)  (bit)<-- 0
置位指令:SETB 指令将指定的位设置为1  置位!
取反: CPL bit CPL bit51
位逻辑操作:ANL/ ORL

位传输指令: 典型应用 CY

控制指令:(指令集架构)
调用指令:ACALL addr11 该指令用于无条件调用指定地址的子程序  / ECALL 截图202309141740181428.jpg 截图202309141741124246.jpg
ECALL addr24  ACALL的扩展应用,寻址范围正大
截图202309141742172957.jpg

长调用: LCALL (调用!要返回!!)   
RET 从子程序返回  / ERET 扩ECALL对应)/  RETI 从中断返回

截图202309141747196160.jpg 截图202309141747487426.jpg

AJMP address11 无条件跳转指令 /绝对跳转

截图202309141747338860.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 20:40:21

1

主题

75

回帖

345

积分

中级会员

积分
345
发表于 2023-9-15 09:45:47 | 显示全部楼层
《陈老师 1T 8051 单片机原理及应用-STC8H8K64U 》-2023/9/6-ADC 学习笔记


传输数字信号,物理量模拟量,转换,检测和输出/控制
ADC analog to digital converter 将模拟量转换为数字量的器件 / DAC digital to analog converter 将数字量转换成为模拟量器件
专业DAC,顶级DAC用于音乐播放
传感器的研究和应用 MEMS 半导体底层研究
模拟信号一般采用4~20mA DC的标准信号传输
仪器仪表
逐次逼近式模数转换器工作原理: 称量过秤加减砝码过程
截图202309150720307545.jpg SAR寄存器。选型:分辨率(位宽), 通道, 基准电压, 转换速度 1~200微秒, 采样保持器(Track/Hold T/H),量程,满刻度误差,线性度, 数字接口方式, 模拟信号的类型, 电源电压,功耗, 封装
STC8H8K64U ADC
截图202309150753075432.jpg
ACD控制寄存器(ADC_CONTR):上电ADC_POWER  启动ADC_START 触发ADC_EPWMT 多路控制通道选择ADC_CHS [3:0]  ADC_FLAG

ADC配置寄存器:
ADC扩展配置寄存器:
ADC转换结果寄存器:
ADC时序控制寄存器:
截图202309150806511778.jpg

应用: 编程步骤、
1、设置相关IO口工作模式高阻输入
2、设置ADC内部时序,ADC采样时间建议设置为最大值(ADCTIM)
3、设置ADC时钟(ADCCFG)
4、使能ADC模块(ADC_CONTER)
5、驱动AD转换
6、清除标志位


截图202309150849189794.jpg ADCTIM 0 0x3F;

截图202309150850498197.jpg ADCCFG=0X2F;
截图202309150851216835.jpg ADC_CONTR=0X80;
截图202309150852443645.jpg 截图202309150853048667.jpg



  
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 20:40:21

1

主题

75

回帖

345

积分

中级会员

积分
345
发表于 2023-9-15 11:06:35 | 显示全部楼层
《陈教授 1T 8051 单片机原理及应用-STC8H8K64U 》-2023/9/11-PWM 学习笔记review


PWM 脉冲宽度调制 数字输出---》控制————》模拟电路
方波 占空比调制 数字
应用场景:
控制舵机转角
电机控制
截图202309150955577868.jpg

STC8H8K64U 8通道16位高级PWM定时器生成两组周期不同的PWMA PWMB CC捕获模块   
时基单元
PWM控制电机:
三相六拍式的驱动,无刷电机 ,互补PWM,直流电机!!!有霍尔器件、无霍尔器件
===================================================================================================

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 20:40:21

1

主题

75

回帖

345

积分

中级会员

积分
345
发表于 2023-9-16 03:51:39 | 显示全部楼层
《何老师 STC32位8051单片机原理及应用-STC32G12K128》2023/8/22



汇编 C 《Keil编程文档》
截图202309151421359639.jpg

Bootloader 启动引导代码用汇编 配套的汇编 C语言是跨平台的语言 操作系统移植
RET指令与ACALL和LCALL配合使用,CPU译码把下一条堆栈内指令地址恢复到程序计数器里
无条件跳转指令 AJMP addr11
EJMP LJMP JMP JC:进位标志CY控制的跳转指令
截图202309151441238602.jpg

"该指令执行的操作和机器指令格式"   268条指令的组合 汇编语言 逻辑严谨 CPU底层和C语言逻辑提升 在汇编的角度上看,C就是应用
截图202309151706031994.jpg 截图202309151706233296.jpg

截图202309151717162505.jpg 截图202309151717527649.jpg

学汇编语言是为了解单片机底层
关于累加器的跳转指令JZ JE:由Z标志位控制的跳转指令 JG:由Z和CY标志位控制的跳转指令
截图202309152012512619.jpg

=============================汇编语言程序设计========================================
A251汇编器
1、汇编语言的程序结构和段分配
2、符号和符号的名字
3、表达式和操作符
4、控制语句
5、条件汇编
6、宏定义和调用

所谓汇编语言程序就是按照一定的规则组合在一起的机器语言助记符汇编器助记符命令
汇编助记符表达的指令Instruction--》机器指令       汇编器命令direction-->Keil MDK

程序存储器中的(CODE)4个常数------搬移------》到数据存储器中(EDATA)

命令定位到代码区 0xFF0220上 截图202309160250448291.jpg     截图202309160302359331.jpg 截图202309160301287730.jpg
把0xFF0246赋给DPTR, code区域由代码,还有常量 截图202309160306235673.jpg 截图202309160314208318.jpg 截图202309160322302168.jpg

截图202309160325024971.jpg 截图202309160332496079.jpg list文件链接器 截图202309160334254007.jpg 截图202309160344018827.jpg


============================================================================================

汇编代码中段的分配
段SGEMENT是代码块或数据存储器,可重定位的或绝对的 ,为了链接器合并
数据段DATA可通过直接或间接方式寻址
BIT段 可位寻址区域和被8整除的地址。。。。。。。。。

注释     “;”开头

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 20:40:21

1

主题

75

回帖

345

积分

中级会员

积分
345
发表于 2023-9-17 08:53:46 | 显示全部楼层
《何老师 STC32位8051单片机原理及应用-STC32G12K128》2023/8/25


上节课例子:251指令集将FLASH里的四个字的常数转存到edata内(STC32G 4K / 89C52 526个字节)C语言代码怎么编译成汇编助记符指令的?解读!
把WATCH窗口打开:View--》Watch--》Watch1

截图202309161642541041.jpg 截图202309161644139910.jpg 截图202309161644295862.jpg

把DR8地址加一个偏移量的内容移动到寄存器里面区
截图202309161656235684.jpg 截图202309161708153518.jpg

循环搬移
截图202309161713253997.jpg 截图202309161725245896.jpg 截图202309161727284403.jpg

===========================================================================================
SEGMENT语句声明一个段   RSEG语句选择一个可重定位的段   DW语句使用一个或多个字值(2个字节)初始化存储器

符号和符号的名字: 代指程序地址   A251汇编器定义并保留MCS-251ISA寄存器的名字
表达式和操作数:
数字:  A251汇编器支持指定绝对地址的记数法页面 冒号表示法
字符:
字符串:
位置计数器:$
操作符:优先级
截图202309170824129179.jpg 截图202309170824284802.jpg 截图202309170824533494.jpg 截图202309170825096407.jpg

控制语句:   ALIGN  字节边界对齐          EVEN 强迫位置计数器指向下一个偶数地址     ORG 更改当前段的位置计数器    USING 地址控制 R0~R7复用 USING 3; 选择第3组寄存器       DB 存储器初始化        DBIT 保留存储空间     DS     DSB    DSW  保留多少字节    过程声明 PROC ENDP 声明子程序后面可以调用                LABEL 位置定义符号名字       EXTRN/EXTERN 源声明public,外文件调用   (绝对地址!  <-->   可重定位地址!)   PUBLIC    段控制 ,对存储单元更精准的控制:BSEG CSEG DSEG ISEG RSEG(声明通用段)  XSEG
截图202309170831149941.jpg 截图202309170849315344.jpg

符号定义:指定存储单元
BIT   CODE   DATA    sbit  EBIT EQU SET IDATA SFR SFR16 XDATA _ERROR_ END


=======================================^^^^^^^^^^^^^^汇编语言^^^^^^^^^^^^^^========================

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 20:40:21

1

主题

75

回帖

345

积分

中级会员

积分
345
发表于 2023-9-17 19:21:43 | 显示全部楼层
本帖最后由 大亮 于 2023-9-17 22:35 编辑

《何教授 STC32位8051单片机原理及应用-STC32G12K128》2023/8/29


今天主要内容:1、汇编语言剩下一些语法;2、两个设计应用:体现32位汇编的优势、中断的机制和应用

条件汇编:条件汇编控制,一个文件实现两种应用场景的要求:前缀为$,  没有$,提供重用性和可移植性
截图202309171229423570.jpg
AA SET 10
IF(AA=10)
    DSEG AT 0020H
ELSE
    DSEG AT 0030H
ENDIF

$IF(AA=10)
    DSEG AT 0020H
$ELSE
    DSEG AT 0030H
$ENDIF

宏的定义和调用
宏,一段汇编代码的集合 区别子程序 主要表现在:1、起什么作用,2、对汇编代码的效率       语法格式:定义和调用
==============================设计实例============================================
汇编的作用:对处理器内核,以及外设原理深入理解,提高认知过程,对思维的锻炼       C编译器完善了、在C下调试工具完善了

LED驱动和控制:(单片机,软件和硬件的综合体)

1、硬件设计原理:对复用管脚,提供晶体管电压控制电路思路:
截图202309171501461145.jpg


2、IO端口寄存器:设置P4 和P6  工作模式 寄存器设置  P0~P7  PxM0 PxM1配合使用 {PxM1 PxM0} 端口模式寄存器--》触发器 (控制寄存器       状态寄存器--锁存器)
截图202309171530398940.jpg 外设控制器
截图202309171534535213.jpg 截图202309171840304778.jpg 截图202309171841557421.jpg 截图202309171845088478.jpg




中断!
截图202309171846385047.jpg P3.2 INT0中断引脚   P3.3 INT1中断引脚    识别中断问题    中断进得来--》设置总总断使能、各中断、优先级




IT0    EQU  S:0x88.0
IT1    EQU  S:0x88.2
EX0    EQU  S:0xA8.0
EX1    EQU  S:0xA8.2
EA     EQU  S:0xA8.7 ; 特殊功能寄存器名称声明,地址被8整除,利用按位寻址,S: --》SFR    .  索引号


截图202309171857163013.jpg



my_prog  SEGMENT CODE           
             RSEG my_prog   
         LJMP main               
         ORG 0x0003                 
             LJMP int0
                 ORG 0x0013
                 LJMP int1声明可重定位代码段,  声明中断向量表,能 用到的部分,  (LJMP 中断向量入口 ,程序计数器加1存放中断服务程序地址高8位,再加1存中断服务程序地址低8位??)
         ORG 0x200;让开中断向量表位置



main:
     USING   0   
         SETB  IT0                        ;用SETB 设置具体的位  低电平触发   
         SETB  IT1                        ;低电平触发   
         SETB  EX0                       ;使能外部中断0
         SETB  EX1                       ;使能外部中断1
         SETB  EA                        ;打开总中断



MOV   P4M0,#0x00
     MOV   P4M1,#0x00
     MOV   P6M0,#0x00
     MOV   P6M1,#0x00        
           MOV   P4,#0x00
         MOV   A,#0xFE                           
     MOV   P6,A                              ;端口6和端口4的初始化



loop:        
     JMP   loop                          ;死循环     while(1)     等待中断进来      CPU在做无用功
   
int0:
     RL    A                               ;左移
         MOV   P6,A
     RETI
int1:                                        ;右移
     RR    A
         MOV   P6,A
     RETI         
        END


截图202309171910037345.jpg


截图202309171921147212.jpg

硬件在线仿真  进入中断   


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 20:40:21

1

主题

75

回帖

345

积分

中级会员

积分
345
发表于 2023-9-18 00:57:41 | 显示全部楼层
《何教授 STC32位8051单片机原理及应用-STC32G12K128》2023/9/1(上)



c


C251架构下的C语言扩展   C跨平台语言 针对平台的扩展和优化 为了适配嵌入式/不同平台的限制和规约 站在高级抽象的角度 预计两周课程 结合具体单片机平台/硬件载体、调试、代码趣味性
课程架构:
1、存储器区域(物理实体先讲清楚)
2、数据类型
3、类型限定符
4、存储类别
5、绝对位置变量
6、指针
7、函数
8、属性
9、预处理器
10、内嵌汇编程序
11、定制文件

存储区域:
物理分离存储区域            code edata xdata           效率问题,            C语言编译器识别用户程序期望的存储区域识别
STC32G系列单片机上的可用的各种存储空间与大多数大型计算机、小型计算机和微型计算机架构有很大不同,在这些架构中,程序、数据和常数都加载到计算机内同一物理存储空间,这是要注意的。
单片机、微机       运行机制不一样、      服务的对象不一样的,。
程序CODE存储器为只读、      位于单片机内部        64K程序存储器        程序代码、所有函数和库  常数变量        保存在程序存储器        标识符CODE       C 语言访问
unsigned char constant near / constant far code constant;
内部数据存储器
data 片上存储器前128字节         idata 片上存储器前256个字节         还有一个20H开始的16字节区域可用段8051兼容指令进行位寻址
unsigned char idata variable;
内部数据存储器三种不同类型数据 data          bdata         ebdata
data:内部数据存储器前128个字节 直接寻址访问 (正确使用存储器区域限定符,使C编译器指哪儿打哪儿!) unsigned char data fast_variable;
bdata": 内部存储器20h~2fH中16个字节可位寻址的存储器 128个位   unsigned char bdata bdata_var;
ebdata:   内部数据区20h~7fh  760位可寻址区域   unsigned int ebdata eb_var;


struct s  {
  unsigned int b0:3;
  unsigned int b1:2;
  unsigned int b2:1;
  unsigned int b3:1;
  unsigned int b4:1;
  unsigned int b5:1;
  unsigned int b6:1;
  unsigned int b7:4;    //通过位限定,形成一个紧凑型结构
};


structs ebdata  v;//定位  0x20
void main (void)  {
         v.b0=4;  //赋值
         v.b1=3;
         v.b7=15;
  if (v.b1)  {
    v.b0 = 7;
  }
}

截图202309172337188689.jpg

截图202309172344174498.jpg



int cal(int x)
{
        static int y=0;//静态变量,保留上一次结果
    y=x-y-i;
        return y;
}

截图202309172358184828.jpg 第一次调用

截图202309172359012252.jpg 第二次调用

截图202309172359385029.jpg 第三次调用    变量的生命周期和作用范围

截图202309180001545085.jpg


绝对位置变量 _at_ 关键字定位在绝对存储器的位置 type[memory_type] variable_name_at_const_expr;   一旦指定,链接器无法改变
绝对地址必须复合硬件定义
截图202309180007473649.jpg 截图202309180010004308.jpg 通过_at_关键字操作,将数据强行放在存储某位置

C251编译器支持使用 * 字符声明变量指针        C251可操作标准C左右操作
1、没有现实存储器类型的指针成为通用指针
2、具有现实存储器类型的指针成为存储器特定指针

截图202309180014236319.jpg 声明指针   指针大小/宽度  一个类型  

指向data或idata对象的指针可以使用near存储器类型声明
在TINY和XXTINY存储器模型memory mode中,默认指针大小位16位,指针的默认存储器类型位near*
使用far* or near * 指针,可以寻址near data  idata对象
截图202309180023329467.jpg t通过指针实现链表结构

C251编译器可以转换指针的存储器类型额
截图202309180027459395.jpg 指针宽度

截图202309180029552723.jpg 库函数访问时,可能涉及强制类型转换,转为通用指针, 关联存储器模式,扩展或截断,  指针的位宽决定寻址范围/能力


指针强制类型转换表,非常重要!!!

截图202309180038137783.jpg

Debug View--》Seiral windows-->UART 1#
截图202309180052345645.jpg


截图202309180053141816.jpg 截图202309180053374410.jpg 截图202309180057364385.jpg

截图202309180039297493.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 20:40:21

1

主题

75

回帖

345

积分

中级会员

积分
345
发表于 2023-9-18 09:12:04 | 显示全部楼层
本帖最后由 大亮 于 2023-9-19 18:11 编辑

《何教授 STC32位8051单片机原理及应用-STC32G12K128》2023/9/1(下)

<Intel 8xC251Sx User's Manual>

sfwei

截图202309191752235486.jpg
位操作

存储区域--外部数据存储器  00:0000H 片内      01:0000H 片外扩展

CPU控制外设两种方法: 1、访问存储器映射的IO,读写控制外设;2、访问SFR

存储器区域:
近存储器 (near) 00:0000~00:FFFF    前64K((理论空间,实际4K)   edata区域   16位寻址进行快速的访问   

远存储器(far)    16位 64K

存储器类型 关键字 指导编译器 实现程序员需求的内存区域分配

特殊功能寄存器 SFR  128字节共享存储空间   本身不是存储器,控制xxx , 可以使用MOV指令直接访问SFR存储器,不能使用间接寻址模式、。

数据类型
截图202309180719556174.jpg
截图202309180720357323.jpg

标准C的:void char(1个字节二进制数) int(1个二进制数) enum (定义一组离散的常数)  float  double  IEEE754
截图202309180732005650.jpg    
  
位寻址对象 位可寻址对象 可以作为字或者位寻址的对象
bdata 8051兼容位空间  16字节       ebdata 扩展的STC32G系列单片机的位空间 96字节
截图202309180846286372.jpg
放在可位寻址空间,可位寻址的,位操作    尖角符号/草帽符号

截图202309180848041014.jpg
数组第0元素的第7个位       不是赋值  是定义位置


extern bit mybit0;  提供外部变量声明

SFR区域  位于0X80~0XFF 可位、字节、字访问


截图202309191743577541.jpg
截图202309191751195252.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 20:40:21

1

主题

75

回帖

345

积分

中级会员

积分
345
发表于 2023-9-18 16:09:02 | 显示全部楼层
《何教授 STC32位8051单片机原理及应用-STC32G12K128》2023/9/5



“C语言没有那么难学,从计算机架构上讲32位MCU还是有很多扩展的,对将来学arm底层相通”
类型限定符: const 声明在运行时未修改的对象 (程序中不能被更改)       volatile 声明一个对象,该对象的值可能会被出现在其中的代码之外的某个对象修改
const unsigned short xdata a[10] = {}0,1,2,3,4,5,6,7,8,9}; 片内阔扩展数据区
const unsigned short code a[10] = {0,1,2,3,4,5,6,7,78,9}; 程序存储区
const的一个有趣的用法是定义一个不可更改的指针。。。。。。。

第二个类型限定符   volatile 易失性类型限定符用于限制编译器对对象值的假设    按需执行,都要执行,不要优化

XSmall --》edata

截图202309181135353455.jpg 第一句
截图202309181300433603.jpg 第三句 32位寄存器 大端模式

截图202309181304475870.jpg 寄存器与存储器直接加


截图202309181401296173.jpg 截图202309181407371877.jpg 没有volatile看不到i,直接寄存器操作


存储类别 存储类用于定义变量和函数生效范围和生存周期   auto   register      static   extern

截图202309181447593104.jpg 截图202309181449421430.jpg 乘法运算过程


static int y=0;  从当前运行结果 y

截图202309181529276839.jpg Y的生存周期从主函数开始到最后,持续更新,为什么上次结果会保存? 截图202309181531294296.jpg 从wr6里取出来,不是初始化的y值,静态变量的价值!

变量可以使用_at_关键字定位在绝对存储器的位置   (第二次讲了!!!!!)
截图202309181537072446.jpg 截图202309181553223649.jpg


指针:
通用指针 特定存储器指针(高效)
指针宽度!
截图202309181608599811.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 20:40:21

1

主题

75

回帖

345

积分

中级会员

积分
345
发表于 2023-9-19 10:23:06 | 显示全部楼层
《何教授 STC32位8051单片机原理及应用-STC32G12K128》2023/9/8



截图202309182019084461.jpg 优化级别为0,展示细节, 80251的存储器划分code,片内存储,片内扩展,对存储器操作较STM32更复杂,提供丰富的存储器类型限定符
截图202309182055541049.jpg 立即数给累加器,DPTR指向01:0X0000,A给到DPRT指向的地址;      WR6初始化为0 WR4初始化为1,拼出来DR4为0x0001 0000,a的地址,就是xdata的0000

截图202309182102178752.jpg 把DR4给到P地址。。指针,开辟一片存储区域

======================================================函数============================================================
C251编译器为标准C函数声明提供了很多扩展:  (体现MCU特点,与桌面系统不同点,底层机理完全不同)  声明成中断 声明成寄存器组 选择存储器模型     通过关键字体现  函数丰富过ANSI C
[return_type] functionname([args]) [{small | large}] [_attribute_((attrib_spec))] [reentrant] [interrupt n] [using y]

最根本的东西 :  CPU 存储器 IO  -->  stc251内核结构  -->  指令集 ---> 汇编语言  --->C 语言

C语言两大难点: 指针 & 函数

存储器模型
STC存储器映射 --> 统一编址   同样适合arm架构
small : 本地变量 放在片上RAM         Large:其他存储器模型        

寄存器组:
0x00 ~ 0x1f  被分成4组,每组8个   程序以R0 ~R7 的形式访问这些寄存器    存储器组由程序状态字PSW的两位选择   当处理中断或使用实时操作系统时(轮询的特性),直接切换不同的寄存器组   而不是保存堆栈上的所有8个寄存器    单片机可以在返回之前将之前的原始寄存器组直接地区换    非常有用

操作系统移植  启动引导代码

using 属性在中断函数中最有用  为不同的中断优先级指定不同的寄存器组   硬件中断   计数器、定时器、、检测外部事件、、使用串口发送接收数据等   C251支持32个中断  STC32 49个中断向量 使用保留中断  
interrupt和底层的关系:告诉C251编译器这是一个中断服务程序   把工作寄存器(ACC B DPH DPL PSW PSW1)堆栈   把堆栈恢复
可重入函数 reentrant 自己调用自己  共享   堆栈
函数的参数:如何传递参数???  与底层的关系!  底层规约
函数可以传递寄存器(寄存器的内容传递给函数   R11 R0~R7 9个参数进行参数传递)或/和固定存储器位置中(指针)的参数
截图202309191013425841.jpg 截图202309191020002007.jpg


回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-24 19:43 , Processed in 0.147402 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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