找回密码
 立即注册
楼主: cuisheng

陈桂友教授《1T 8051单片机原理及应用-8H8K64U》学习记录 | 已建议送实验箱

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:43
  • 最近打卡:2025-09-10 16:02:37

4

主题

27

回帖

350

积分

中级会员

积分
350
发表于 2023-8-8 20:43:59 | 显示全部楼层
本帖最后由 cuisheng 于 2023-8-8 20:45 编辑

第7集视频学习:



1、助记符语言描述

    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种)

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

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

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

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

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

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

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

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

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:43
  • 最近打卡:2025-09-10 16:02:37

4

主题

27

回帖

350

积分

中级会员

积分
350
发表于 2023-8-9 19:17:13 | 显示全部楼层
本帖最后由 cuisheng 于 2023-8-11 22:51 编辑

第8集视频学习

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

1、传送指令: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

汇编语言测试模板:

  1. $NOMOD51
  2. $include (stc8h.h)
  3.     ORG        0000H
  4.     LJMP       MAIN        ;跳转到主程序
  5.     ORG        0100H
  6. MAIN
  7.     MOV        SP, #70H
  8. LOOP:
  9.     LJMP       LOOP
  10.     END
复制代码

观察内部RAM的内容,Address:D:0
查看IO口的内容:Menu: Peripherals -> I/O-Ports -> Port X

* Rn、内部RAM、SFR与累加器A传送数据。共6条:
MOV    A, addr8        ;(A) <- (addr8)
MOV    A, @Ri           ;(A) <- ( (Ri) )
MOV    A, Rn             ;(A) <- (Rn)
MOV    addr8, A        ;(addr8) <- (A)
MOV    @Ri, A          ;( (Ri) ) <- (A)

MOV    Rn, A            ;(Rn) <- (A)


手工修改Memory内容,鼠标右键,单击Modify Memory at D:0xXX

MOV    R1, #82H
MOV    A, @R1
内部80H~FFH的RAM单元,只能使用如上方式的间接寻址方式

* Rn、SFR和内部RAM之间的数据传送,共5条:
MOV    addr8, addr8        ;(addr8目) <- (addr8源)
MOV    addr8, @Ri          ;(addr8) <- ( (Ri) )

MOV    addr8, Rn            ;(addr8) <- (Rn)

MOV    @Ri, addr8          ;( (Ri) ) <- (addr8)

MOV    Rn, addr8            ;(Rn) <- (addr8)


* 目标地址传送
MOV    DPTR, #data16

* 外部数据存储器(或扩展并行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

Keil仿真,查看外部存储单元数据:X:0100H

* 程序存储器向累加器A传送指令  MOVC
MOVC    A, @A + PC            ;PC <- (PC) + 1, (A) <- ( (A) + (PC) )
MOVC    A, @A + DPTR        ;(A) <- ( (A) + (DPTR) )
(变址寻址,PC或DPTR作为基址寄存器)

注:保护DPTR的内容:
        PUSH    DPH
        PUSH    DPL        ;保护DPTR
        ......
        POP      DPL
        POP      DPH        ;恢复DPTR

        调用子程序:    LCALL    子程序名

* 数据交换指令
    1、字节交换指令
         XCH    A, addr8        ;(A) <--> (addr8)
         XCH    A, @Ri          ;(A) <--> ( (Ri) )

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


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

* 栈操作指令
    概念:断点地址、压栈(保护现场)、出栈(恢复现场)
    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表示直接寻址)

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:43
  • 最近打卡:2025-09-10 16:02:37

4

主题

27

回帖

350

积分

中级会员

积分
350
发表于 2023-8-12 22:51:17 | 显示全部楼层
第9集视频学习


一、位操作指令:
    位传送,位状态控制、位逻辑操作、位条件转移等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、位条件转移

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

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

5、控制转移类指令

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

    JZ      rel
    JNZ    rel
    CJNZ
    DJNZ

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

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:43
  • 最近打卡:2025-09-10 16:02:37

4

主题

27

回帖

350

积分

中级会员

积分
350
发表于 2023-8-13 12:03:53 | 显示全部楼层
本帖最后由 cuisheng 于 2023-8-13 12:04 编辑

第10集学习笔记:


汇编语言程序的框架

  1. $NOMOD51
  2. $INCLUDE (STC8H.H)
  3. ;...这里可以编写程序中用到的一些符号定义(使用EQU、DATA、BIT等伪指令)
  4.               ORG     0000H
  5. START:    LJMP    MAIN            ;跳转到主程序
  6.               ORG     0003H
  7.               LJMP    INT0_ISR      ;外部中断0入口(ISR Interrupt Service Rowtine 中断服务程序)
  8.               ORG     000BH
  9.               LMP     T0_ISR          ;定时器0中断入口
  10.               ORG     0013H
  11.               LJMP    INT1_ISR      ;外部中断1入口
  12.               ORG     001BH
  13.               LMP     T1_ISR          ;定时器1中断入口</div>
  14.               ORG     0023H
  15.               LJMP    UART1_ISR    ;串口1中断入口</div>
  16.               ......
  17.               ORG     0200H
  18. MAIN:     MOV     SP, #80H        ;设置堆栈指针(可根据情况修改)
  19.               ...... ;初始化内存区域内容
  20.               ...... ;设置有关特殊功能寄存器(SFR)的控制字
  21.               ...... ;根据需要开放相应的中断控制
  22. MAINLOOP:
  23.               ;主程序循环
  24.               LJMP    MAINLOOP
  25. INT0_ISR:                      ;外部中断0服务子程序
  26.               ......                 ;根据需要填入适当的内容
  27.               RETI
  28.               ......                 ;编写其他子程序或者定义程序中所用的常数
  29.               END
复制代码


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


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:43
  • 最近打卡:2025-09-10 16:02:37

4

主题

27

回帖

350

积分

中级会员

积分
350
发表于 2023-8-16 00:00:23 | 显示全部楼层
本帖最后由 cuisheng 于 2023-8-16 22:44 编辑

第11集学习记录

一、C51对ANSI C的扩展

    C51有以下19个扩展关键字:
    _at_sbitsfrbit、sfr16、idata、bdata、xdata、pdata、data、code、alien、small、compact、large、using、reentrant、interrupt、_task_

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

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

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

3、特殊功能寄存器(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;

内存区域的指定

1、程序存储器,使用code关键字
    例如:
    unsigned char code led_buf[10] = {0x3F,......}

2、内部RAM
    data: 直接寻址区,内部RAM低128字节,00H~7FH,默认都保存在该区域。

    idata: 间接寻址区,间接寻址区,包括整个内部RAM区256字节,00H~0FFH。
    bdata: 可位寻址区,20H~2FH。

3、外部数据存储器
    xdata: 可指定多达64KB的外部直接寻址区,地址范围0000H~0FFFFH。
    例如:
    unsigned char xdata arr[300][2];

    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对函数的扩展

1、中断函数声明 interrupt
    例如:
    void UART1_ISR(void) interrupt 4
    {
        /* 中断服务程序的代码 */
    }

2、指定工作寄存器区(using后跟0~3的数,R7~R0)(不重要)
    例如:(相当于PSW.4 = 0,PSW.3 = 1)
    unsigned char GetKey(void) using 1
    {
    }

3、指定存储模式(small、compact、large)(不重要)
    例如:small说明函数的内部变量全部使用内部RAM
    void disp_data(void) small
    {
    }


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:43
  • 最近打卡:2025-09-10 16:02:37

4

主题

27

回帖

350

积分

中级会员

积分
350
发表于 2023-8-17 22:37:12 | 显示全部楼层
第12集学习记录

两个小示例:流水灯、读写EEPROM
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:43
  • 最近打卡:2025-09-10 16:02:37

4

主题

27

回帖

350

积分

中级会员

积分
350
发表于 2023-8-18 13:35:14 | 显示全部楼层
本帖最后由 cuisheng 于 2023-8-18 22:57 编辑

第13集学习记录

中断的相关概念
    中断源、中断响应、中断服务、中断返回。
    中断优先级、中断嵌套
    开中断(中断允许)、关中断(中断禁止)
    保护现场(push和pop相关寄存器)、恢复现场
    中断请求标志应该撤除(有些能自动撤除,有些不能自动撤除,需要用相应指令撤除)

STC8H8K64U共有44个中断源:

    5个外部中断(INT0~INT4)
    5个定时/计数器溢出中断(T0~T4)
    4个异步串口中断(UART1~UART4)
    1个串行外设接口中断(SPI)
    1个I2C总线中断、1个USB中断
    1个模数转换中断(ADC)、1个低压检测中断(LVD)、1个比较器中断(CMP)
    2个PWM中断(PWMA和PWMB)
    8个端口中断(P0~P7)
    12个DMA中断
    1个RTC中断
    1个LCM中断

中断源

    除外部中断2、外部中断3、定时器2、定时器3、定时器4固定是最低优先级中断外,其他的中断都具有4个优先级。
   
(汇编语言 SJMP$  相当于 while(1); )
(查询次序号 <--> 中断号)

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:43
  • 最近打卡:2025-09-10 16:02:37

4

主题

27

回帖

350

积分

中级会员

积分
350
发表于 2023-8-19 14:34:12 | 显示全部楼层
第14集学习记录


中断优先级处理原则:
    1、先高后低
    2、停低转告
    3、高不踩低
    4、实现规定

下列情况出现时,CPU不会响应中断请求:
    1、EA=0 或发出中断请求的中断所对应的中断允许控制位位0;
    2、CPU正在执行一个同级或高一级的中断服务程序;
    3、当前执行的机器周期不是指令周期的最后一个机器周期;
    4、正在执行的指令是中断返回指令RETI,或者是访问专用寄存器IE或IP的指令时,CPU至少要再执行一条指令才能响应中断请求。

中断服务程序由四个部分组成:
    1、保护现场(汇编:PUSH,一般是累加器A和程序状态字寄存器PSW)
    2、中断服务
    3、恢复现场(汇编:POP)
    4、中断返回(RETI:一方面清除中断响应时所置位的优先级有效触发器,一方面由栈顶弹出断点地址送程序计数器PC,从而返回主程序)

中断服务程序注意事项:
    1、响应中断后,如果不希望出现中断嵌套,可以在中断开始时,关闭中断EA=0
    2、为了保证保护现场和恢复现场能够连续进行,在保护现场和恢复现场之前,应该先关闭中断,结束后,再根据情况开中断
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:43
  • 最近打卡:2025-09-10 16:02:37

4

主题

27

回帖

350

积分

中级会员

积分
350
发表于 2023-8-23 22:46:08 | 显示全部楼层
第15集学习记录:


T0和T1的工作模式

    TMOD:89H
    (M1、M0)
    模式0:16位自动重装载模式
    模式1:16位不可重装载模式
    模式2:8位自动重装模式
    模式3:不可屏蔽中断的16位自动重装载模式(定时器T1无效)

T2的工作模式

    AUXR:8EH
    16位自动重装载模式

相关寄存器:

1、M1、M0:工作模式切换
2、C/T:功能选择位(1:计数器功能、0:定时器功能)
3、GATE:门控位。用于选通控制。
    GATE=1时,同时INTn为高电平且TRn置位时,启动定时器工作。

定时控制寄存器(TCON)88H,可位寻址

    TF1、TF0:溢出中断标志
    TR1、TR0:运行控制位(1-启动定时器、0-停止定时器)

辅助寄存器(AUXR)

    T0x12、T1x12、T2x12:速度控制位。0-12分频(FOSC/12);1-不分频(FOSC)
    TR2:定时器2运行控制位
    T2_C/T:控制T2用作定时器或计数器

中断与时钟输出控制寄存器(INTCLKO)

    T0CLKO、T1CLKO、T2CLKO:定时器时钟输出控制
    0-关闭时钟输出、1-是能时钟输出功能

T4/T3控制寄存器(T4T3M)D1H

还有各个定时器的重装载寄存器、时钟预分频器。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:43
  • 最近打卡:2025-09-10 16:02:37

4

主题

27

回帖

350

积分

中级会员

积分
350
发表于 2023-8-26 17:26:57 | 显示全部楼层
第16集学习记录:


定时器的最大定时能力:

    在晶振频率位11.0592MHz的情况下,12分频,
    对于16位的定时器,最大定时能力约为71毫秒
    对于24位定时器(T2~T4),最大定时能力为18秒

定时/计数器初始化部分的步骤大致如下:

    1、设置工作方式,将控制字写入方式寄存器。
    2、把定时/计数初值装入TLn、THn寄存器。
    3、置位TRn以启动定时/计数。
    4、置位ETn允许定时/计数器中断(如果需要)。
    5、置位EA使CPU开放中断。


回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-9-16 09:04 , Processed in 0.128442 second(s), 90 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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