找回密码
 立即注册
楼主: cuis***

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

[复制链接]
  • TA的每日心情
    开心
    2024-4-25 11:42
  • 签到天数: 31 天

    [LV.5]常住居民I

    4

    主题

    27

    回帖

    298

    积分

    中级会员

    积分
    298
     楼主| 发表于 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         ;空操作
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-25 11:42
  • 签到天数: 31 天

    [LV.5]常住居民I

    4

    主题

    27

    回帖

    298

    积分

    中级会员

    积分
    298
     楼主| 发表于 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
    复制代码


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


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-25 11:42
  • 签到天数: 31 天

    [LV.5]常住居民I

    4

    主题

    27

    回帖

    298

    积分

    中级会员

    积分
    298
     楼主| 发表于 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
        {
        }


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-25 11:42
  • 签到天数: 31 天

    [LV.5]常住居民I

    4

    主题

    27

    回帖

    298

    积分

    中级会员

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

    两个小示例:流水灯、读写EEPROM
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-25 11:42
  • 签到天数: 31 天

    [LV.5]常住居民I

    4

    主题

    27

    回帖

    298

    积分

    中级会员

    积分
    298
     楼主| 发表于 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); )
    (查询次序号 <--> 中断号)

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-25 11:42
  • 签到天数: 31 天

    [LV.5]常住居民I

    4

    主题

    27

    回帖

    298

    积分

    中级会员

    积分
    298
     楼主| 发表于 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、为了保证保护现场和恢复现场能够连续进行,在保护现场和恢复现场之前,应该先关闭中断,结束后,再根据情况开中断
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-25 11:42
  • 签到天数: 31 天

    [LV.5]常住居民I

    4

    主题

    27

    回帖

    298

    积分

    中级会员

    积分
    298
     楼主| 发表于 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

    还有各个定时器的重装载寄存器、时钟预分频器。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-25 11:42
  • 签到天数: 31 天

    [LV.5]常住居民I

    4

    主题

    27

    回帖

    298

    积分

    中级会员

    积分
    298
     楼主| 发表于 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开放中断。


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-25 11:42
  • 签到天数: 31 天

    [LV.5]常住居民I

    4

    主题

    27

    回帖

    298

    积分

    中级会员

    积分
    298
     楼主| 发表于 2023-9-9 09:53:16 | 显示全部楼层
    第17集学习记录:串口原理一



    STC8H8K64U:
        4个异步串行通信接口(UART)
        1个SPI通信口
        1个I2C接口
        1个USB接口


    异步数据传送中,CPU与外设必须约定以下内容:
    1、字符格式
        字符的编码形式、奇偶校验形式、起始位、停止位。
    2、通信速率
        波特率


    典型表示方法,如:9600,n,8,1
    (n: 无校验、e:偶校验、o:奇校验,8:8个数据位,1:1个停止位)


    UART:通用异步接收器/发送器


    PE:奇偶错
    OE:溢出错
    FE:帧错






    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-25 11:42
  • 签到天数: 31 天

    [LV.5]常住居民I

    4

    主题

    27

    回帖

    298

    积分

    中级会员

    积分
    298
     楼主| 发表于 2023-9-9 21:14:41 | 显示全部楼层
    第18集学习记录:串口原理二



    每个串口由2个数据缓冲器(发送和接收)、1个移位寄存器、1个串行控制寄存器组、1个波特率发生器等。


    串口1有四种工作模式,通过SCON中的SM0、SM1位的设置进行选择,其中两种模式波特率可变,另外两种是固定的。


    串口2/3/4都只有两种工作模式(异步),通过S2CON/S3CON/S4CON中的S2SM0/S3SM0/S4SM0位的设置进行选择,波特率可变。


    串口1四种工作模式:
        方式0:同步移位串行模式
        方式1:可变波特率8位数据模式(单机通信)
        方式2:固定波特率9位数据模式
        方式3:可变波特率9位数据模式(多机通信)


    波特率 = (T1的溢出率或T2的溢出率) / 4    T1/T2工作在模式0(16位自动重装载模式)


    SM2:多机通信控制位

    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-9 21:24 , Processed in 0.069838 second(s), 64 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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