lucky
发表于 2024-7-5 16:39:31
第七讲还是讲汇编。
助记符语言:如MOV、ADD、ANL等,这些指令使得对数据的操作更加直观易懂。例如,MOV用于数据传送,ADD用于加法运算,ANL用于逻辑与运算。
操作码:根据功能不同,操作码被分为数据传送类(如MOV)、数据操作类(如ADD)、程序控制类(如AJMP)、逻辑操作类(如ANL)等。每种类型的操作码都对应着特定的操作对象和逻辑处理流程。
操作数可以是数据或地址,且数据只能是整数,不能是小数。
十六进制数据若以字母开头,需加前导0以区分。
立即数前加#标识,直接地址则不加。
指令格式包括标号、操作码助记符、操作数以及注释。
指令长度可能是单字节、双字节或三字节,具体取决于操作码和操作数的复杂性。
指令中的符号约定帮助理解指令的具体含义和操作对象。
立即寻址:操作数直接包含在指令中,作为立即数使用。
寄存器寻址:通过指定寄存器的内容作为操作数,对特定寄存器(如ACC、B、DPTR等)的寻址已隐含在操作码中。
直接寻址:指令中直接包含操作数的地址,适用于SFR、内部数据RAM和位寻址空间。
寄存器间接寻址:通过寄存器的内容作为操作数的地址,前面加@表示间接寻址。
变址寻址:通过偏移量寄存器和基址寄存器相加得到操作数地址。
相对寻址:主要用于跳转指令,通过偏移量确定跳转目标地址,偏移量有正负号,范围在-128到+127之间。
位寻址:直接对位地址空间中的每一位进行操作,适用于位运算和位传送。
lucky
发表于 2024-7-5 17:25:52
第八讲,讲了汇编语言中实现数据传送、逻辑运算、算术运算。
我深刻体会到了汇编语言在底层数据处理和硬件控制方面的强大能力。数据传送类指令作为汇编语言的基础,特别是间接寻址和变址寻址的概念,极大地拓展了数据处理和访问的范围。
lucky
发表于 2024-7-5 19:08:31
第九讲是还是讲解汇编指令,讲的是位操作和控制转移。
上学的时候听着是懵懂,现在跟着视频看一遍,相当于又学一遍,感觉命令这么多,还是记不住。{:4_184:}{:4_184:}{:4_184:}
1. 位数据传送指令
MOV C, bit:将指定位(bit)的值传送到进位标志(C)中。
MOV bit, C:将进位标志(C)的值传送到指定位(bit)中。
2. 位状态控制指令
CLR bit/C:将指定位(bit)或进位标志(C)清零。
CPL bit/C:对指定位(bit)或进位标志(C)进行取反操作。
SETB bit/C:将指定位(bit)或进位标志(C)置位为1。
3. 位逻辑操作
ANL C, bit//bit:将进位标志(C)与指定位(bit)进行逻辑与操作,结果存回C。
ANL C, /bit:将进位标志(C)与指定位(bit)的取反进行逻辑与操作,结果存回C。
ORL C, bit//bit:将进位标志(C)与指定位(bit)进行逻辑或操作,结果存回C。
ORL C, /bit:将进位标志(C)与指定位(bit)的取反进行逻辑或操作,结果存回C。
4. 位条件转移
JC rel:若进位标志(CY)为1,则程序转移到相对偏移量(rel)指定的地址。
JNC rel:若进位标志(CY)为0,则程序转移到相对偏移量(rel)指定的地址。
JB bit, rel:若指定位(bit)为1,则程序转移到相对偏移量(rel)指定的地址。
JNB bit, rel:若指定位(bit)为0,则程序转移到相对偏移量(rel)指定的地址。
JBC bit, rel:若指定位(bit)为1,则程序转移到相对偏移量(rel)指定的地址,并将该位清零。
MOV C 07H :意思是把字节地址的第七位给C,视频中第七位是0,也就是(c=0)
MOV A 07H :是把07H这个单元的内容给A,也就是将立即数07H加载到累加器A中。
lucky
发表于 2024-7-5 20:29:28
第十讲是汇编语言程序设计的一般步骤和基本框架。
这一讲中让我收获更多的是老师讲的一些插曲。比如硬件仿真这一块,我使用的时候也感觉十分方便,很佩服这些老师和大佬们的执行力和高瞻远瞩,这个功能真的特别特别好用,respect!
lucky
发表于 2024-7-5 21:44:03
第十一讲 是C语言的一些基础知识。
终于到C语言相关的了,感觉收益颇丰,老师讲得小细节很多。
指针这一块真的很有用,当时学C语言,老师在指针这一块讲得很含糊,起初看别人程序也很费力。
以下声明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型整数
然后中断那一块,使用define宏定义,非常常用。我也是在看别人程序之后才会用这个小细节,效率很高。
逻辑运算符这一块,老师说到判断的时候用相反的条件,有时候很更加顺眼一些。这个也是多写代码自己体会到的,
如果早看老师的教程,就能少走一些弯路。
lucky
发表于 2024-7-5 22:45:12
第十二讲用C语言讲了两个案例,一个是流水灯,一个是将单片机的flash作为eeprom。
STC8H8K64U单片机内部集成了EEPROM的存储空间,绝大一部分用作存储用户程序外其中一部分可以划分出来用于存储用户数据,而传统的c51单片机用户数据的存储必须外挂24CXX等芯片实现。
这个是我第一次了解,当时用STC16F 是外接的AT24C02作为EEPROM,这个等我手上有实物的时候一样要好好研究研究。
lucky
发表于 2024-7-6 12:28:17
第十三讲是中断的原理和概念,
中断中比较常用的是
外部中断(INT0~INT4)
定时器中断(T0~T4)
异步串口中断(UART1~UART4)
串行外设接口中断(SPI)
配置中断的时候需要设置中断优先级,陈老师讲得这个用DMA的实例我挺有体会,我之前没有太关心中断优先级,我帮室友做一个课设,是直接用ADC采集分压电路的值获取温度,这一部分采集程序是放在定时器中断里的,然后另一个同学建议我用DMA,于是我就学习了一下DMA然后用DMA去处理ADC。
lucky
发表于 2024-7-6 19:33:10
第十四讲还是讲中断,
这个视频真的很棒!
这个按键电路之前就困扰我。我的习惯就是单片机的io口直接放在按键和10K限流电阻之间,没有加300欧姆的电阻,然后我要画核心板的时候,看STC手册的官方参考电路里相对于我多了个300欧姆的电阻,我也不清楚为什么要加这个(主要还是我对单片机的原理认识的不够透彻)
经过陈老师和姚总的讲解,恍然大明白!我也算是有经验的工程师了{:4_165:}
lucky
发表于 2024-7-6 20:41:48
第十五讲从原理上讲定时器,讲了T0和T1的工作模式和T2的工作模式,然后讲解了相关的特殊功能寄存器
lucky
发表于 2024-7-6 22:08:15
第十六讲是定时器应用
在晶振频率位11.0592MHz的情况下,12分频,
对于16位的定时器,最大定时能力约为71毫秒
对于24位定时器,最大定时能力为18秒
定时器定时量程拓展方法
我当年做智能车的时候就是用的这个软件拓展方法。当时知识学的浅,没意识到单个定时器有最大量程这个问题,但是看别人的程序,用到了这个软件拓展方法,于是就也用了,就每1ms开始软件计数。现在终于明白了。
姚总说的多个定时器类似串联也能增加量程,瞬间感觉又学到新的思路,好牛!后半个小时是姚总的讲解,特别喜欢听姚总的补充讲解,
STC的宣传页和手册给我一种印象,就是内容特别密集。宣传图一张图片密密麻麻好多字,像我这种学生菜鸟,有的文字知道是什么意思,但是不知道要表达什么含义,然后姚总一讲,然后我就知道文字存在的意义。就比如芯片的价格是1.4,然后上STC可以不用接外部晶振可以省三四毛,这样一联系,就感到STC好牛逼。