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

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

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:42
  • 最近打卡:2024-07-15 12:37:13

4

主题

27

回帖

344

积分

中级会员

积分
344
发表于 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
  • 打卡总天数:42
  • 最近打卡:2024-07-15 12:37:13

4

主题

27

回帖

344

积分

中级会员

积分
344
发表于 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
  • 打卡总天数:42
  • 最近打卡:2024-07-15 12:37:13

4

主题

27

回帖

344

积分

中级会员

积分
344
发表于 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
  • 打卡总天数:42
  • 最近打卡:2024-07-15 12:37:13

4

主题

27

回帖

344

积分

中级会员

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

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:42
  • 最近打卡:2024-07-15 12:37:13

4

主题

27

回帖

344

积分

中级会员

积分
344
发表于 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
  • 打卡总天数:42
  • 最近打卡:2024-07-15 12:37:13

4

主题

27

回帖

344

积分

中级会员

积分
344
发表于 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
  • 打卡总天数:42
  • 最近打卡:2024-07-15 12:37:13

4

主题

27

回帖

344

积分

中级会员

积分
344
发表于 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
  • 打卡总天数:42
  • 最近打卡:2024-07-15 12:37:13

4

主题

27

回帖

344

积分

中级会员

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


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:42
  • 最近打卡:2024-07-15 12:37:13

4

主题

27

回帖

344

积分

中级会员

积分
344
发表于 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:帧错






回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:42
  • 最近打卡:2024-07-15 12:37:13

4

主题

27

回帖

344

积分

中级会员

积分
344
发表于 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, 2025-5-1 19:44 , Processed in 0.148561 second(s), 99 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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