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

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

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:359
  • 最近打卡:2025-05-04 11:02:22

2

主题

87

回帖

898

积分

高级会员

积分
898
发表于 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时钟等资源


回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:524
  • 最近打卡:2025-05-06 08:10:11
已绑定手机
已实名认证

46

主题

161

回帖

504

积分

高级会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:359
  • 最近打卡:2025-05-04 11:02:22

2

主题

87

回帖

898

积分

高级会员

积分
898
发表于 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


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:359
  • 最近打卡:2025-05-04 11:02:22

2

主题

87

回帖

898

积分

高级会员

积分
898
发表于 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语言的位非。



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:359
  • 最近打卡:2025-05-04 11:02:22

2

主题

87

回帖

898

积分

高级会员

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

第四课:单片机内部结构

微型计算机框架结构

截图202311210823483567.jpg


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

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

数据存储区
截图202311220725156358.jpg


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:359
  • 最近打卡:2025-05-04 11:02:22

2

主题

87

回帖

898

积分

高级会员

积分
898
发表于 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下载模式而无法运行代码

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:359
  • 最近打卡:2025-05-04 11:02:22

2

主题

87

回帖

898

积分

高级会员

积分
898
发表于 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



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:359
  • 最近打卡:2025-05-04 11:02:22

2

主题

87

回帖

898

积分

高级会员

积分
898
发表于 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




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:359
  • 最近打卡:2025-05-04 11:02:22

2

主题

87

回帖

898

积分

高级会员

积分
898
发表于 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





回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:359
  • 最近打卡:2025-05-04 11:02:22

2

主题

87

回帖

898

积分

高级会员

积分
898
发表于 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, 2025-5-6 16:22 , Processed in 0.142052 second(s), 105 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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