lclbf 发表于 2023-12-12 14:29:34

学习《STC8051单片机原理及应用-STC8H8K64U》| 建议送实验箱提高学习效率


以前学习了STC的单片机,上半年也跟冲哥学习了STC32的单片机。现在有点时间又来跟陈教授学STC8H8K64U单片机。

上班没有时间,只有下载视频晚上学习。学习过程发现有的视频有的部分没有声音,有的部分掐顿。可以是我下载的视频
出现问题,因为有的视频下载没有办法播放,又重新下载。


第一集:STC最新8051单片机原理及应用—STC8H8K64U单片机发展历程。
心得:了解单片机的发展历史,STC8系列单片机的资源特点,学习单片机需要的条件。
课程特点:理论与实践结合,软件和硬件结合,线上学习和线下实践结合。
STC8系列单片机的资源特点:
1.超高速8051内核(1T),指令代码完全兼容传统8051单片机。2.集成64KB Flash程序存储器、256B内部RAM、8192B内部扩展RAM、1280B数据RAM用于USB。3.5个16位可自动重装载的定时/计数器(T0~T4)、可编程时钟输出功能。4.至多60根I/O口线。5.4个全双工异步串行口(UART)、1个高速同步通信端口(SPI)、1个12C接口、1个USB接口。6.15通道12位高速ADC。7.8路高级PWM。8.DMA、实时时钟RTC、液晶模块接口、专用复位电路和硬件看门狗、高精度R/C时钟等资源。

学习条件:
常用元件:电阻、电容、二极管、三极管、晶体振荡器、数码管、面包板、万能板+套件、试验箱
试验箱的功能介绍。
开发仿真软件、STC程序下载工具



第二集: 点灯大师启航,看到效果再理论下载的视频不能播放,重新下载。看视频后补充内容,先占位。
心得:了解Keil软件开发单片机的流程,学习了计算机的基本知识。重新下载视频看后笔记:1、入门实例   让灯闪烁   利用KEIL软件开发程序步骤:   创建项目   新建源文件,加入项目中   编译项目程序文件,生成HEX文件利用STC的ISP工具下载程序到单片机运行验证程序项目实战:LED闪烁 2、有关基础概念计算机中的数制数制的概念十进制   D二进制      B十六进制H
需要不同进制的原因
不同数制之间的转换方法   十进制转二进制:
    整数部分:除二取余法
    小数部分:乘二取整法

有关基础概念
常用单位:位(bit)字节(Byte)数量单位:1K=10241M = 1024K1G = 1024M1T = 1024G 计算机系统:计算机软件:操作系统、应用软件计算机的微观构成 有关概念微处理器、微型计算机和微型计算机系统微型计算机的基本结构总线:地址总线、数据总线、控制总线访问:写入、读出 单片微型计算机简称单片机(MCU)单片机厂商和单片机介绍单片机应用系统


第三集 :数字逻辑与基本数字电路
心得:学习了数字电路的基本知识,了解单片机的应用场景,如何用Keil软件实现仿真。
1、数字逻辑和基本的数字电路逻辑电平(高电平和低电平)上升沿和下降沿逻辑运算逻辑变量0和1,与(ANDY=A.B 有0出0,全出1) 或(ORY=A+B 有1出1,全0出0 )   非(NOTY = ā有1出0,有0出1,即取反)异或(XOR   Y=A⊕B,输入相同输出为0,输入不同输出为1)

2、单片机的应用场景
单片机的特点:集成度高、体积小,北京工业大学TP801功耗低,可靠性高,看门狗的介绍价格低廉,应用范围:仪器仪表,电表工业农业实时监控,计算机网络和通信领域,家用电器,医用设备领域,汽车设备领域,其他设备,办公设备、商业活动、机械制造、国防航天航空
仿真介绍:在线仿真步骤:    Keil仿真设置
      单片机型号
      使用USB口进行仿真
      将所选目标单片机设置为仿真芯片
    Target => Xtal 11.0592MHz
    Debug => Use STC Monitor-51 Driver
                  Run to main()
    Setting => USB


第四集: 单片机的内部结构,STC补充外围电路设计讲解
心得:熟悉单片机的结构和STC的外围电路。
1、微型计算机的框架结构2、传统8051单片机的内部结构3、STC8H8K64U单片机的内部介绍CPU结构-1由运算器和控制器组成。
运算器:以8位算术/逻辑运算部件ALU为核心,加上通过内部总线而挂在周围的               暂存器TMP1、TMP2、累加器ACC、寄存器B、程序状态标志寄存器PSW 以及               布尔处理器组成了整个运算器的逻辑思    路。运算器中包含程序状态寄存器PSW。控制器:CPU的大脑中枢,包括定时控制逻辑,指令寄存器、译码器、地址指针DRTR               及程序计数器PC、堆栈指针SP、RAM地址寄存器、16位地址缓存器等。CPU结构-2      程序状态寄存器CPU结构-3       控制器       存储器空间及存储器
计算机结构:
   https://www.stcaimcu.com/data/attachment/forum/202307/30/175703y65vrr9vv9rxxoo6.png

单片机内部结构:
       https://www.stcaimcu.com/data/attachment/forum/202307/30/175704tqyddzu3i1dn13yi.png
   https://www.stcaimcu.com/data/attachment/forum/202307/30/175704a4zzxwi58ov8elr4.png

一些词汇:
    TMP1、TMP2:暂存器
    ACC:累加器
    B寄存器:用于乘法运算
    PSW:程序状态寄存器
    PC:程序计数器,指向程序存储器
    WDT:看门狗
    LVD:低电压监测
    MDU16:16位硬件乘法器
    LCM:液晶接口
    DPTR:地址指针
    SP:堆栈指针
    SFR:特殊功能寄存器

IO接口:通道(锁存器、驱动器)
中断、串行口、定时/计数器 => P3口
SPI(SS、MOSI、MISO、SCLK)

程序存储器:
    地址范围:0000H~FFFFH
    复位后起始地址:0000H

数据存储器:
    内部数据存储区(内部RAM,00H~FFH,256B)、扩展数据存储区

内部RAM:
1、低128字节:00H~7FH
    基本RAM区(工作寄存器区、位寻址区、用户RAM、堆栈区),可直接寻址和间接寻址,指令:MOV或MOV @Ri
2、高128字节:80H~FFH
    只能间接寻址:MOV @Ri
3、特殊功能寄存器 SFR区:80H~FFH
    只能直接寻址:MOV

程序状态寄存器:

    https://www.stcaimcu.com/data/attachment/forum/202307/30/175901qj3di2evtqbtgiiw.png

内部RAM地址分布:

   https://www.stcaimcu.com/data/attachment/forum/202307/30/180010coqhxo4k3ldlfbd6.png



整个存储器地址分布:

   https://www.stcaimcu.com/data/attachment/forum/202307/30/180107exub2qxuqfnxxugc.png


lclbf 发表于 2023-12-13 08:12:35

本帖最后由 lclbf 于 2023-12-14 18:00 编辑

第五集:存储器空间及存储器,单片机的引脚

心得:单片机的结构和引脚的深入了解。

存储器空间及存储器
数据存储器
特殊功能寄存器:传统特殊功能寄存器(SFR)、扩展特殊功能寄存器(XFR)


特殊功能寄存器:
    传统特殊功能寄存器(SFR):
      80H~FFH,直接寻址
    扩展特殊功能寄存器(XFR):
      扩展RAM(XDATA)区,P_SW2(BAH)最高位EAXFR置1,
      MOVX A, @DPTR或MOVX @DPTR, A

扩展数据存储区 -> XRAM
    STC8H8K64U 64K地址空间,内部集成了8192B(0000H~1FFFH)
    汇编语言:
      MOVX @DPTR
      MOVX @Ri
    C语言:
      xdata声明
      例如:unsigned char xdata i = 0;
      或者:keil设置:Target -> MemoryModer = Large

单片机的引脚
1、输入输出接口
2、PDIP40
3、最小系统
4、逻辑符号
姚总介绍了为啥没有P1.2脚
5、引脚介绍
电源引脚
   Vcc/AVcc
   Gnd/AGnd
外接晶振引脚
   XTAL1、XTAL0
控制和复位引脚
    NRST(P5.4)
    ALE(P4.5
输入输出引脚
STC8H8K64U有60个IO脚
      a、开关量的输入输出
      b、复用功能

I/O的作用:进行开关量(高低电平)的输入输出,用在复用功能(总线接口、串行通信接口)
I/O的工作模式:准双向口,推挽输出,高阻输入,开漏模式。由PnM1和PnM0来配置,可以利用STC的ISP软件中的I/O口配置工具来快速配置。
注意:
P3.0 P3.1上电后位弱上拉/准双向口模式。
其余口上电后状态均为高阻输入,用户使用I/O前必须先设置I/O口模式。
上电如果不使用USB进行ISP下载,P3.0,P3.1,P3.2不能同时为低电平,否则会进入USB下载模式而无法运行用户代码。

第六集 :IO口的工作模式,STC8H8K64U的汇编语言程序设计,初步入门


心得:I/O口的用法和汇编语言指令的深入了解以及汇编语言的仿真方法。
I/O口的复用功能:也就是功能引脚切换

I/O口的使用:
上拉电阻:5.1K、10K
   拉电流和灌电流
   典型的三极管控制电路:
      达林顿管驱动器ULN2803
       场效应管
   I/O口外部状态输入:
      软件设置后加延时、然后再读取状态



单片机应用系统的典型构成
非总线扩展方式的单片机应用系统构成:
总线扩展方式的单片机应用系统构成:


总线扩展方式:
    8位数据总线:P0
    16位地址总线:P2、P0
    写控制(/WR):P4.2
    读控制(/RD):P4.4
    锁存控制(ALE):P4.5

注:P2口没有用到的口线,不能再用做其他功能。


汇编语言:
有助于原理理解。
在嵌入式操作系统的移植过程中,还会用到少许的汇编语言。
姚总介绍汇编语言的重要性。

1、汇编语言程序设计基础知识
伪指令:
设置起始地址(ORG),
       ORG    addr16


定义字节(DB,定义8位),
      <标号:>    DB    <项或项表,多个逗号分隔>
      注:项若为数值(00H~FFH),若为字符串(最多80个字符)


定义字(DW,定义16位),
       <标号:>    DW    <项或项表,多个逗号分隔>
      注:项存放16位数据,低位字节在前,高位在后;常用于建立地址表
      DB、DW一般放在源程序末尾定义



为标号赋值(EQU),
      <标号>    EQU    数值或表达式

DATA指令,
   符号名    DATA    表达式
       注:将内部RAM的地址赋值给指定的符号名,表达式(00H~FFH)


XDATA指令,
       符号名    XDATA    表达式
      注:表达式(0000H~FFFFH)


定义位命令BIT,
    符号名    BIT    位地址


文件包含(INCLUDE),
   $INCLUDE (文件名)
      例:$INCLUDE (STC8H.INC)
      备注:
            可以直接引用stc8h.h,但是需要增加$NOMOD51指令
            $NOMOD51
            $INCLUDE (stc8h.h)


源程序结束(END),


补充:汇编语言中,可以使用C语言的注释方法。

2、汇编语言程序仿真过程
新建工程项目
新建源文件main.asm
点灯程序编写





lclbf 发表于 2023-12-14 09:24:30

本帖最后由 lclbf 于 2023-12-14 18:01 编辑

lclbf 发表于 2023-12-13 08:12
第五集:存储器空间及存储器,单片机的引脚



第七集: STC8H8K64U的汇编语言程序设计进阶,宏汇编

心得: 汇编指令能够与之前讲的单片机内部结构结合起来,理解起来更容易了

1、助记符语言描述
机器语言是用二进制数表示的指令,是CPU唯一能够直接识别和执行的程序形式。
机器语言的缺点是不直观,不易识别、理解和记忆,因此编写、调试程序时都不采用这种形式的语言,引入了助记符。

    MOV 是数据的传送
    ADD 是数据的相加运算
    ANL 是数据的逻辑与运算

    #8BH,前面带井号,说明是立即数

2、操作码

    (1)数据传送类
            MOV、MOVX、MOVC
            必须指明操作对象从哪来,到哪去。(源地址、目的地址)


    (2)数据操作类
            ADD、SUBB、MUL、DIV
            一般靠运算器完成,一般需要两个操作对象


    (3)程序控制类
            AJMP(SJMP、LJMP)
            JZ、JC、JB(JNZ、JNC、JNB)
            ACALL(LCALL)
            RET

            CJNE

            操作对象是程序计数器PC和一个数


    (4)逻辑操作类
            ANL、ORL、XRL


3、操作数

    可以是数据,也可以是地址

注意:
    a、数据只能是整数,不能是小数;
    b、数据是十六进制且是以字母开头时,该数据应该加一个前导0;
    c、数据前有前缀#,则表示数据是立即数,如果没有前缀#,则数据为直接地址


指令格式及分类

    [标号: ] 操作码助记符 [第一操作数][, 第二操作数][, 第三操作数] [; 注释]

    标号,也用过子程序的名字。
    操作数,可能有0~3个操作数。

    指令的存储格式:
      指令长度:单字节、双字节、三字节


    指令中的符号约定:
      A:累加器ACC
      B:寄存器B
      C:进位借位标志
      addr8:8位内部RAM地址

      bit:位地址,内部RAM中的可寻址位和SFR中的可寻址位
      #data8:8位立即数

      #data16:16位立即数

      @:间接寻址

      rel:8位带符号偏移量

      Rn:当前工作区(0~3区)的工作寄存器,(n=0,1,...,7)

      Ri:可用作地址寄存器的工作寄存器R0和R1

      (X):X寄存器的内容

      ((X)):由X寄存器寻址的存储器单元内容,即X中存放的值作为地址,相当于指针的功能

      ->:数据传送方向

      /:按位取反


寻址方式(7种)

    A、立即寻址
      指令中的源操作数是立即数。

    B、寄存器寻址
      指定寄存器的内容为操作数,对寄存器ACC、B、DPTR和CY寻址时,具体的寄存器已隐含在其操作码中。
      而对选定的8个工作寄存器R7~R0,则用指令操作码的低3位指明所用的寄存器。

    C、直接寻址
      指令中包含了操作数的地址。
      a、特殊功能寄存器SFR;
      b、内部数据RAM中的00H~7FH(128个字节单元);
      c、位寻址空间。

    D、寄存器间接寻址
      指定某一个寄存器的内容作为操作数地址,使用时,前面加“@”表示间接寻址。

    E、变址寻址
      由偏移量寄存器和基址寄存器DPTR或PC相加所得结果作为操作数地址。
      例:MOVEC A, @A + PC

    F、相对寻址
      主要用于相对跳转指令。
      注:该偏移量有正负号,所转移的范围为相对于当前PC值的 -128~+127 之间。

    G、位寻址
      对位地址空间的每一位进行运算和传送。

备注:
    00H~1FH:工作寄存器区(32个单元,分为4组,每组R0~R7)
    20H~2FH:可位寻址区(00H~FFH,256个位)


   操作数是一条指令操作的对象。操作数可以是数据,也可以是地址。不同功能的指令,操作对象形式不同。
   不同指令的操作数特点如下:
   1. 传送类指令,必须指明操作对象从哪丿L来(源地址),传到何处去(目的地址)。
   2. 数据操作类指令,一般靠运算器完成,数据操作类指令的对象一般是两个。
   3. 程序控制类指令的操作对象是程序计数器pc和一个数。
   4. 逻辑操作类有单操作数和双操作数之分。
注意事项:
1. 数据只能是整数,不能是小数。
2. 当汇编指令中的数据是十六进制且是以字母开头时,该数据应加个前导0,以表示后面的字母不是变量而是数字。
3. 在8051内核单片机中,一个数据的前面有前缀#号则表示后面的数据是立即数,如果数据的前面没有#号,则说明该数据表示的是直接地址

第八集 :汇编指令一 数据传送 逻辑运算 算术运算

学习心得:陈教授对汇编语言指令讲得详细,并且举例仿真验证。对汇编语言有重新认识。

数据传送指令简介


对程序状态字PSW一般不产生影响
    分为三种:
      数据传送
      数据交换
      栈操作

传送指令:MOV
    主要是内部数据存储器和特殊功能寄存器
    MOV <目的字节>, <源字节>

    MOV    A, #data8            ; (A) <- #data8
    MOV    addr8, #data8      ; (addr8) <- #data8
    MOV    @Ri, #data8         ; ((Ri)) <- #data8

    MOV    Rn, #data8         ; (Rn) <- #data8

    @符号表示间接寻址,Ri中 i=0或 i=1

外部数据传送指令:MOVX
   外部数据存储器(或扩展并行I/O口)与累加器A传送MOVX
    只能使用寄存器间接寻址,有两种方式:
    1、用R1或R0进行寄存器间接寻址
      需要使用P2口输出高8位地址,先给P2和Ri赋值,然后执行MOVX
      MOVX    A, @Ri      ;(A) <- ( (P2 Ri) )
      MOVX    @Ri, A      ;( (P2 Ri) ) <- (A)
    2、用16位的数据存储器地址指针DPTR进行寄存器间接寻址
      能遍历64KB的外部存储器的任何单元
      MOVX    A, @DPTR
      MOVX    @DPTR, A

程序存储器向累加器传送指令:MOVC
      程序存储器向累加器A传送指令MOVC
      MOVC    A, @A + PC            ;PC <- (PC) + 1, (A) <- ( (A) + (PC) )
      MOVC    A, @A + DPTR      ;(A) <- ( (A) + (DPTR) )
      (变址寻址,PC或DPTR作为基址寄存器)
   
数据交换指令
   1、字节交换指令
         XCH    A, addr8      ;(A) <--> (addr8)
         XCH    A, @Ri          ;(A) <--> ( (Ri) )

         XCH    A, Rn            ;(A) <--> (Rn)


    2、半字节交换指令(低半字节交换)
         XCHD    A, @Ri      ;(A低三位字节) <--> ( (Ri)低三位字节 )

字节交换指令:XCH
         字节交换指令
         XCH    A, addr8      ;(A) <--> (addr8)
         XCH    A, @Ri          ;(A) <--> ( (Ri) )

         XCH    A, Rn            ;(A) <--> (Rn)

半字节交换指令:XCHD
      半字节交换指令(低半字节交换)
      XCHD    A, @Ri      ;(A低三位字节) <--> ( (Ri)低三位字节 )

堆栈操作指令:
      概念:断点地址、压栈(保护现场PUSH)、出栈(恢复现场POP)
      PUSH    addr8      ;(SP) <- (SP) + 1, ( (SP) ) <- (addr8)
      POP      addr8      ;(addr8) <- ( (SP) ), (SP) <- (SP) - 1
   

传送指令注意事项:
    1、向累加器传送数据时,会影响PSW中的P标志
    2、执行传送指令时,源地址中的内容不变
    3、特殊功能寄存器SFR只能使用直接寻址
   4、80H~FFH单元只能使用@Ri间接寻址方式
   5、累加器A压栈和出栈时,应使用 PUSH ACC 或者 POP ACC。(* 使用A表示寄存器寻址,使用ACC表示直接寻址)

双操作数的逻辑指令:

算数运算指令:



第九集: 汇编指令二(位操作 控制转移)

心得:汇编语言操作指令的学习。

位操作指令以位为处理对象,分别完成位传送、位状态控制、位逻辑操作、位条件转移等功能。

位操作指令:
MOV SP #80H,
姚总对为啥用80H做出了原因说明。

位传送,位状态控制、位逻辑操作、位条件转移等17条。
    (1)、直接使用位地址。
    (2)、写成“字节地址.位号”,例如:0B8H.0
    (3)、位寄存器的定义名称,例如C、EA等
    (4)、对于位寻址寄存器,可以用“字节寄存器名.位号”,例如P1.0、PSW.4
    (5)、伪指令事先定义的符号地址,EQU

1、位数据传送指令
    MOV    C, bit      ;(C) <- (bit)
    MOV    bit, C      ;(bit) <- (C)
    注:其中一个操作数必须为累加器(进位标志CY)

2、位状态控制指令

    位状态控制指令包括位的清零、取反和置位

    位清零指令
    CLR    bit      ;(bit) <- 0
    CLR    C          ;(C) <- 0

    位求反指令
    CPL    bit      ;(bit) <- (/bit)
    CPL    C          ;(C) <- (/C)

    位置位指令
    SETB    bit      ;(bit) <- 1
    SETB    C          ;(C) <- 1


3、位逻辑操作

    位逻辑与
    ANL    C, bit
    ANL    C, /bit

    位逻辑或
    ORL    C, bit
    ORL    C, /bit


4、位条件转移

   一般在rel的位置写入欲跳转到的标号地址,偏移量由汇编程序自动进行计算。这样做有两个好处,一是程序的可读性好,二是不必进行偏移量的计算。

    判断进位标志C
    JC    rel      ;若(CY) == 1, 则(PC) <- (PC) + rel
    JNCrel      ;若(CY) == 0, 则(PC) <- (PC) + rel

    判断直接寻址位
    JB    bit, rel
    JNBbit, rel
    JBCbit, rel      ;若(bit) == 1, 则(PC) <- (PC) + rel, (bit) <- 0

5、控制转移类指令


6、程序转移指令,子程序调用和返回指令

    程序转移指令
    LJMP    addr16
    AJMP    addr11
    SJMP    rel
    JMP      @A + DPTR

    JZ      rel
    JNZ    rel
    CJNZ
    DJNZ

    子程序调用
    LCALL    addr16
    ACALL    addr11
    RET                         ;子程序返回

    其他
    RETI      ;中断返回
    NOP         ;空操作


lclbf 发表于 2023-12-15 08:05:22

本帖最后由 lclbf 于 2023-12-15 08:44 编辑

lclbf 发表于 2023-12-14 09:24
第七集: STC8H8K64U的汇编语言程序设计进阶,宏汇编

心得: 汇编指令能够与之前讲的单片机内部结构结合 ...

第十集 :汇编语言程序设计的一般步骤和基本框架

心得:详细,结合仿真讲解。对于初学的我来说,听一次不不懂,要多几次学习才 能理解。
汇编语言程序设计的一般步骤和基本框架

1、汇编语言程序设计的一般步骤
    A、分析课题,确定算法或解题思路
    B、根据算法或思路画出流程图
    C、根据算法要求分配资源,包含内部RAM、定时器、中断等
    D、根据流程图编写程序
    E、上机调试源程序,进而确定源程序软件模拟和在线调试(硬件仿真调试)
       对于复杂的程序可以按照功能分为不同的模块,按模块功能确定结构编写程序时采用模块化的程序设计方法。

2、汇编语言的程序框架
   
[*]$NOMOD51
[*]$INCLUDE (STC8H.H)
[*];...这里可以编写程序中用到的一些符号定义(使用EQU、DATA、BIT等伪指令)
[*]             ORG   0000H
[*]START:    LJMP    MAIN            ;跳转到主程序
[*]             ORG   0003H
[*]             LJMP    INT0_ISR      ;外部中断0入口(ISR Interrupt Service Rowtine 中断服务程序)
[*]             ORG   000BH
[*]             LMP   T0_ISR          ;定时器0中断入口
[*]
[*]             ORG   0013H
[*]             LJMP    INT1_ISR      ;外部中断1入口
[*]             ORG   001BH
[*]             LMP   T1_ISR          ;定时器1中断入口</div>
[*]
[*]             ORG   0023H
[*]             LJMP    UART1_ISR    ;串口1中断入口</div>
[*]             ......
[*]             ORG   0200H
[*]MAIN:   MOV   SP, #80H      ;设置堆栈指针(可根据情况修改)
[*]             ...... ;初始化内存区域内容
[*]             ...... ;设置有关特殊功能寄存器(SFR)的控制字
[*]             ...... ;根据需要开放相应的中断控制
[*]MAINLOOP:
[*]             ;主程序循环
[*]             LJMP    MAINLOOP
[*]INT0_ISR:                      ;外部中断0服务子程序
[*]             ......               ;根据需要填入适当的内容
[*]             RETI
[*]
[*]             ......               ;编写其他子程序或者定义程序中所用的常数
[*]
[*]             END

   注意:姚总建议 没有用到的中断服务程序,使用复位程序,提高可靠性

程序流程图:根据实现功能编写流程图,规划逻辑
    程序流程图可以简洁清晰地将程序分支走向标示清楚,说明流程图的重要性。

流程图的结构:
循环程序的设计

2、典型汇编语言程序设计举例:
分支程序设计
查表程序设计
循环程序设计
定点数运算子程序设计
数据排序程序设计
代码转换程序设计


第十一集: 单片机C语言程序设计导入一

心得:对C语言的基础知识讲解比较详细

单片机的C语言和传统的C语言有区别
1、C51对ANSI C的扩展
   ANSI C是标准的C语言

C51扩展的关键字 19个
_at_ sbit sfr bit sfr16 idata bdata xdata pdata data code clien small compact large using reentrant interrupt _task
变量或数据类型


A、bit型变量
    可用于变量类型和函数声明、函数返回值等,存储于内部RAM的20H~2FH单元中。
    注意:位不能声明为指针
             不能有bit数组

B、可位寻址区声明
    使用sbit声明可独立访问可位寻址对象的位。
    sbit声明要求基址对象的存储器类型为“bdata”。
    位的位置(^操作符号后的数字)的最大值依赖于制定的基类型。
    可位寻址对象的声明只能放到main函数的外部作为全局变量使用。

    例如:
    int bdata bittest _at_ 0x20;
    sbit bit0 = bittest^0;
    sbit bit15 = bittest^15;

C、特殊功能寄存器(SFR)
    sfr:字节寻址
    语法:
    sfr sfr_name = int_constant;
    例如:
    sfr P0=0x80;

    sfr16:字寻址
    sfr16 DPTR = 0x82;      // 指定DPTR的地址DPL=0x82,DPH=0x83

    sbit:位寻址
    sbit bitname = sfr_name^bit_number;


内存区域指定
程序存储器
code关键字表示将变量保存到程序存储区。可以使用code定义表格常数,节省内部RAM使用

内部RAM
data:直接寻址区,内部RAM的低128字节,地址范围为00H~7FH。在声明变量时,默认都保存在该区域
idata:间接寻址区,包括整个内部RAM区256字节,地址范围为00H~0FFH
bdata:可位寻址区,地址范围为20H~2FH


外部数据存储器
外部RAM视使用情况可由以下关键字标识:
xdata:可指定多达64KB的外部直接寻址区,地址范围0000H~0FFFFH,在程序中,需要声明较人的数组时,可以使用xdata关键字将变量数组保存到扩展RAM中。例如:
unsigned char xdat aarr;
pdata:能访问1页(256B)的外部RAM(很少用)。姚总建议不用

Keil C51指针

    以下声明pt为指向外部RAM中unsigned char数据的指针
    unsigned char xdata * pt;               // pt本身依存储模式存放
    unsigned char xdata * data pt;      // pt被保存在内部RAM中
    unsigned char xdata * xdata pt;      // pt被保存在外部RAM中

    基于存储器的指针
    char data * str;      // str指向data区中的char型数据
    int xdata * pow;       // pow指向外部RAM的int型整数

注:volatile 关键字,告诉编译器不要进行编译优化,一般用于声明特殊功能寄存器。


C51 对函数的扩展
A.中断函数声明
   中断函数通过使用interrupt关键字和中断号来声明。中断号高速编译器中断服务程序的入口地址。
   串行口1的中断函数声明如下
   void UART1_ISR (void) interrupt 4
   {/*代码*/}
   其中 interrupt 4说明中断号为4.中断函数具体执行哪个中断,与中断号有关,与函数名无关


B.指定工作寄存器区
   当需要指定函数中使用的工作寄存器区时,使用关键字 using 后跟0~3的数,对应着工作寄存器0~3区
   unsigned char GetKey(void) using 1 {/*代码*/}


C.指定存储模式
   用户可以使用 small、compact及large说明存储模式
   void disp_data(void) small {/*代码*/}
   small说明函数内部变量全部使用内部RAM。提高运行速度

2、单片机C语言程序中的常用运算
   关系运算符
大于   >
   大于等于 >=
   小于   <
   小于等于 <=
   等于   ==
   不等于!=
逻辑运算符
与 &&
或 ||
非 !
位运算
位与 &
位或 |
取反 ~
左移 <<
右移 >>

3、STC8H8K64U单片机C51程序框架
   





第十二集 :单片机C语言程序设计导入二

心得:通过两个程序更详细地介绍了C语言的应用,强调规范,进一步介绍了仿真,说明仿真的重要性。
多用while,少用do while。
延时函数中用data的原因,姚总和陈教授说明了使用的原因。

头文件的介绍。

仿真方法

LED灯闪烁的不同写法:
A:
   P60 = 1;
    Delay500ms();
    P60 = 0;
    Delay500ms();


B:
    for(i,i<8,i++)
   {
      P6 = ~LEDdata;
   LEDdata <<1;
   if(LEDdata == 0)
   LEDdata = 0x01;
   Delay500ms();
   }



IAP是使用和介绍

手把手结合仿真方法介绍两个程序程序:

A、流水灯
B、读写EEPROM



lclbf 发表于 2023-12-16 07:58:23

本帖最后由 lclbf 于 2023-12-18 08:26 编辑

lclbf 发表于 2023-12-15 08:05
第十集 :汇编语言程序设计的一般步骤和基本框架

心得:详细,结合仿真讲解。对于初学的我来说,听一次 ...
第十三集: 中断原理及工作机制一

心得:陈教授用生活中的例子说明中断的工作原理,简单易懂。

1、中断的相关概念
    中断源
    中断响应
    中断服务
    中断返回
    中断优先级
    优先级别,中断嵌套

中断的优势:
    A、解决快速CPU和速度外设之间的矛盾
    B、及时处理控制系统中许多随机参数和信息
    C、具备处理故障的能力,提高机器自身的可靠性
开中断和关中断
保护现场和恢复现场
堆栈:后进先出
中断的撤出

2、STC8H8K64U单片机的中断源

STC8H8K64U比传统8051单片机多了三个定时器中断,且中断最高支持1T24位自动重载,可实现1秒的精确中断间隔

有44中断源:
    5个外部中断
    5个定时/计数器溢出中断
    4个异步串口中断
    1个串行外设接口中断
    1个I2C中断
    1个USB中断
    1个模数转换中断
    1个低压检测中断
    2个PWM中断
    8个端口中断
    12个DMA中断
    1个RTC中断
    1个LCM中断

中断源有4个优先级

中断查询次序(中断号)

中断标志位

姚总补充学习方法。

第十四集 :中断原理及工作机制二


中断流程:
    总中断EA打开 ——> 需要用的外设中断打开 ——>如有需要就设置中断优先级 ——> 中断处理函数(相应中断标志位 如需清零操作),尽量简短,不要用延时函数

中断标志位单片机中断的处理过程:   1、中断源有请求   2、中断允许寄存器IE相应位置1   3、CPU中断开放(EA = 1) 单片机对中断优先级的处理原则:   1、不同级的中断源同时申请中断时,先高后低。   2、处理低级中断又收到高级中断请求时,停低转高。   3、处理高级中断却收到低级中断请求时,高不理睬低。   4、同一级的中断源同时申请中断时事先确定。下面情况中断不会响应:   1、中断允许总控制位EA=0或者发出中断请求的中断所对应的中断允许控制位为0.   2、CPU正在执行一个同级或者高一级的中断服务程序。   3、当前执行的机器周期不是指令周期的最后一个机器周期。   4、正在执行的指令是中断返回指令RETI或者是访问专用寄存器IE或者IP的指令,CPU至少要再执行一条指令才能响应中断请求。中断服务程序包含四部分:保护现场、中断服务、恢复现场、中断返回中断请求的撤出 中断开发举例:

第十五集 :定时器原理及STC拓展

心得:通过手册对定时器的原理做了详细的讲解,姚总也做了补充说明

STC8H8K64U单片机的定时/计数器结构
   定时/计数器的应用
   在自动控制系统或者自动检测系统中。

1、定时器/计数器的作用:
    A、定时控制
    B、用作分频器和用于事件记录
    C、可编程时钟输出功能,用于给外部器件提供时钟
    D、可用作串口的波特率发生器

2.定时/计数器的一般结构

STC8H8K64U单片机的定时/计数器相关寄存器
    1、单片机CPU和定时器相关寄存器
    2、定时/计数器的工作模式
T2的工作模式固定为16位自动重装模式
    16位模式时:
    T0 工作在 1T 模式(AUXR.7/T0x12=1)时的输出时钟频率 = (SYSclk)/(TM0PS+1)/(65536-)/2
    T0 工作在 12T 模式(AUXR.7/T0x12=0)时的输出时钟频率 = (SYSclk)/(TM0PS+1)/12/(65536-)/2
    8位模式时:
   T0 工作在 1T 模式(AUXR.7/T0x12=1)时的输出时钟频率 = (SYSclk)/(TM0PS+1)/(256-TH0)/2
   T0 工作在 12T 模式(AUXR.7/T0x12=0)时的输出时钟频率 = (SYSclk)/(TM0PS+1)/12/(256-TH0)/2






神农鼎 发表于 2023-12-16 19:18:08

建议送实验箱提高学习效率

lclbf 发表于 2023-12-18 08:27:33

本帖最后由 lclbf 于 2023-12-18 08:29 编辑

lclbf 发表于 2023-12-16 07:58
第十三集: 中断原理及工作机制一

心得:陈教授用生活中的例子说明中断的工作原理,简单易懂。

第十六集 :定时器原理及STC拓展二

定时/计数器量程的扩展
    1、定时器的最大能力
    2、定时器定时量程的扩展
       A、软件的扩展方法
      B、硬件的扩展方法

姚总建议可以多个定时器串联来延长定时时间,也可以用单片机的RTC来长定时
定时/计数器应用举例
编程要点:
   1、能正确初始化包含写入控制字和进行时间常数的计算并装入。
   2、中断服务程序的编写

第十七集: 串行口原理一

串行通信的相关概念

注意通信和通讯的区别:

基本的数据通信方式有两种:
   A、并行通信
   B、串行通信

串行通信的分类
   1、按照通信格式的同步方式分:异步和同步。
   2、按照数据的传送方向分:单工方式,双工方式,半双工方式
通用异步接收器/发送器UART
   1、串行接口
   2、通用异步接收器/发送器UART的结构
   3、通用异步接收器/发送器UART的出错标志
   4、通用异步接收器/发送器UART的同步过程

lclbf 发表于 2023-12-19 08:23:24

本帖最后由 lclbf 于 2023-12-19 08:25 编辑

lclbf 发表于 2023-12-18 08:27
第十六集 :定时器原理及STC拓展二

定时/计数器量程的扩展

第十八集: 串行口原理二

STC8H8K64U单片机的串口简介


4个全双工串行通信接口

STC8H8K64U的UART接口的寄存器

   1、串口控制寄存器SCON
      实现多机通信的过程
   2.串口2控制寄存器S2CON
   3.串口3控制寄存器S3CON
   4.串口4控制寄存器S4CON
   5、掉电控制寄存器PCON
   6、辅助寄存器AUXR
   7、从机地址控制寄存器
   8、数据缓冲器

STC8H8K64U单片机的串口工作模式



第十九集: 串口通信,多机通信

1、波特率的设定

工作模式

编程注意:当定时器作为波特率发送器使用时,应禁止定时器产生中断。典型用法是将定时器设置为工作在自动重装入时间常数的定时方式。设置完成后,启动定时器。

2、UART的应用举例

通信方式:查询方式、中断方式、DMA方式

编程要点:
   1、设置串口工作模式。
   2、 设置正确的波特率。
   3、设置串口的中断优先级。
   4、将发送数据送入SBUF.
   5、编制串行中断服务程序,在中断服务程序中要清出中断标志位。


lclbf 发表于 2023-12-20 07:55:39

lclbf 发表于 2023-12-19 08:23
第十八集: 串行口原理二

STC8H8K64U单片机的串口简介

第二十集 :SPI接口的结构
STC8H8K64U单片机SPI接口的结构

简介:操作模式:主模式和从模式

   1、SPI接口的信号
      MISO、MOSI、SCLK、/SS4(低电平有效)
   2、SPI接口的数据通信方式
       A、单主机-单从机方式
       B、双器件方式
       C、单主机-多从机方式
   3、SPI接口的数据通信过程
   4、SPI中断
   5、写冲突
   6、数据格式
   7、SPI时钟预分频选择

lclbf 发表于 2023-12-24 08:06:42

本帖最后由 lclbf 于 2023-12-24 08:08 编辑

第二十一集: SPI接口的通信

STC8H8K64U单片机SPI接口寄存器
       SPICTL、SPSTAT、SPDAT
STC8H8K64U单片机SPI接口的应用举例
   1、SPI初始化
       A、设置与SPI接口有关的I/O口工作模式
       B、通过SPI控制寄存器SPCTL设置相关功能
       C、清零寄存器SPSTAT中的标志位
       D、开放SPI中断
       E、开放总中断
2、SPI中断服务函数

第二十二集 :I2C总线介绍一
I2C总线的相关概念
1、简介
2、特点
3、术语

I2C总线的工作原理
1、同一个时钟工作
2、两根线SDA和SCL
3、所有器件并联都是开漏模式,需要上拉电阻
4、传输条件:开始条件,停止条件
5、每个器件都有唯一的地址

A、控制字节
B、写操作
C、读操作

I2C总线的基本操作

页: [1]
查看完整版本: 学习《STC8051单片机原理及应用-STC8H8K64U》| 建议送实验箱提高学习效率