找回密码
 立即注册
查看: 801|回复: 12

陈教授单片机原理及应用-STC8H8K64U学些笔记

[复制链接]
  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 204 天

    [LV.7]常住居民III

    2

    主题

    88

    回帖

    278

    积分

    中级会员

    积分
    278
    发表于 2023-11-19 08:26:25 | 显示全部楼层 |阅读模式
    第一课:课程导论


    1.单片机的发展历史

    01,8031
    特点:无程序存储器(需扩展),RAM很小,需要专门的仿真器
    截图202311190806258584.jpg



    02,8051
    特点:集成了4KB ROM,但只能将单片机程序交给单片机厂家制作,需要专门的仿真器

    截图202311190807418928.jpg



    03,8751
    特点:集成了4KB EPROM,需要专门的擦除器和编程器,需要专门的仿真器

    截图202311190808477868.jpg



    04,Atmel AT89C51
    特点:集成了4KB 电可擦写的程序存储器,需要专门的编程器,需要专门的仿真器

    截图202311190809549721.jpg



    05,STC89C51
    特点:集成了4KB Flash程序存储器,可在系统可编程(ISP),不需要专门的编程器。需要专门的仿真器

    截图202311190811162285.jpg



    06,STC12系列,STC15系列
    特点:集成了4KB Flash程序存储器,可在系统可编程(ISP),不需要专门的编程器。IAP开头的单片机可设置为仿真器,不需要专门仿真器

    截图202311190813445539.jpg



    07,STC8系列
    特点:集成了64KB Flash程序存储器,可在系统可编程(ISP),不需要专门的编程器。可设置为仿真器,不需要专门仿真器,资源丰富

    截图202311190815272968.jpg


    08,STC8单片机详解

    001,超高速8051内核(1T),指令代码完全兼容传统8051单片机
    002,集成64KB Flash程序存储器、256内部RAM,8192B内部扩展RAM、1280B数据RAM用于USB
    003,5个16位可自动重载的定时/计数器(T0-T4)、可编程时钟输出功能
    004,至多60跟I/O口线
    005,4个全双工异步串行口(UART)、1个高速同步通信端口(SPI)、1个I2C接口,1个USB接口
    006,15通道12位高速ADC
    007,8路高级PWM
    008,DMA、实时时钟RTC、液晶模块接口、专用复位电路和硬件看门狗、高精度R/C时钟等资源


    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    11 小时前
  • 签到天数: 244 天

    [LV.8]以坛为家I

    30

    主题

    142

    回帖

    825

    积分

    高级会员

    积分
    825
    发表于 2023-11-19 16:21:08 | 显示全部楼层
    很认真,加油
    MCU开发者和爱好者
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 204 天

    [LV.7]常住居民III

    2

    主题

    88

    回帖

    278

    积分

    中级会员

    积分
    278
     楼主| 发表于 2023-11-20 08:20:44 | 显示全部楼层
    第二课:点灯

    点亮LED灯
    线路图
    截图202311200742468710.jpg

    开发步骤:
    初始步骤,利用ISP工具将STC文件加入Keil


    - 新建项目
    - 创建main.c文件并加入工程
    - 设置生成HEX文件
    - 写代码
    - 将用户程序下载到单片机
    - 看效果
    1. #include "STC8.h"
    2. void Delay500ms()                //@11.0592MHz
    3. {
    4.         unsigned char data i, j, k;
    5.         i = 29;
    6.         j = 14;
    7.         k = 54;
    8.         do
    9.         {
    10.                 do
    11.                 {
    12.                         while (--k);
    13.                 } while (--j);
    14.         } while (--i);
    15. }
    16. void main(void)
    17. {
    18.         P4M1 = 0xFF;
    19.         P4M0 = 0xFF;
    20.         
    21.         P6M1 = 0;
    22.         P6M0 = 0;
    23.         
    24.         P40 = 0;
    25.         
    26.         while(1)
    27.         {
    28.                 P60 = 1;
    29.                 Delay500ms();
    30.                 P60 = 0;
    31.                 Delay500ms();
    32.         }
    33. }
    复制代码


    基础概念
    十进制二进制和十六进制
    十进制:习惯采用的计数制

    二进制:计算机采用的进制。只有0,1两个不同的基数,逢二进一用B表示
    十六进制:二进制位数较多时,读写不方便。用16进制表示简明。
          一位十六进制数有16个字符,分别使用0-9和大写英文字母A,B,C,D,E,F表示
    十进制转换成二进制
    截图202311200808133212.jpg

    二进制转换成十进制
    截图202311200809119574.jpg

    4位二进制和十六进制对应关系
    截图202311200810202209.jpg

    单位转换
    位(bit):计算机所能表示的最小数字单位,即二进制的位,通常每位只有2种状态,0,1,用b表示
    字节(Byte):8位(bit)为一个字节,是内存的基本单位,常用B表示
    K(千,Kilo):1K=1024 如1KB = 1024B;
    M(兆,Million):1M = 1K * 1K,1MB = 1024 * 1024B
    G(吉,Giga):1G = 1K * 1M,1GB = 1024 * 1024 * 1024B
    T(太,Tera):1T = 1M * 1M,1TB = 1024 * 1024 * 1024 * 1024B

    单片机系统
    截图202311200803135888.jpg


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 204 天

    [LV.7]常住居民III

    2

    主题

    88

    回帖

    278

    积分

    中级会员

    积分
    278
     楼主| 发表于 2023-11-21 06:45:05 | 显示全部楼层
    本帖最后由 noonezero 于 2023-11-21 08:09 编辑

    第三课:数字逻辑与基本数字电路

    1.逻辑电平
    逻辑电平是指一种信号的状态,通常由信号与地线之间的电位差来体现。数字电路中,把电压的高低用逻辑电平来表示。逻辑电平包括高电平和低电平两种
    在5V系统的TTL/CMOS兼容数字逻辑电平,一般是:高于2,2V的输入,认为是高电平,用数字1表示;低于0.8V的输入,认为是低电平,用数字0表示。

    2.上升沿和下降沿
    数字电路中,数字电平从低电平(数字"0")变为高电平(数字"1")的那一瞬间(时刻)叫作上升沿。
    数字电路中,数字电平从高电平(数字"1")变为低电平(数字"0")的那一瞬间叫作下降沿。

    3.基本逻辑运算
    逻辑变量的值只有两个:逻辑0和逻辑1。
    数字逻辑运算主要包括与、或、非、异或等。
    逻辑运算只是按位进行运算,没有进位和借位问题,逻辑变量也没有符号问题。
    逻辑与,也叫逻辑乘,也就是C语言的位与。
    逻辑或,也叫逻辑加,也就是C语言的位或。
    逻辑非,也叫逻辑反,也就是C语言的位非。



    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 204 天

    [LV.7]常住居民III

    2

    主题

    88

    回帖

    278

    积分

    中级会员

    积分
    278
     楼主| 发表于 2023-11-21 10:21:30 | 显示全部楼层
    本帖最后由 noonezero 于 2023-11-22 07:30 编辑

    第四课:单片机内部结构

    微型计算机框架结构

    截图202311210823483567.jpg


    传统8051单片机内部结构
    截图202311210825157952.jpg

    STC8H单片机内部组成
    截图202311210830478112.jpg

    数据存储区
    截图202311220725156358.jpg


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 204 天

    [LV.7]常住居民III

    2

    主题

    88

    回帖

    278

    积分

    中级会员

    积分
    278
     楼主| 发表于 2023-11-24 08:06:09 | 显示全部楼层
    本帖最后由 noonezero 于 2023-11-24 22:02 编辑

    第五课:存储空间及存储器

    数据存储器

    高128字节RAM和特殊功能寄存器
    80H~FFH既为高128字节RAM区的地址范围,又为特殊功能寄存器区(SFR)的地址范围,地址空间重叠,但物理上是独立的。特殊功能寄存器是用来对片内各功能模块进行管理、控制、监视的控制寄存器和状态寄存器。

    特殊功能寄存器大体分为两类:
    一类与芯片的引脚有关,如P0~P7;另一类用于芯片内部功能的控制或者内部寄存器,
    如中断控制、定时器、串行口、SPI接口、PWM模块、ADC模块的控制字等。
    单片机的功能就是通过特殊功能寄存器的设置实现的。

    引脚图
    截图202311241859408722.jpg



    最小系统
    截图202311242146526746.jpg



    IO口的工作模式,用IO控制配置就可以了
    截图202311242158212064.jpg
    PnM1.xPnM0.xPn.x口工作模式
    00准双向口
    01推挽输出
    10高阻输入
    11开漏输出

    IO口注意事项

    (1)P3.0和P3.1口上电后的状态为弱上拉/准双向口模式。
    (2)除P33.0和P3.1外,其余所有I/0口上电后的状态均为高阻输入状态,在使用I/0口前必须先设置I/0口模式。
    (3)上电时如果不需要使用USB进行ISP下载,P3.0/P3.1/P3.2这3个I/0口不能同时为低电平,否则会进入USB下载模式而无法运行代码

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 204 天

    [LV.7]常住居民III

    2

    主题

    88

    回帖

    278

    积分

    中级会员

    积分
    278
     楼主| 发表于 2023-12-2 09:08:06 | 显示全部楼层
    本帖最后由 noonezero 于 2023-12-3 08:16 编辑

    第六课:I/O工作模式


    在使用STC8H8K64U单片机的I/0口时,应注意:
    1. P3.0和P3.1口上电后的状态为弱上拉/准双向口模式。
    2. 除P3.0和P3.1外,其余所有I/0口上电后的状态均为高阻输入状态,使用前必须先设置模式。
    3. 上电时如果不需要使用USB进行ISP下载,P3.0/P3.1/P3.2这3个I/O囗不能同时为低电平,否则会进入USB下载模式而无法运行代码。

    IO口复用,看引脚图

    截图202312020754112814.jpg


    便捷配置:
    截图202312020804431277.jpg



    拉电流和灌电流
    截图202312020830569162.jpg

    传统8051就是采用灌电流的方式驱动LED,它是准双向口模式,电流输出能力差
    虽然STC单片机有推挽输出模式,但是,还是没有灌电流驱动能力强


    接下来时汇编学习笔记:
    汇编没学过,大概看看了解下,晕
    伪指令
    1. 设置起始地址ORG(Origin)
    ORG是该伪指令的操作助记符,操作数addr16是16位二进制数,前者表明为后续源程序汇编后的目标程序安排存放位置,后者则给出了存放的起始地址值。ORG伪指令总是出

    现在每段源程序或数据块的开始。可使程序员把程序、子程序或数据块存放在存储器的任何位置。
    若在源程序开始不放ORG指令,则汇编将从0000H单元开始存放目标程序。

    ORG 2000H
    MOV A,20H
    表示后面的目标程序从2000H单元开始存放


    2.定义字节DB(Define Byte)

    <标号:> DB <项或项表>
    其中项或项表时指一个字节、数或字符串,或以引号括起来的ASCLL码字符串
    指令的功能是把项或项表的数值(字符串用ASCLL码表示)存入标号开始的连续单元中
    截图202312020843211140.jpg


    3.定义字DW(Define Word)

    <标号:> DW <项或项表>

    DW伪指令常用来建立地址表
    DW的基本含义与DB相同,但DB一般用于定义8位数据(1byte)DW定义16位数据(1word)
    在执行汇编程序时,机器自动按低位字节在前,高位字节在后的格式排列(与程序中的地址规定一致)
    截图202312020847426664.jpg


    4.为标号赋值EQU(Equate)

    (标号) EQU 数值或表达式
    其功能是将语句操作数的值赋予本语句的标号,也叫等值指令
    赋值后不可改变,和define类似


    5.DATA指令

    符号名 DATA 表达式

    DATA指令用于将一个内部RAM的地址赋给指定的符号名
    数值表达式的值在00H~0FFH之间,表达式必须是一个简单表达式


    6.XDATA指令(External Data)
    符号名 XDATA 表达式

    XDATA指令用于将一个外部RAM的地址赋给指定符号名
    数值表达式的值在0000H~0FFFFH之间,表达式必须是一个简单表达式



    7.定义位命令BIT

    字符名称 BIT 位地址

    该指令用于给字符名称定义位地址
    DOGOUT BIT P3.4
    经定义后,允许在指令中用DOGOUT代替P3.4


    8.文件包含命令INCLUDE

    文件包含命令INCLUDE用于将寄存器定义头文件(一般的后缀名为INC)包含于当前程序中,与#include语句的作用类似
    根据第七课补充
    $INCLUDE(STC8H.H)
    这句是高速汇编器不使用预定义的寄存器名。因为汇编器内部定义了8051的寄存器名,如果没有使用$NOMOD51,后面包含了STC8H.H的头文件,汇编时,就会出现寄存器符号重复定义的错误。使用上述命令后,在用户程序中就可以使用STC8H8K64U单片机的特殊寄存器名称了


    9.源程序结束END
    END 表达式

    END语句是一个结束标志。告诉汇编程序,该程序段已结束
    因此,该语句必须放在整个程序(包括伪指令)之后


    截图202312020904448953.jpg



    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 204 天

    [LV.7]常住居民III

    2

    主题

    88

    回帖

    278

    积分

    中级会员

    积分
    278
     楼主| 发表于 2023-12-3 10:23:25 | 显示全部楼层
    本帖最后由 noonezero 于 2023-12-3 11:02 编辑

    第七课:宏汇编


    1.助记符语言描述

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


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

    截图202312030822252266.jpg


    常见操作码
    截图202312030824504231.jpg



    操作数是一条指令操作的对象。操作数可以是数据,也可以是地址。不同功能的指令,操作对象形式不同。
    不同指令的操作数特点如下:
    1. 传送类指令,必须指明操作对象从哪丿L来(源地址),传到何处去(目的地址)。
    2. 数据操作类指令,一般靠运算器完成,数据操作类指令的对象一般是两个。
    3. 程序控制类指令的操作对象是程序计数器pc和一个数。

    4. 逻辑操作类有单操作数和双操作数之分。


    注意事项:
    1. 数据只能是整数,不能是小数。
    2. 当汇编指令中的数据是十六进制且是以字母开头时,该数据应加个前导0,以表示后面的字母不是变量而是数字。

    3. 在8051内核单片机中,一个数据的前面有前缀#号则表示后面的数据是立即数,如果数据的前面没有#号,则说明该数据表示的是直接地址


    汇编语言的概念和格式
    截图202312031045243037.jpg

    常用符号及含义

    截图202312031047332534.jpg




    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 204 天

    [LV.7]常住居民III

    2

    主题

    88

    回帖

    278

    积分

    中级会员

    积分
    278
     楼主| 发表于 2023-12-4 09:02:04 | 显示全部楼层
    本帖最后由 noonezero 于 2023-12-4 10:18 编辑

    第八课:汇编指令一


    1.数剧传送类指令简介数据传送类指令是使用频率最高的一类指令。主要用来给8051
    单片机系统的内部和外部资源赋值、进行堆栈的存取操作等。数据传送类指令执行前后,对程序状态字PSW一般不产生影响。
    按其操作方式,又可把它们分为数据传送,数据交换,栈操作。


    传送指令--MOV
    MOV指令的作用区间主要是内部数据存储器和特殊功能寄存器
    MOV <目的字节> <源字节>
    把第二操作数指定字节变量传送到由第一操作数指定的单元中,源字节内容不变,一般不影响别的寄存器或标志


    外部数据存储器(或扩展并行I/O口)与累加器A传送指令--MOVX

    MOVX指令主要用于累加器A和外部RAM或扩展并行IO口进行数据传送。这种传送只有一种寻址方式,就是寄存器间接寻址。


    程序存储器向累加器A传送指令--MOVC



    字节交换指令--XCH


    半字节交换指令--XCHD


    栈操作指令
    堆栈区是将内部存储器的一部分区域划作专用于堆栈的区域。堆栈区的操作规则是后进先出,最后存入的数据将被最先取出。堆栈区当前的栈顶地址用堆栈指针寄存器SP中的值表示,即SP始终指向栈顶。

    截图202312040859102343.jpg


    PUSH  addr8
    POP   addr8
    这两个指令完成两种堆栈基本操作:压入堆栈(PUSH),弹出堆栈(POP)。堆栈中的数据以“后进先出”的方式处理。由堆栈指针SP来控制,用来自动跟踪堆栈顶项地址


    PUSH和POP是成对出现的,PUSH进去多少个POP也就多少个


    逻辑操作类指令
    截图202312041016007916.jpg





    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 204 天

    [LV.7]常住居民III

    2

    主题

    88

    回帖

    278

    积分

    中级会员

    积分
    278
     楼主| 发表于 2023-12-5 10:26:07 | 显示全部楼层
    本帖最后由 noonezero 于 2023-12-5 11:04 编辑

    第九课:位操作/控制转移 以及程序设计


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



    2.位操作指令简介
    截图202312050831038302.jpg



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


    截图202312051024349528.jpg


    截图202312051024569805.jpg


    位条件转移指令
    实际应用中,一般在rel的位置写入欲跳转到的标号地址,偏移量由汇编程序自动进行计算。这样做有两个好处,一是程序的可读性好,二是不必进行偏移量的计算。
    截图202312051032578120.jpg










    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-7-27 17:38 , Processed in 0.078706 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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