单片机

详解51系列单片机引脚及功能

早过忘川 提交于 2020-01-06 21:45:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 51系列单片机有各种封装形式,这里以40引脚双列直插DIP形式的封装来进行介绍,如图1.1所示。其中正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。 图1.1 8051双列直插式的引脚配置 有些新型的单片机在引脚数量以及功能上都略有区别,但都是基于51系列单片机内核。这里介绍的内容同样适用于新型的单片机。下面介绍51系列单片机的引脚功能,这些是学习单片机程序设计必须要了解和掌握的基础知识。 ❑电源引脚:主要负责单片机的供电,有两根引脚。VCC(Pin40)为正电源端,接5.0V电压;GND(Pin20)为接地端。 ❑外接晶振或外部振荡器引脚:主要负责为单片机的运行提供时钟振荡器,主要有两根引脚。其中,XTAL1(Pin19)为时钟XTAL1脚,片内振荡电路的输入端;XTAL2(Pin18)为时钟XTAL2脚,片内振荡电路的输出端。 8051单片机的时钟振荡器有两种工作方式。一种是片内时钟振荡方式,在18和19脚外接石英晶体和振荡电容,振荡电容的值一般取10~30pF。另外一种是外部时钟方式,由外部直接提供时钟源。 ❑P0口:即P0.0~P0.7(Pin39~Pin32),输入输出脚,可用于8位并行I/O口或分时复用为地址和数据总线。 P0定义为I/O口时

单片机学习:单片机独立按键和矩阵键盘概念及原理

泪湿孤枕 提交于 2020-01-06 21:41:43
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1.按键分类与输入原理 按键按照结构原理科分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关灯;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。 在 单片机 应用系统中,除了复位按键有专门的复位 电路 及专一的复位功能外,其他按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入时与软件结构密切相关的过程。 对于一组键或一个键盘,总有一个接口电路与CPU相连。CPU可以采用查询或中断方式了解有无将按键输入,并检查是哪一个按键按下,将该键号送人累加器,然后通过跳转指令转入执行该键的功能程序,执行完成后再返回主程序。 2.按键结构与特点 微机键盘通常使用机械触点式按键开关,其主要功能式把机械上的通断转换为电气上的逻辑关系。也就是说,它能提供标准的TTL逻辑电平,以便于通用数字系统的逻辑电平相容。机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定的时间触点机械抖动,然后其触点才稳定下来。其抖动过程如下图1所示,抖动时间的长短与开关的机械特性有关,一般为5-10ms。在触点抖动期间检测按键的通与断,可能导致判断出错

单片机内部结构分析

╄→尐↘猪︶ㄣ 提交于 2020-01-06 21:03:23
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我们已知单片机的内部有ROM、有RAM、有并行I/O口,那么,除了这些东西之外,单片机内部究竟还有些什么,这些个零碎的东西怎么连在一起的,让我们来对单片机内部作一个完整的分析吧! 看图(1)(本图太大,请大家找本书看吧,一般讲单片机的书,随便哪本都有)。从图中我们可以看出,在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在一个51单片机的内部包含了这么多的东西。 对上面的图进行进一步的分析,我们已知,对并行I/O口的读写只要将数据送入到相应I/O口的锁存器就可以了,那么对于定时/计数器,串行I/O口等怎么用呢?在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。事实上,我们已接触过P1这个特殊功能寄存器了,还有哪些呢?看表1 表1 下面,我们介绍一下几个常用的SFR,看图2。 图2 ACC:累加器,通常用A表示。这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊

《51单片机基础》:定时器

蹲街弑〆低调 提交于 2020-01-06 13:19:29
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 咱们今天就聊一聊那些年单片机关于定时器与中断方面的事儿,其实定时器实质上就是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是说当每来一个脉冲,计数器就会自动加1,如果当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出就会发出中断请求。 再讲讲中断吧,有不少单片机初学者对中断有些懵,不知道它的用法,讲个生活例子就是比如你在家里看电视,突然门铃响啦此时你的第一选择就是去开门,打断你做原来事情让你优先去做开门这件事,这就是所谓中断。 当你这件事情结束之后,你又可以继续去看电视。关于单片机中断优先级的问题,小伙伴一定要勤于动手,勤于动脑的查找资料。所以接下来写一个关于定时器与中断的实验,将数码管上电之后8位都显示6,然后定个时间就两秒后全显示2,因为一些原因只能给小伙伴们截两张图片,不过有兴趣的小伙伴可以验证代码的正确性,都这样说啦,代码都是作者亲自验证过的(哈哈哈),行,接下来直接给小伙伴们上图 主函数部分: 定时器主要代码: 实验现象: 哈哈,今天的实验就分享到这里,也希望小伙伴们能够喜欢、点赞。 来源: oschina 链接: https://my.oschina.net/u/4228486/blog/3151214

51单片机---点亮一个LED灯

好久不见. 提交于 2020-01-05 02:07:19
1 程序源码 #include <REGX52.H> `包含51单片机的头文件` sbit led = P0^0; int main(void) { while(1) { led = 1; } return 0; } 1.1 C语言常用的预处理命令 typedef的使用 typedef unsigned int u16; typedef unsigned char u8;`后面需要加上分号` 重新定义一些常用的关键词,可以增强程序的可移植性,因为在不同的编译软件上面,C语言的数据类型的关键词的位宽是不一样的. 1.2 while()循环函数 int i;`大约10us` while(i<10) { i++; } while语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句 1.3 delay()延时函数 单片机中的延时函数,时间不精确 typedef unsigned int u16; void delay(u16 i) { while(i--); } 来源: https://www.cnblogs.com/lixiaomingr/p/10099351.html

51单片机基础学习(1)点亮一个LED灯

我是研究僧i 提交于 2020-01-05 01:58:57
本来以为不会再回到博客园了,这里应该会变成尘封之地……作为工科狗我还是太天真了。再次登陆不是那么顺畅(差点忘了用户名把自己给坑了),但惊讶地发现三年前上传的零星代码们居然还有几个人来看过,看来被OI荼毒的人类还在世界上各个角落挣扎着。当年看了那么多大牛的题解,最终以自己绵薄之力贡献出来的只是沧海一粟,给其他人提供不了多少便利,倒是从一种看起来冷冰冰的角度真实记录了自己在一段特殊时期的生活,其中跌宕起伏的心情只有经历过的人能读到。 最近开始接触单片机之后,能明显感觉到单片机的资料和OI的资料不是一个风格,原因大概在于单片机面向的人群——不管从社会阶层还是年龄来说跨度都非常大,学习的目的性也很强,这导致大家在记录自己资料时心情一般都比较浮躁。嗯,看惯了程序员们清淡口味的笔记之后,表示很不开心,于是我就回到了博客园。 首先,在使用单片机以及单片机开发板的时候,要明白这是一堆非常不可靠的电路……然后就可以入坑了。 我用的开发板型号是HC6800-EM3 V2.0,感觉非常坑,有时间有兴趣的还是买元件自己焊板子吧。 IDE是keil4,普通的C语言环境。 【点亮LED小灯】 #include <reg52.h> sbit led=P0^0; void main() { while(1) { led=0; } } 这个程序非常简单,但是对于完全没有接触过单片机的人来说还是有很多注意事项的。

单片机 压缩 CRC

孤街浪徒 提交于 2020-01-01 05:07:51
常用的2个压缩,rar zip,但是MCU好像都支持的不好,打开WINRAR.EXE文件,还可以看到原文件CRC32值, 以后验证文件的CRC校验的话,用RAR来看,还真是个简单的办法。 但是单片机要怎么压缩呢,quicklz fastlz minilzo, 感觉都不是很知名,想找个在PC上运行的客户端都找不到, RTT下这个打包器,支持quicklz \ fastlz\ gzip三种压缩算法,RTT是在单片机上运行的,所以它选择的这3种算法前2种都比较容易实现,RTT的软件仓库中也月相关的源源代码。 但GZIP没有找到源代码,百度了一下,发现GZIP可能有些难度,RTT仓库里没有这种压缩的源程序,据说GZIP实现要耗费的资源多些,尤其是RAM,,这个我没研究过,我的目的不是要实现多么高的压缩率,所以暂时挑过。 我要实现的是bin文件的完整性,及合适的压缩率,及容易实现的方法。 https://mp.weixin.qq.com/s?__biz=MzA3MTk0OTk2NQ==&mid=2653844594&idx=1&sn=9e1fddc92055c27a1e8956d39e470052&chksm=84ff1f90b388968606d08373ef394d454e702a1eb84aa1e5adef2c64dbc541eedf6e6d6d72b5&scene=0&xtrack

单片机实现直流电机控制的应用实例

蹲街弑〆低调 提交于 2019-12-30 10:07:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 直流电机的单向控制 直流电机的单向控制较为简单,可以通过开关的通断来接通和断开直流电源,实现电机的启动与停止控制,开关控制直流电机如图9-2所示。也可以通过三极管、场效应管、继电器等对直流电机的通断进行控制,采用三极管控制直流电机的电路如图9-3所示,图中的二极管为续流二极管,起到保护三极管的作用。 图9-2 开关控制直流电机电路图 图9-3 三极管控制直流电机电路图 提示 单片机控制直流电机的实际应用电路中,为了降低电机运行对单片机电源的影响,往往会采用光电耦合器件进行光电隔离。 【例9-1】 通过按键实现直流电机的停启控制 按键控制直流电机停启的电路如图9-4所示,通过P3.6口按键触发启动直流电机,P3.7口的按键触发停止直流电机的运行。由图9-4可知,当P1.0输出高电平“1”时,NPN型三极管导通,直流电机得电转动;当P1.0输出低电平“0”时,NPN型三极管截止,直流电机停止转动。 图9-4 按键控制直流电机停启电路图 C51程序如下: 直流电机的双向控制 直流电机的双向控制原理就是使加在直流电机两端的电源电压的极性可以实现切换。通常采用H桥电路进行控制。H桥控制的示意如图9-5所示,有1~4四个开关的不同状态实现电机的停止、正转、反转控制。 当四个开关均断开时,直流电机不得电,处于停止状态。

接口与总线 考点整理

删除回忆录丶 提交于 2019-12-29 23:11:06
说明 以下内容为个人整理,答案也是个人回答,不一定对,所以你对答案有任何问题,都欢迎与我讨论。 Q01:51单片机P0、P1、P2、P3口功能作用? 答: P0可做地址口的低8位也可以做数据口和I/O口 P1可做普通的I/O口 P2除了做I/O口,也是作为地址口的高8位(总共16位) P3 既可以是普通IO口,也可以是外部中断、定时、外部输入的端口 Q02:当串口发送一个数据或接收数据时,哪两个位会置位? 答: 接收数据时,RI 会置位 发送数据时,TI 会置位 Q03:81单片机的累加器是什么? 答: ACC Q04:当晶振频率为12MHz,定时器的频率为多少? 答: 频率为1Mhz 说明: 机器频率 = 晶振频率/12 Q05:LED的显示分为几种? 答: 两种,动态扫描和静态扫描 说明: 动态扫描中LED的调度是放在定时器中 Q06:51单片机内存划分 答: 低128个字节 从00H~1FH(32字节):寄存器区,四组寄存器区,一组有8个寄存器 从20H~2FH(16字节 128位):位寻址区 剩下:普通内存 高128个字节 特殊功能寄存器 Q07:ex0、ex1、et0的含义 答: ex0 = 1; //允许外部中断0 ex1 = 1; //允许外部中断1 et0 = 1; //允许定时器0中断 1 2 3 说明: 在这里插入图片描述 上图为IE(中断允许寄存器) EA