MCU(单片机)
文章平均质量分 68
seven-soft
十几年工作经验,软件破解、软件反编译、网络抓包;精通c、c++、java语言,熟悉eclipse、Microsoft Visual Studio、XCODE 开发环境,精通wince和Android开发。精通嵌入式CPU软件开发。
展开
-
什么是电平?
什么是电压、电流、电功率?无线电爱好者都十分清楚。而谈及“电平”能说清楚的人却不多。尽管人们经常遇到,书刊中亦多次谈起电路中的高电平、低电平、电平增益、电平衰减,就连电工必备的万用表上都有专测电平的方法和刻线,而且“dB”、“dBμ”、“dBm”的字样也常常可见。尽管如此,因“电平”本身概念抽象,更无恰当的比喻,故人们总是理解不清、记忆不深。笔者从业近40年,目前又从事电工电子教学工作,对上述现象原创 2012-05-04 13:25:15 · 519 阅读 · 1 评论 -
单片机MCS-51系列指令快速记忆法
随着微电子技术和超大规模集成电路技术的发展,单片微型计算机以其体积小、性价比高、功能强、可靠性高等独有的特点,在各个领域(如工业控制、家电产品、汽车电子、通信、智能仪器仪表)得到了广泛的应用。学习、使用单片机的人越来越多,而生产单片机的厂家很多,单片机种类繁杂,不知如何选择。据统计,八位单片机占全球单片机销量的65%。在八位单片机中,Intel公司的8051单片机内核已成为8位单片机事实上的标准。原创 2012-05-04 13:21:54 · 520 阅读 · 0 评论 -
1.1 学习什么单片机
单片机的型号那么多,如何选取一款合适的进行学习?如果身边有比较现成的学习单片机的条件,有什么条件就学习什么型号。比如,你所在的公司刚好用到某个型号单片机,那么就方便多了。开发板不用购买,直接用公司现成的板子,指导老师到处是,公司的工程师,只要你耐心虚心的不耻上问,相信他们都愿意帮你解答问题。或者你跟着学习的导师,正在使用某个型号的单片机开发产品,那么同样的道理,你也会有得天独厚的优势,直接跟着学就原创 2016-07-04 18:46:20 · 370 阅读 · 0 评论 -
1.2 如何学习单片机
前边提到过,单片机是一门实用技术,我们学习它已经不是为了应付考试了,我给大家总结了单片机的学习方法是:一个要领,四个步骤。学习单片机的要领就是:在实践中成长,In Doing We Learn!学射箭,你得去拉弓,整天只摆造型肯定不行;学游泳,你得下水扑腾,整天在岸上做模仿活动不行;学开车,你得坐车上去开,坐沙发上肯定学不会。同样的道理,学单片机,整天盯着单片机书看肯定不行,你也必原创 2016-07-04 18:47:30 · 379 阅读 · 0 评论 -
1.3 单片机学习的准备工作
1) 足够的信心、恒心和耐心有同学问过我,单片机这门技术难不难。我觉得这个问题得从两个方面去分析。首先,我们从战略上藐视它。那么多同学跟着老师学一段时间就可以做出来小车,超声波测距,甚至做出来机器人,似乎很拽的样子。那他们又不是三头六臂,我们也没有什么做不了的道理。实际上要说技术,其实就是一层窗户纸,表面看不透彻,感觉特别神秘,实际只要你稍微一努力就可以捅破它,夸张点说,单片机在逻辑上原创 2016-07-04 18:50:56 · 585 阅读 · 0 评论 -
1.4 单片机开发软件环境搭建
单片机开发,首要的两个软件一个是编程软件,一个是下载软件。编程软件我们用 Keil uVision4 的 51 版本,也叫做 Keil C51,不做过多介绍,先直接讲如何安装。1) 首先准备 Keil uVision4 安装源文件,双击安装文件,弹出安装的欢迎界面,如图 1-1所示。图1-1 Keil安装欢迎界面2) 点击“Next”按钮,弹出“License Agre原创 2016-07-04 19:54:00 · 2025 阅读 · 0 评论 -
1.5 Keil uVision4简单使用教程
首先,我们用 Keil 先打开一个现成的工程,来认识一下 Keil 软件,如图 1-7 所示。图1-7 工程文件从图 1-7 我们可以很轻松的分辨出菜单栏、工具栏、工程管理区、程序代码区和信息输出窗口。这个是 Keil4 的英文版,网上有一些汉化版本的,但不建议使用。即使你的英语不好,使用英文版本的软件也一点问题没有,刚开始大家先跟着我去使用,一共没几个单词,不需要你去翻译,用原创 2016-07-04 19:55:13 · 6240 阅读 · 0 评论 -
1.6 第一章问题汇总
很多同学经常问我一些问题,有一些很有现实或普遍意义,于是我把有代表性的直接写出来给大家参考,让大家了解这门技术,了解我们这个行业。1) 单片机学完了能做什么单片机的应用非常广泛,电子、电气、自动化、通信等领域都有大量应用,至于能做什么,得看你将来做什么工作。如同电脑一样,电脑可以用来编程、PS 图片、看电影、打游戏等等,你用电脑做什么是不一定的。但是掌握好这门技术,起码可以让你学会一种原创 2016-07-04 19:55:55 · 408 阅读 · 0 评论 -
2.1 单片机内部资源
在这里我所讲到的单片机内部资源,和传统单片机书籍中讲单片机内部结构不同。我这里讲到的内部资源,是指作为单片机用户,单片机提供给我们可使用的东西。总结起来,主要是三大资源:Flash:程序存储空间,早期单片机是 OTPROM。RAM:数据存储空间。SFR:特殊功能寄存器。1) Flash在早期的单片机中,主要是用 OTPROM(One Time Programmable Read原创 2016-07-04 19:56:48 · 638 阅读 · 0 评论 -
2.2 单片机最小系统
为什么称之为单片机最小系统呢?单片机最小系统,也叫做单片机最小应用系统,是指用最少的原件组成单片机可以工作的系统。单片机最小系统的三要素就是电源、晶振、复位电路,如图 2-1 所示。图 2-1 单片机最小系统电路这张最小系统的电路图节选自我们的 KST-51 开发板原理图,下面我们就照这张电路图来具体分析最小系统的三要素。1) 电源这个很好理解,电子设备都需要原创 2016-07-04 19:57:32 · 4888 阅读 · 0 评论 -
2.3 发光二极管(LED灯)
LED(light-emitting diode),即发光二极管,俗称 LED 小灯,它的种类很多,参数也不尽相同,我们板子上用的是普通的贴片发光二极管。这种二极管通常的正向导通电压是 1.8V到 2.2V 之间,工作电流一般在 1mA~20mA 之间。其中,当电流在 1mA~5mA 之间变化时,随着通过 LED 的电流越来越大,我们的肉眼会明显感觉到这个小灯越来越亮,而当电流从5mA~20m原创 2016-07-04 19:58:34 · 1095 阅读 · 0 评论 -
2.4 特殊功能寄存器和位定义
接下来的几节,我们会带着大家编写第一个单片机程序。在此之前,我们先来了解一些 51 单片机特有的程序语法以及 Keil 软件的基本操作步骤,请大家一定要有耐心。我们主要是用 C 语言来对单片机编程,而有的单片机有那么几条很特殊的独有的编程语句,51 单片机就有,先介绍 2 条。第一条语句是:sfr P0 = 0x80;sfr 这个关键字,是 51 单片机特有的,他的作用是原创 2016-07-04 19:59:16 · 2424 阅读 · 0 评论 -
2.5 新建一个工程
对于单片机程序来说,每个功能程序,都必须要有一个配套的工程(Project),即使是点亮 LED 这样简单的功能程序也不例外,因此我们首先要新建一个工程,打开我们的 Keil 软件后,点击:Project-->New uVision Project...然后会出现一个新建工程的界面,如图 2-8 所示。图 2-8 新建一个工程因为现在讲到了第二章,所以我们在硬盘上建立了一原创 2016-07-04 20:00:13 · 786 阅读 · 0 评论 -
2.6 第一个单片机程序
忙活了半天,准备工作做了那么多,终于要编写我们的程序代码了。如果学过 C 语言的话,你应该很轻松的跟着我的编程自己写出来,如果没学过 C 语言也没关系,你先照着我的抄,我会在合适的位置写出来对 C 语言语法的解释,这样抄几次后再看看解释,就应该很明白了,抄的时候一定要认真,尤其标点符号不可以搞错。第一个单片机程序:#include //包含特殊功能寄存器定义的头文件sbit原创 2016-07-04 20:01:07 · 564 阅读 · 0 评论 -
2.7 将程序下载到单片机
首先,我们要把硬件连接好,把板子插到我们的电脑上,打开设备管理器查看所使用的是哪个 COM 口,如图 2-21 所示,找到“USB-SERIAL CH340(COM5)”这一项,这里最后的数字就是开发板目前所使用的 COM 端口号。图 2-21 查看COM口然后 STC 系列单片的下载软件——STC-ISP,如图 2-22 所示。图2-22 程序下载设置原创 2016-07-04 20:01:52 · 2976 阅读 · 0 评论 -
3.1 电磁干扰EMI
第一个知识点,去耦电容的应用。首先要介绍一下去耦电容的应用背景,这个背景就是电磁干扰,也就是“传说中”的 EMI。1) 冬天的时候,尤其是空气比较干燥的内陆城市,很多朋友都有这样的经历,手触碰到电脑外壳、铁柜子等物品的时候会被电击,这就是“静电放电”现象,也称之为 ESD。2) 不知道有没有同学有这样的经历,早期我们使用电钻这种电机设备,并且同时在听收音机或者看电视的时候,收音机或原创 2016-07-04 20:03:14 · 514 阅读 · 0 评论 -
3.2 单片机中去耦电容的应用
首先来看图 3-1,这是上节课已经见过的 USB 接口和供电电路。图 3-1 USB 接口和供电电路左边这张图,过了保险丝以后,接了一个 470uF 的电容 C16,右边这张图,经过开关后,接了一个 100uF 的电容 C19,并且并联了一个 0.1uF 的电容 C10。其中 C16 和 C19 起到的作用是一样的,C10 的作用和他们两个不一样,我们先来介绍这 2 个大原创 2016-07-04 20:04:08 · 817 阅读 · 0 评论 -
3.3 三极管的的概念及其工作原理
三极管在我们数字电路和模拟电路中都有大量的应用,在我们开发板上也用了多个三极管。在我们板子上的 LED 小灯部分,就有这个三极管的应用了,图 3-5 的 LED 电路中的 Q16就是一个 PNP 型的三极管。图 3-5 LED 电路三极管的初步认识三极管是一种很常用的控制和驱动器件,常用的三极管根据材料分有硅管和锗管两种,原理相同,压降略有不同,硅管用的较普遍,而锗管应用原创 2016-07-04 20:04:55 · 2336 阅读 · 1 评论 -
3.4 单片机中三极管的应用
三极管在数字电路里的开关特性,最常见的应用有 2 个:一个是控制应用,一个是驱动应用。所谓的控制就是如图 3-7 里边介绍的,我们可以通过单片机控制三极管的基极来间接控制后边的小灯的亮灭,用法大家基本熟悉了。还有一个控制就是进行不同电压之间的转换控制,比如我们的单片机是 5V 系统,它现在要跟一个 12V 的系统对接,如果 IO 直接接 12V电压就会烧坏单片机,所以我们加一个三极管,三极管的原创 2016-07-04 20:05:43 · 1417 阅读 · 1 评论 -
3.5 74HC138三八译码器的应用
在我们设计单片机电路的时候,单片机的 IO 口数量是有限的,有时并满足不了我们的设计需求,比如我们的 STC89C52 一共有 32 个 IO 口,但是我们为了控制更多的器件,就要使用一些外围的数字芯片,这种数字芯片由简单的输入逻辑来控制输出逻辑,比如 74HC138这个三八译码器,图 3-15 是 74HC138 在我们原理图上的一个应用。图 3-15 74HC138 应用原理原创 2016-07-04 20:06:52 · 6673 阅读 · 3 评论 -
3.6 LED灯闪烁程序
点亮 LED 小灯的程序我们第二课完成了,就是让 LED = 0。熄灭小灯的程序也很简单,就是 LED = 1。点亮和熄灭都会了,那么如果我们在亮和灭中间加个延时,反复不停的点亮和熄灭小灯,就成了闪烁了。我们首先复习一下 Keil 写程序的过程,建立工程-->保存工程-->建立文件-->添加文件到工程-->编写程序-->编译-->下载程序。LED 闪烁程序对于有 C 基础的同学来说原创 2016-07-04 20:07:33 · 2144 阅读 · 0 评论 -
4.1 二进制、十进制和十六进制
进制,看似很简单的东西,但很多同学还是不能彻底理解。这里先简单介绍一些注意事项,然后还是从实验中讲解会比较深刻。1) 十进制就不多说了,逢十进位,一个位有十个值: 0 ~ 9,我们的生活中到处都是它的身影。二进制就是逢二进位,它的一个位只有两个值:0 和 1,但它却是实现计算机系统的最基本的理论基础,计算机(包括单片机)芯片是基于成万上亿个的开关管组合而成的,他们每一个都只能有开和关两种状原创 2016-07-04 20:08:54 · 498 阅读 · 0 评论 -
4.2 C语言变量类型和范围
什么是变量?变量自然和常量是相对的。常量就是 1、2、3、4.5、10.6......等固定的数字,而变量则根我们小学学的 x 是一个概念,我们可以让它是 1,也可以让它是 2,我们想让它是几是我们的程序说了算的。那么我们小学学的数学里边,有这么几类,正数、负数、整数和小数。在 C 语言里,除名字和我们数学里学的不一样外,还对数据大小进行了限制。这个地方有一点复杂的是,在C51 里边的数据原创 2016-07-05 12:38:56 · 568 阅读 · 0 评论 -
4.3 C语言基本运算符
我们小学数学学过加、减、乘、除等运算符号以及四则混合运算,而这些运算符号在 C语言中也有,但是有些表达方法不一样,并且还有额外的运算符号。在 C 语言编程中,加、减、乘、除和取余数的符号分别是:+、-、*、/、%。此外,C 语言中还有额外的两个运算符++和--,他们的用法是一样的,一个是自加 1,一个是自减 1,我们选++来讲一下。++在用法上就是加 1 的意思,注意是变量自己加,比如原创 2016-07-05 12:39:49 · 742 阅读 · 0 评论 -
4.4 C语言for循环语句
for 语句是我们今后编程的一个常用的语句,这个语句必须得学会其用法,它不仅仅可以用来做延时,更重要的是用来做一些循环运算。for 语句的一般形式如下: for( 表达式1; 表达式2; 表达式3 ){ // 需要执行的语句; }其执行过程是:表达式 1 首先执行且只执行一次;然后执行表达式 2,通常都是一个用于判定条件的表达式,如果表达式 2 条件成立,原创 2016-07-05 12:40:47 · 558 阅读 · 0 评论 -
4.5 C语言while循环语句
在单片机 C 语言编程的时候,每个程序我们都会固定的加一句 while(1),这条语句就可以起到死循环的作用。对于 while 语句来说,他的一般形式是:while (表达式){ 循环体语句;}在 C 语言里,通常表达式符合条件,我们叫做真,不符合条件,叫做假。比如前边 iwhile(表达式)这个括号里的表达式,为真的时候,就会执行循环体语句,当为假的时候,就不执原创 2016-07-05 12:42:12 · 917 阅读 · 0 评论 -
4.6 C语言函数的简单介绍
函数定义的一般形式如下: 函数值类型 函数名 (形式参数列表){ 函数体 }1) 函数值类型,就是函数返回值的类型。在我们后边的程序中,会有很多函数中有 return x 这个东西,这个返回值也就是函数本身的类型。还有一种情况,就是这个函数只执行操作,不需要返回任何值,那么这个时候它的类型就是空类型 void,这个 void 按道理来说是可以省略的原创 2016-07-05 12:42:48 · 515 阅读 · 0 评论 -
4.7 单片机延时方法
C 语言常用的延时方法,有如图 4-2 所示 4 种。图 2-4 C 语言延时方法图 4-2 是 C 语言编程常用的 4 种延时方法,其中两种非精确延时,两种精确一些的延时。for 语句和 while 语句都可以通过改变 i 的范围值来改变延时时间,但是 C 语言循环的执行时间都是不能通过程序看出来的。精确延时有两个方法,一个方法是用定时器来延时,这个方法我们后边课程要详原创 2016-07-05 12:43:37 · 642 阅读 · 0 评论 -
4.8 LED流水灯程序
我们前边学了点亮一个 LED 小灯,然后又学了 LED 小灯闪烁,现在我们要进一步学习如何让 8 个小灯依次一个接一个的点亮,流动起来,也就是常说的流水灯。先来看 8 个 LED的核心电路图,如图 4-12。图4-12 LED 小灯电路图通过前面的课程,我们可以了解到控制引脚 P0.0 经过 74HC245 控制了 DB0,P0.1 控制DB1...... P0.7 控制 D原创 2016-07-05 12:44:20 · 4745 阅读 · 1 评论 -
5.1 逻辑电路与逻辑运算
在数字电路,我们经常会遇到逻辑电路,而在 C 语言中,我们则经常用到逻辑运算。二者在原理上是相互关联的,我们在这里就先简单介绍一下,随着学习的深入,再慢慢加深理解。首先,在“逻辑”这个概念范畴内,存在真和假这两个逻辑值,而将其对应到数字电路或 C 语言中,就变成了“非 0 值”和“0 值”这两个值,即逻辑上的“假”就是数字电路或C 语言中的“0”这个值,而逻辑“真”就是其它一切“非 0原创 2016-07-05 12:46:31 · 1053 阅读 · 0 评论 -
5.2 定时器介绍
定时器是单片机系统的一个重点,但并不是难点,大家一定要完全理解并且熟练掌握定时器的应用。1) 时钟周期时钟周期 T 是时序中最小的时间单位,具体计算的方法就是 1/时钟源频率,我们 KST-51 单片机开发板上用的晶振是 11.0592M,那么对于我们这个单片机系统来说,时钟周期=1/11059200 秒。2) 机器周期我们的单片机完成一个操作的最短时间。机器周期主要针对汇原创 2016-07-05 12:47:16 · 531 阅读 · 0 评论 -
5.3 定时器的寄存器
标准的 51 单片机内部有 T0 和 T1 这两个定时器,T 就是 Timer 的缩写,现在很多 51 系列单片机还会增加额外的定时器,在这里我们先讲定时器 0 和 1。前边提到过,对于单片机的每一个功能模块,都是由它的 SFR,也就是特殊功能寄存器来控制。与定时器有关的特殊功能寄存器,有以下几个,大家不需要去记忆这些寄存器的名字和作用,你只要大概知道就行,用的时候,随时可以查手册,找到每个寄原创 2016-07-05 12:48:07 · 1738 阅读 · 0 评论 -
5.4 定时器的应用
了解了定时器相关的寄存器,那么我们下面就来做一个定时器的程序,巩固一下我们学到的内容。我们这节课的程序先使用定时器 0,在使用定时器的时候,需要以下几个步骤:第一步:设置特殊功能寄存器 TMOD,配置好工作模式。第二步:设置计数寄存器 TH0 和 TL0 的初值。第三步:设置 TCON,通过 TR0 置 1 来让定时器开始计数。第四步:判断 TCON 寄存器的 TF0 位,监测定时原创 2016-07-05 12:49:31 · 581 阅读 · 0 评论 -
5.5 LED数码管的介绍
LED 小灯是一种简单的 LED,只能通过亮和灭来表达简单的信息。而这节课我们要来学习一种能表达更复杂信息的器件——LED 数码管。先给大家提供一张原理图看一下,如图 5-3 所示。图 5-3 数码管原理图这是比较常见的数码管的原理图,我们板子上一共有 6 个数码管。前边有了 LED 小灯的学习,数码管学习就会轻松的多了。从图 5-3 可以看出来,数码管共有 a、b、原创 2016-07-05 12:50:20 · 846 阅读 · 0 评论 -
5.7 数码管的静态显示
在第三章我们学习了 74HC138,了解到 74HC138 在同一时刻只能让一个输出口为低电平,也就是说在一个时刻内,我们只能使能一个数码管,并根据我们给出的 P0 的值来改变这个数码管的显示字符,我们可以将此理解为数码管的静态显示。数码管静态显示是对应动态显示而言的,静态显示对于一两个数码管还行,多个数码管,静态显示实现的意义就没有了。这节课我们先用一个数码管的静态显示来实现一个简单的秒原创 2016-07-05 12:52:17 · 879 阅读 · 0 评论 -
5.6 数码管的真值表
数码管的 8 个段,我们直接当成 8 个 LED 小灯来控制,那就是 a、b、c、d、e、f、g、dp 一共 8 个 LED 小灯。我们通过图 5-3 可以看出,如果点亮 b 和 c 这两个 LED 小灯,也就是数码管的 b 段和 c 段,其他的所有的段都熄灭的话,就可以让数码管显示出一个数字 1,那么这个时候实际上 P0 的值就是 0b11111001,十六进制就是 0xF9。那么我们写一个原创 2016-07-05 12:51:17 · 4018 阅读 · 2 评论 -
6.1 C语言数组
数组的基本概念第四章已经学过变量的基本类型,比如 char、int 等等。这种类型描述的都是单个具有特定意义的数据,当我们要处理拥有同类意义但是却包含很多个数据的时候,就可以用到数组了,比如我们上节课那个数码管的真值表,就是用一个数组来表达的。从概念上讲,数组是具有相同数据类型的有序数据的组合,一般来讲,数组定义后满足以下三个条件。具有相同的数据类型;具有相同的名字;在存储器中原创 2016-07-05 12:53:15 · 509 阅读 · 0 评论 -
6.2 C语言if语句
到目前为止,我们对 if 语句应该已经不陌生了,前边程序已用过多次了,这里我们系统的介绍一下,方便后边的深入学习。if 语句有两个关键字:if 和 else,把这两个关键字翻译一下就是:“如果”和“否则”。if 语句一共有三种格式,我们分别来看。if 语句的默认形式if语句的一般形式如下: if (条件表达式){ 语句 1; }其执行过程是原创 2016-07-05 12:55:08 · 516 阅读 · 0 评论 -
6.3 C语言switch语句
用 if....else 语句在处理多分支的时候,分支太多就会显得不方便,且容易出现 if 和 else配对出现错误的情况,在 C 语言中提供了另外一种多分支选择的语句——switch 语句,它的基本语法格式如下: switch (表达式){ case 常量表达式 1: 语句 1; case 常量表达式 2: 语句 2; ......原创 2016-07-05 12:56:02 · 451 阅读 · 0 评论 -
6.4 数码管的动态显示
我们在上一章学习数码管静态显示的时候说到,74HC138 只能在同一时刻导通一个三极管,而我们的数码管是靠了 6 个三极管来控制,那我们如何来让数码管同时显示呢?这就用到了动态显示的概念。多个数码管显示数字的时候,我们实际上是轮流点亮数码管(一个时刻内只有一个数码管是亮的),利用人眼的视觉暂留现象(也叫余辉效应),就可以做到看起来是所有数码管都同时亮了,这就是动态显示,也叫做动态扫描。原创 2016-07-05 12:56:50 · 2675 阅读 · 0 评论