《STC教学研讨会STC8H/STC32G》--学习记录/学习心得--打卡帖 | 建议送
陈教授《STC最新8051单片机原理及应用--STC8H8K64U》(7月19日) -- 学习笔记原功能--指令集--汇编语言;
《深入理解计算机系统》、《数字设计和计算机体系结构》;
前置: C语言、数字逻辑、电路;
单片机教学发展历程:
Intel 8051内核上发现,最新 STC8系列;
硬件资源:
64k Flash程序存储器
高速8051 kernel
指令集8051
RAM 256B
I/O 输入输出、开关量
串行口 I2C SPI UART USB
15 * 12bit ADC
8 * PWM
元器件及实验箱
KEIL 开发仿真环境
ISP 程序下载
配置I/O口、设置工作方式
电灯大师启航,运用开发板原理图+芯片手册+KEIL C工程+ ISP下载,完成一个STC8H8K64实例,窥见一斑,留给我深刻印象。
本帖最后由 大亮 于 2023-9-9 05:41 编辑
陈教授《STC最新8051单片机原理及应用--STC8H8K64U》(7月26日) -- 学习笔记
数字电路、数字逻辑:高/低电平、上升/下降沿、显/隐性电平,与、或、非、异或,真值表
软件开发项目:单片机特点,集成度高/体积小,功耗低(Normal Mode -->2.09mA, Idle Mode-->0.48mAc),可靠性高,工业场合,片内看门狗(操作寄存器),价格低(MCU价格不决定产品陈本,开发模式、人工成本、技术成本等)
寄存器编程和库函数编程方案
程序在线仿真:STC8H8K-->ISP工具-->KEIL仿真设置-->头文件加载-->USB口进行仿真-->将单片机设置仿真芯片(Off ON)-->KEIL-->Debug-->Use: STC Monitor-->Run to Me-->Crystl: 11.0592MHz
单步执行调试程序
微机结构框架:传统8051内部结构:运算器:TMP暂存寄存器,控制器:堆栈指针,存储器:RAM、程序存储器,I/O接口:通道、锁存器(写入新数据前,保持不变),
扩展RAM、扩展Flash
STC8H内部组成:外设接口扩展
CPU内运算器,程序状态寄存器:PSW 字节地址D0H,位定义, 汇编语言操作
存储器:程序存储器、数据存储器,独立编址,片内3个物理独立存储空间。
0000H~FFFFH 64K 程序Flash存储器 复位后,程序计数器内容0000H,从0000H单元开始执行程序;Flash中有特殊单元,中断程序入口地址/中断向量,中断响应,自动调转中断入口地址执行程序,0003H-->INT0, 000BH--->TIMER0 等等,里面跳转具体中断函数地址,后面仔细学
00H~7FH 低128字节内部RAM 内部数据存储器
基本RAM区
80H~FFH 高128字节内部RAM 内部数据存储器 特殊功能寄存器占用地址重叠(通过指令系统不同寻址方式区分)
0000H ~ 1FFFH 8192字节扩展RAM 扩展数据存储器
开发者需清楚自己的程序存储在什么地方,数据存储在什么地方
################################################## 本帖最后由 大亮 于 2023-9-9 05:35 编辑
《STC最新8051单片机原理及应用--STC8H8K64U》(陈教授 8月2日) -- 学习笔记
2023年全国大学生电子设计竞赛试题
电路设计、软件编程、寄存器设置: 单片机发挥功能就是通过特殊功能寄存器的设置实现的,高128字节RAM和相同地址特殊功能寄存器通过寻址方式区分访问
特殊功能寄存器:传统特殊功能寄存器(SFR)、扩展特殊功能寄存器(XFR)
扩展数据存储区: XRAM,内/外部(8051内核的内部外部) C语言将大变量或数组存放xdata语法:声明时 unsigned char xdatai = 0;
//单片机的程序最后是一个死循环,不允许返回,单片机没有操作系统
LQFP64封装引脚:
第一脚,丝印小圆点、逆时针
I/O口,“/”--功能,第一功能,复用功能
PDIP40封装,双列直插,便于学习和调试
特色点,支持一路USB,通过USB下载程序 P3.0 P3.1供电、复位、下载、调试功能集成
逻辑符号图:原理图、分类汇总。P1.2 牺牲 I2C SSP5.4可配置
引脚:电源引脚、外接晶振引脚、复位和控制引脚(NRST P5.4复用,ALE P4.5复用,外部扩展),输入输出引脚
I/O口: 开关量、复用(通讯、串行等),工作模式四种:
1、准双向口/弱上拉模式 (输入输出)
2、推挽输出/强上拉模式(驱动)
3、高阻输入(仅输入)
4、开漏模式
两个控制寄存器控制 PnMx I/O 口配置小工具(ISP), 注意除P3.0和P3.1外,IO口上电后的状态均为高阻状态;
IO口复用功能:功能引脚切换
P0口 数据总线(D7~D0)、地址总线低8位(A7~A0),ADC输入、串口3、串口4、PWM输出控制
P1口 ADC输入、串口3等
P2口 地址总线高8位(A7~A0)、SPI 、I2C、PWM
P3口
P4口 读写控制信号等
P5口
通过设置相关的特殊功能及粗气实现的。(isp高级配置小工具)
IO口使用: 上拉电阻连接,尽量采用灌电流不用拉电流,注意姚评估电流、上拉电阻选择,典型的三极管控制电路(控三极管、控达林顿管、控场效应管),IO外部状态的输入--加延时
单片机典型应用系统:非总线扩展方式,总线扩展方式(8位数据总线P0,16位地址总线P2和P0口构成,P4.2 WR / RD P??)
汇编语言程序设计
有助于原理理解,操作系统移植过程中用到少许,如果不学汇编、今后没地方学了,老师教的;
(通过环境去学)
1、伪指令程序放在哪个地方,编译后不产生目标程序 程序员把程序、子程序或数据块存在在存储器指定位置
设置起始地址ORG(ORIGIN) ORG addr16
例 ORG 2000H MOV A,20H //若在源程序开始不放ORG指令,则从0000H开始
2、DB定义字节(Define Byte), 存入从标号开始的连续单元
例 HERE: DB 84H
DB 43H
例 ORG: 1000H
SEG: DB 23h, 'MCS-51'
3、定义自 word DW
4、为标号赋值EQU 将语句操作数的值赋予本语句标号,等值指令例 BLK EQU 10000H
5、DATA指令 BUFFER DATA 40H 一个内部RAM地址赋给指定的符号名
6、XDATA
7、定义位BIT
8、文件包含INCLUDE $INCLUDE(STC8H.INC) SFR的名称就可以用了
9、源程序结束 END
MSC51汇编语言项目代码框架
汇编语言的调试: .asm
stc8h 转到 stc32 系列
头文件
######################################################
本帖最后由 大亮 于 2023-9-9 05:42 编辑
《STC最新8051单片机原理及应用--STC8H8K64U》(陈教授 8月7日) -- 学习笔记
汇编语言
$INCLUDE(文件名) $NOMOD51(不链接汇编器传统8051头文件) $INCLUDE(STC8H.H)
#######^伪指令^###########################################
机器语言-->二进制数表示的指令-->CPU直接识别和执行的程序形式 例:24 8B
引入助记符,汇编语言的指令 :操作码和操作数组成 操作码用预定义的缩写英文,助记符
ADD A, #8BH ---> 24H 8BH
MOV A, #76H ----> 74H 76H
8051内核指令系统常用操作码:
MOV MOVX MOVC/ ADD SUBB MUL DIV/ AJMP(SJMP LJMP) JZ JC JB (JNC JNB JNZ) ACALL (LCALL) RET CJNE/ ANL ORL XRL
操作数: 操作对象 MOV A, #ABH --->MOV A, #0ABH (前导零,汇编器用)
汇编语言一般格式:: 【标号:】 操作码助记符 【第一操作数】【,第二操作数】【,第三操作数】【;注释】
操作数:例: (分号注释) (KEIL中C的注释方法也可识别)
RETI ;无操作数
CPL A ;一个操作数
ADD A,#56H ;两个操作数
CJNE R2,#60H,LOOP ;三个操作数
指令代码!!!!!
8051指令的常用符号及含义 ~~~~~~~
寻址方式:得到操作数所在单元地址的方法-->寻址方式
1、立即寻址 ~~立即数
2、寄存器寻址 ~~ INC R5
3、直接寻址~~直接操作操作数的地址 ~~ MOV A,45H
4、寄存器间接寻址 ~~ 操作数的地址 ~~MOV A,@R0 MOVX @DPTR,A
5、变址寻址~~基址加偏移量~~MOVC A, @A+PC ~~A 变址存储
6、相对地址 ~~ JC 80H
7、位寻址 ~~位操作
字节地址,位地址
《STC8H芯片文档》中有汇编详解部分!!!!!
高校教学方式优化,实验室和教室结合,理论马上实践,学习指令系统
数据传送类指令: 数据传送、数据交换、堆栈操作
MOV <目的字节>,<源字节>
MOVX
MOVC
数据交换指令:字节交换指令 XCH, 半字节交换指令XCHD ~~X CHANGED
堆栈操作指令: 内部RAM一段区域 ~~LIFO ~~当前栈顶地址用堆栈指针寄存器SP值表示 ~~SP始终指向栈顶
保护现场,压栈、出栈
PUSH ACC
PUSH PSW
POP PSW
POP ACC
逻辑操作指令: 24条(后面再仔细看一下)
算数运算类指令:
######################################################################
本帖最后由 大亮 于 2023-9-9 05:43 编辑
《STC最新8051单片机原理及应用--STC8H8K64U》--8月9日 --学习笔记
单片机从中小学抓起,“玩”起来,智能车,C语言,中小学依葫芦画瓢
汇编语言指令系统 看教材、看手册。技术性企业家。思考角度:如果我是初学者,我应该怎么样。
位操作指令:位传送、为状态控制、位逻辑操作、位条件转移 ,17条 (把指令表打印出来)
MOV CLR CPL SETB ANL ORL JC JNC JB JNB JBC
例 片内RAM中(20H)= 79H, MOV C,07H ;07H是位地址,即字节地址20H的第7位,将使(C) = 0 ()--》取内容
跳转,rel位置用标号地址,程序可读性好、偏移量汇编器来算
控制转移类指令: 控制程序走向、子程序调用和返回指令
LJMP AJMP SJMP JMP JZ JNZ(判0转移) CJNE(比较转移) DJNZ(循环转移) LCALL ACALL RET RETI NOP
各循环流程图
例,实现延时
典型例子,Keil实操,指令组合、实现功能,汇编语言怎么实现:
传感器 + 单片机电力+ 单片机 赋能
1、汇编程序设计的步骤和框架: 0,布电路板1、先正确性,再尽可能优化性能等; 设计有规范(华为); 分析课题,确定算法和思路,画出流程图、根据算法分配资源(列个表),根据流程图编程序.asm(汇编语言开发效率低)、调试,确定源程序(通过软件模式--逻辑,在线调试--硬件仿真调试,仿真器!!),‘从实践到实际’,模块化的程序设计方法
2、框架:单片机的知识、 不需要背、不需要记、程序流程图:分支、查表、循坏、定点数、数据排序
######################################################################################################################
本帖最后由 大亮 于 2023-9-10 16:23 编辑
STC最新8051单片机原理及应用--STC8H8K64U》(8月14日)--课堂笔记
C51对ANSI C的扩展:关键字: __at__ sbit sfr bit sfr16 idata bdata xdata pdata data code alien small compact large using reentrant interrupt __task__
数据类型:
特殊功能寄存器的定义,头文件
程序存储器 code不变的,表格常数,存储code区,程序存储区,节省内部RAM, unsigned char code led_buf = {};
内部RAM:
data 直接寻址区 内部RAM低128字节,地址范围00H~7FH,声明的变量
idata 间接寻址区 整个RAM, 256B , 00H~FFH
bdata 可位寻址区,20H~2FH
外部数据存储器:xdata 0000H~0FFFFH 64k unsigned char xdata arr;
Keil C51 指针:一般指针 存储器指针
unsigned char xdata *pt;
unsigned charxdata * data pt; //pt被保存在内部RAM中
unsigned char xdata * xdata pt;//pt被保存在外部RAM中
volatile-- 不要进行优化
函数:
void UART1_ISR (void) interrput 4
{
}
运算:
运用正逻辑代替反逻辑
程序框架:
例: FLASH 作为EEPROM ,0x0400单元 (芯片手册第18章 EEPROM访问,要看手册,相关寄存器操作, IAP!!!)
flash的操作
本帖最后由 大亮 于 2023-9-10 16:22 编辑
2023年8月16日 《STC8H8K64U教学》 学习笔记
中断、中断源、 中断服务、 中断响应、 中断返回、优先级别、中断嵌套、(没有操作系统的MCU)
计算机的技术 改善CPU浪费 计算机在执行程序的过程中,当出现了某些异常事件或某种请求,CPU暂时中止正在执行的程序(PUSH),转而区执行对异常事件或某种请求的服务程序。当服务完毕后,CPU再回到被暂时中止的程序继续执行(RETI)。
中断由硬件触发!!!8051响应中断,LCALL ,当前正在执行的指令,DMA内存直通,由挂起状态
中断优势: 速度、处理随机参数和信息,处理故障能力
中断允许或禁止(使能)
保护现场和恢复现场 (功能) 堆栈操作 寄存器的值
堆栈一口井 SP始终指向栈顶 低地址-高地址 后进先出
中断请求标志应该撤出返回主程序之前: 自动撤除、指令撤除
STC8H8K64U的中断资源:44 个
INT0~INT4 T0~T4 UART1~UART4 SPII2C USBADC LVD CMP PWMA PWMB P0~P7 DMA RTC LCM
中断源:中断请求 中断允许控制 中断优先级别
中断源及控制 : 中断查询次序
中断标志位: 所有的外部中断、所有的定时器中断,自动清零; 串口中断不能自动清零 SCON 98H TI=0; RI=0;
中断的开放与禁止:IE 0A8H E-->ENABLEP--> Priority
中断响应的条件和过程: 中断响应周期、 有请求-->IE相应置位--> CPU中断开放EA=1-->LCALL-->点地址push堆栈-->中断服务程序入口地址送入程序计数器PC-->程序转向相应中断程序
"自己测一下,自己亲自测过对问题比较清楚"
中断服务: 中断服务入口地址开始执行,直到RETI。 保护现场、中断服务、恢复现场、中断返回(基于汇编语言,C编译器搞定) 中断请求的撤除、自动、手动
//C描述
#include "stc8h.h"
void INT0_ISR(void);
void main(void)
{
P4M1 = 0XFF;
P4M0 = 0XFF;
P6M1 = 0;
P6M0 = 0;
P3M1 = 0X50;
P3M0 = 0X50; //P3.4 P3.6 开漏
IT0 =1;
EX0 = 1;
EA =1;
P40=0;
P60=1;
while(1);
}
void INT0_ISR(void) interrupt0
{
P60 = ~P60;
}
//汇编描述
$INCLUDE(STC8H.INC)
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0_ISR
ORG 0200H
MAIN:
MOV SP,#80H
MOV P4M1,#0FFH
MOV P4M0,#0FFH
MOV P6M1,#0
MOV P6M0, #0
MOV P3M1,#50H
MOV P3M0, #50H
SETB IT0
SETB EX0
SETB EA
CLR p4.0
SETB P6.0
SJMP $
INT0_ISR:
CPL P6.0
RETI
END
本帖最后由 大亮 于 2023-9-9 05:31 编辑
################################9月5日################################################
类型限定符:
const (constant)声明的变量不能在程序中赋值,定义何访问常数且不能更改的对象;const unsigned short xdata am={}; cosnt unsigned short code
const char mask[] = {}
unsigned char *p = mask;
*p = 'a'//不报错但无效果
const char *cp = mask;
*cp = 'a' //不符合逻辑
volatile 易失性类型限定符用于限制编译器对对象值的假定,引入volatile关键字来告诉编译器不要优化限定对象,深入理解程序运行的本质;
void main()
{
volatile char edata a = 100,b =-90, c; //edata空间存放 Option --》Target--》Memory
volatile int edata d=10000, e, f;
volitale long int edata
}
~~~~~~~~~~~~~~~~
################################9月6日###################################################
非电信号 --> 传感器 --> 电信号 -->信号调理(放大/降压)-->ADC -->数字量 ---单片机---具体处理--送通信或送显示
模拟电信号 --------------------------->信号调理(放大/降压)-->ADC -->数字量---单片机-- 具体处理--DAC--模拟量放大输出等 --调速等
开关量输入输出
顶级DAC--播放器
传感器: 非电量--电信号 , 传感器、采样点、放大器、抗干扰、传输、电源, 电信号:连续量、离散量、模拟量、开关量、脉冲量,,,仪器仪表
模数转换器的工作原理和性能指标:逐次逼近式、双斜率积分、等
逐次逼近: 假设数据送DA转换成VC与输入VX进行比较,再根据比较情况修正(过秤,哪个砝码保留、哪个砝码不合适、最后平衡点)
工作过程: SAR寄存器,最高位置1,其余0,DA转换,比较器、一直看到最低位,数字量读出来
外围器件,ADC 性能指标 分辨率
~~~~~~~~~~
本帖最后由 大亮 于 2023-9-10 16:24 编辑
2023/08/21 STC8H8K64U教学 听课笔记
定时器计数器 实际项目一定会用
加1计数器 脉冲 不分频--精度更高
C/T = 0 OSC脉冲/分频 定时器; C/T = 1 Tx端 计数器
··
T0 T1 : 工作模式 TMOD 89H 高半字节T1 低半字节T0模式设定问题~~
T2 工作模式: AUXR 8EH 固定为16位自动重载
相关寄存器:TMOD TCON AUXR INTCLKO T3T4M
会查手册、会看教材
TMOD; C/T M0 M1
TCON ; TF1 TF0 TR1 TR0
AUXR ;SPEED
INTCLKO;
T4T3M; T4/ T3
定时器的重新装载寄存器
实例:
定时器的最大定时能力 :11.0592MHZ 12分频 1个计数周期 1微妙
定时器定时量程的扩展:软件扩展方法、硬件扩展方法、RTC定时、串联T0、1、2、3、4;
定时器应用: 可编程的外设,,,第一步初始化、寄存器写入;第二步,中断函数设计
1、设置工作方式,将控制字写入方式寄存器 TMOD C/T AUXRT4T3M
2、把初值装入TLn、THn寄存器
3、职位TRn以启动定时计数
4、置位ETn允许定时计数中断
5、置位EA使CPU开中断
清零清的要彻底 TF0= 0
选择定时器T0工作方式: 软件启动(TR0)、定时方式(C/T=0)、16位定时器(M1M0 = 00)、方式字00H (tmod)
T0 装入初值: 4C 00 H高八位 第八位
TIMEROINIT:
//汇编实现
$INCLUDE (STC8H.H)
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0_ISR
ORG 0200H
MAIN:
MOV SP,#80H
MOV P4M1,#0FFH
MOV P4M0,#0FFH
MOV P6M1,#0
MOV P6M0,#0
CLR P40
LCALLTIMER0_INIT
MOV A,#10
SETB ET0
SETB EA
TIMER0_INIT:
ANL AUXR,#07FH
ANL TMOD,#0F0H
MOV TL0,#000H
MOV TH0,#04CH
CLR TF0
SETB TR0
RETI
T0_ISR:
DEC A
JNZ EXIT
CPL P60
MOV A,#10
EXIT:RETI
END
//C
#include "stc8h.h"
unsigned char t0cnt;
void Timer0_Init(void);
void main(void)
{
P4M1=0XFF;
P4M1=0XFF;
P6M1=0X0;
P6M0=0X0;
P40=0;
Timer0_Init();
t0cnt =10;
ET0=1;
EA=1;
while(1);
}
void Timer0_Init(void)//T0初始化函数
{
AUXR $= 0X7F;
TMOD$=0XF0;
TL0=0X00;
TH0=0X4C;
TF0=0;
TR0=1;
}
void T0_ISR(void) interrupt 1//T0中断服务函数
{
t0cent--;
if(t0cent==0)
{
p60= ~p60;
t0cent=10;
}
定时器初始化代码,ISP中自动生成
不能位寻址的寄存器字节操作方式: ASM MOV ANL ORL C : = &=|=
2023/08/23,STC8H8K64U教学 ,串口,学习笔记
数据交换、串行通信、计算机测控、物联网、疯狂的小车
STC8H8K64U: 4*UART /1* SPI /1* I2C/ 1*USB
数据通信:信——>数字量 并行通信(一次通信多个位)、串行通信(分组、异步),实体间注意共地(地飘)
RS232 RS485
异步通信的起始位和停止位 串行通信 显性拉低 传统串行异步通信从地位开始发送
双方(CPU、外设)要设定好字符的编码格式、奇偶检验格式、起始位和停止位, 还有波特率常见9.6K (19.2k lin) \
单工、半双工、全双工 多终端通信
串入并出---》数据总线---》cpu
外部时钟 进行 同步每一个位再细分 采用多次,K= 16或64 采样多次!!始终上升沿开始(足够多的上升下降沿):每一个位提高采样准确率的方案!
STC8H8K64U 串口相关寄存器:
沿用并扩展15系列串口每个串口由2个数据缓冲器、1个移位寄存器、1个串行控制器存期、1个比特率发生器
接收缓冲器和发送缓冲器共用一个地址好,但物理上是完全独立的
位号!
多机通信过程:
1、主从初始化为模式2或3 置SM2=1,允许中断
2、主机置TB8=1,发送要寻址的从机地址
3、所有从机均收到,进行地址比较
4、被寻址从机,置SM2=0,向主机返回地址,供主机核对
5、主机核对后,发送发送指令
6、从从通信需要主机中介
7、本次通信结束后,主从重置SM2=1,主机继续调度
应用层协议RS485等
单机通信
RIPTI:
PUSH PSW
PUSH ACC
SETB PSW.4
SETB PSW.3
CLR TI
MOV A,@R0
MOV C,P
MOV TB8,C ;
MOV SBUF,A
INC R0
POP ACC
POP PWS
RETI
从机寻址控制寄存器LSADDR 通过SADDEN 掩码
数据缓冲器 SBUFRXD---》移位寄存器--》 SBUF