51学习日记(简单知识与学习过程的记录)

  • 2018.9.30

1602液晶根据最高的1的位置来区分不同指令,例如工作方式设置指令1在DB5,显示开关控制指令1在DB3。

  • 2018.9.29

intrinsic意为本质的,固有的;intrins.h包含了51常用的一些库函数,包括_nop_,_cror_等等。

reg52.h包含了80c52型号的寄存器的定义,52.h比51.h多了T2CON的定义等

limits.h规定了部分CPU的机器字长。

以上文件在编译器安装时,存在了安装目录下。

 

取模和取余在除数与被除数符号相同时结果相同,异符号时结果不同,因为取模的舍入方向是 -∞,取余的舍入方向是0;例如 -7/4,取余时 -7 = -1*4 - 3,余数为 -3,因为 -1.xx ≈ -1;取模时 -7 = -2*4+1,因为 -1.xx ≈-2;另外各个环境下%运算符的含义不同,比如c/c++,java 为取余,而python则为取模。

 

STC89C52是不支持仿真的,点击debug会报错。想要查看生成的汇编代码,需打开Target Options,将debug选项中左侧的use simulator选中,在debug模式下才能查看C语言代码生成的汇编。

 

扫描二维码关注公众号,回复: 3423757 查看本文章

所谓操作IO口,其实就是操作IO口的输出寄存器,所以字节的高低位顺序对应IO口的高低位。

51的4组工作寄存器,写汇编时可能需要分配,写C语言时一般不需要使用。

  • 2018.9.15

数码管扫描显示的原理:

以共阴数码管为例,使用多个数码管时,为节省硬件资源,可用一组IO口接上两个锁存器,一个用于选定某个数码管的阴极,一个用于选定要点亮的管段的阳极,用其他IO口控制锁存器的开关,于是便有了位选,段选,消隐等概念。因此会有两种情况:或者同一时刻只有一个数码管能够显示,或者所有数码管同时显示相同的数字。所以我们常让一排数码管快速依次显示,比如说每隔数毫秒切换,利用人眼视觉暂留效应,就可以达到“同时”显示一排不同数字的视觉效果(扫描)。当然,使用更多的硬件资源能够实现真正的同时显示,但这是一种浪费。

数码管的控制芯片或者电路接法可以有许多种,常用译码器或锁存器等,其驱动程序必不尽相同,故具体代码不必深究,只需理解数码管的结构,理解位选,段选,消隐等概念以及动静态显示的原理即可。诸如数码管,流水灯,点阵,矩阵键盘等,这个道理都相通,理解原理即可。

 

  • 2018.9.12

 11.0592MHZ的意义,单片机12分频的意义:

51单片机并不是固定的晶振频率为11.0592MHZ,这个晶振频率是外部给的,并不是单片机自带的。实际上,51单片机的晶振可以选择很多频率,从1MHZ到32MHZ的各种频率晶振都有。为什么很多单片机要选用11.0592MHZ呢?主要个原因是,11.0592MHZ的晶振在计算最大波特率及其误差的时候,其最大波特率达到了57600,而且误差为0,能满足绝大多数应用,其他晶振都达不到这个波特率或者误差太大。如果没有串口通信的要求,用其他晶振频率(单片机最高频率内)也没有问题。

在单片机发展的早期,工艺不足,如果所给时钟频率太高,单片机运行速度也就越快,器件的性能不够,程序很容易跑飞,非常不稳定。因此早期的单片机系列一般都有预分频的策略,将频率降下来,增加程序执行的稳定性。当然,随着制作工艺的提高,现在新的型号的单片机已经逐渐放弃预分频策略或者将分频功能设置为可选了。

T1溢出率的解释:

溢出率应该是每秒溢出的次数。12/fosc=每个机器周期时间,(12/fosc)*(256-初值)=溢出一次所需的时间,最后用1除以该数就代表每秒溢出的次数,也就是溢出率。

  • 2018.9.11

时钟周期等名词解释:

时钟周期:单片机外接的晶振的振荡周期就是时钟周期,时钟周期=振荡周期。比方说,单片机外接了一个11.0592M的晶体振荡器,那我们就说这个单片机系统的时钟周期是1/11.0592M,这里要注意11.0592M是频率,周期是频率的倒数。

机器周期:单片机执行指令所消耗的最小时间单位。我们都知道51单片机采用复杂指令集,所以有很多条指令,并且各条指令执行的时间也可能不一样,但是它们执行的时间必须是机器周期的整数倍,这就是机器周期的意义所在。8051系列单片机又在这个基础上进行细分,将一个机器周期划分为6个状态周期,也就是S1-S6,每个状态周期又由两个节拍组成,P1和P2,而P1=P2=时钟周期。这也就是经常说的8051系列单片机的的时钟频率是晶振频率的12分频,或者是1/12,所以,用12个时钟周期,作为一个机器周期,就是这个意思。现在(截至2012)新的单片机已经能做到不分频了,就是机器周期=时钟周期。

指令周期:指令周期执行某一条指令所消耗的时间,它等于机器周期的整数倍。传统的80C51单片机的指令周期大多数是单周期指令,也就是指令周期=机器周期,少部分是双周期指令。现在(截至2012)新的单片机已经能做到不分频了,并且尽量单指令周期,就是指令周期=机器周期=时钟周期。

  • 2018.9.10

51系列:

MCS-51单片机是指美国INTEL公司生产的内核兼容的一系列单片机的总称。“MCS-51”也代表这一系列单片机的内核。这一系列单片机硬件结构和指令系统一致,包括8031、8051、8751、8032、8052、8752等基本型。

8051单片机---是MCS-51系列单片机中的一个基本型,是MCS-51系列中最早期、最典型、应用最广泛的产品,所以8051单片机也就成了MCS-51系列单片机的典型代表。

51单片机是对目前所有兼容MCS-51指令系统的单片机的统称,包括INTEL MCS-51系列单片机、以及其他厂商生产的兼容MCS-51内核的增强型8051单片机。只要和MCS-51内核兼容的单片机都叫做51单片机。

Intel生产出MCS-51系列单片机以后,上世纪90年代因致力于研制和生产微机CPU,而将MCS-51核心技术授权给了其它半导体器件公司,包括Philip、Atmel、Winbond、SST、Siemens、Temic、OKI、Dalas、AMD等公司。后来,这些公司生产的单片机都普遍使用MCS-51内核,并在8051这个基本型的单片机基础上增加资源和功能改进,使其速度越来越快,功能越来越强大,片上资源越来越丰富,即所谓的“增强型51单片机”。

  • 2018.9.9

CRTIMP:C run time implement,C运行库的实现。

GCC:GNU Compiler Collection,GNU编译器套件

ANSI:AMERICAN NATIONAL STANDARDS INSTITUTE,美国国家标准学会

ASCII:American Standard Code for Information Interchange,美国信息交换标准代码

CISC:Complex Instruction Set Computer,复杂指令计算机

定时时间T = (2^N - X)12/单片机晶振频率,N为定时器使用的位数,X为初值。

STC-ISP勾选左下角的每次下载前重装目标文件,比较方便调试。

独立按键往往要延时数毫秒消除抖动干扰:if(key==0) { delayms(5); if(key==0); ... }

猜你喜欢

转载自blog.csdn.net/WangJianlin3/article/details/82893490