单片机相关知识.docx
- 文档编号:30490742
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:20
- 大小:37.45KB
单片机相关知识.docx
《单片机相关知识.docx》由会员分享,可在线阅读,更多相关《单片机相关知识.docx(20页珍藏版)》请在冰豆网上搜索。
单片机相关知识
基本结构
1.运算器
运算器由运算部件——算术逻辑单元(Arithmetic&LogicalUnit,简称ALU)、累加器和寄存器等几部分组成。
ALU的作用是把传来的数据进行算术或逻辑运算,输入来源为两个8位数据,分别来自累加器和数据寄存器。
ALU能完成对这两个数据进行加、减、与、或、比较大小等操作,最后将结果存入累加器。
例如,两个数6和7相加,在相加之前,操作数6放在累加器中,7放在数据寄存器中,当执行加法指令时,ALU即把两个数相加并把结果13存入累加器,取代累加器原来的内容6。
运算器有两个功能:
(1)执行各种算术运算。
(2)执行各种逻辑运算,并进行逻辑测试,如零值测试或两个值的比较。
运算器所执行全部操作都是由控制器发出的控制信号来指挥的,并且,一个算术操作产生一个运算结果,一个逻辑操作产生一个判决。
2.控制器
控制器由程序计数器、指令寄存器、指令译码器、时序发生器和操作控制器等组成,是发布命令的“决策机构”,即协调和指挥整个微机系统的操作。
其主要功能有:
(1)从内存中取出一条指令,并指出下一条指令在内存中的位置。
(2)对指令进行译码和测试,并产生相应的操作控制信号,以便于执行规定的动作。
(3)指挥并控制CPU、内存和输入输出设备之间数据流动的方向。
微处理器内通过内部总线把ALU、计数器、寄存器和控制部分互联,并通过外部总线与外部的存储器、输入输出接口电路联接。
外部总线又称为系统总线,分为数据总线DB、地址总线AB和控制总线CB。
通过输入输出接口电路,实现与各种外围设备连接。
3.主要寄存器
(1)累加器A
图1-2单片机组成框图
累加器A是微处理器中使用最频繁的寄存器。
在算术和逻辑运算时它有双功能:
运算前,用于保存一个操作数;运算后,用于保存所得的和、差或逻辑运算结果。
(2)数据寄存器DR
数据寄存器通过数据总线向存储器和输入/输出设备送(写)或取(读)数据的暂存单元。
它可以保存一条正在译码的指令,也可以保存正在送往存储器中存储的一个数据字节等等。
(3)指令寄存器IR和指令译码器ID
指令包括操作码和操作数。
指令寄存器是用来保存当前正在执行的一条指令。
当执行一条指令时,先把它从内存中取到数据寄存器中,然后再传送到指令寄存器。
当系统执行给定的指令时,必须对操作码进行译码,以确定所要求的操作,指令译码器就是负责这项工作的。
其中,指令寄存器中操作码字段的输出就是指令译码器的输入。
(4)程序计数器PC
PC用于确定下一条指令的地址,以保证程序能够连续地执行下去,因此通常又被称为指令地址计数器。
在程序开始执行前必须将程序的第一条指令的内存单元地址(即程序的首地址)送入PC,使它总是指向下一条要执行指令的地址。
(5)地址寄存器AR
地址寄存器用于保存当前CPU所要访问的内存单元或I/O设备的地址。
由于内存与CPU之间存在着速度上的差异,所以必须使用地址寄存器来保持地址信息,直到内存读/写操作完成为止。
显然,当CPU向存储器存数据、CPU从内存取数据和CPU从内存读出指令时,都要用到地址寄存器和数据寄存器。
同样,如果把外围设备的地址作为内存地址单元来看的话,那么当CPU和外围设备交换信息时,也需要用到地址寄存器和数据寄存器。
[1]
单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置
电路板
,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械以及各种智能机械了。
因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:
智能仪器
单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、电流、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。
采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。
例如精密的测量设备(电压表、功率计,示波器,各种分析仪)。
工业控制
单片机具有体积小、控制功能强、功耗低、环境适应能力强、扩展灵活和使用方便等优点,用单片机可以构成形式多样的控制系统、数据采集系统、通信系统、信号检测系统、无线感知系统、测控系统、机器人等应用控制系统。
例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。
家用电器
家用电器广泛采用了单片机控制,从电饭煲、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备和白色家电等。
网络和通信
现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。
设备领域
单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。
模块化系统
某些专用单片机设计用于实现特定功能,从而在各种电路中进行模块化应用,而不要求使用人员了解其内部结构。
如音乐集成单片机,看似简单的功能,微缩在纯电子芯片中(有别于磁带机的原理),就需要复杂的类似于计算机的原理。
如:
音乐信号以数字的形式存于存储器中(类似于ROM),由微控制器读出,转化为模拟音乐电信号(类似于声卡)。
在大型电路中,这种模块化应用极大地缩小了体积,简化了电路,降低了损坏、错误率,也方便于更换。
汽车电子
单片机在汽车电子中的应用非常广泛,例如汽车中的发动机控制器,基于CAN总线的汽车发动机智能电子控制器、GPS导航系统、abs防抱死系统、制动系统、胎压检测等。
此外,单片机在工商、金融、科研、教育、电力、通信、物流和国防航空航天等领域都有着十分广泛的用途。
学习方法
基础理论
基础理论知识包括模拟电路、数字电路和C语言知识。
模拟电路和数字电路属于抽象学科,要把它学好还得费点精神。
在你学习单片机之前,觉得模拟电路和数字电路基础不好的话,不要急着学习单片机,应该先回顾所学过的模拟电路和数字电路知识,为学习单片机加强基础。
否则,你的单片机学习之路不仅会很艰难和漫长,还可能半途而废。
笔者始终认为,扎实的电子技术基础是学好单片机的关键,直接影响单片机学习入门的快慢。
有些同学觉得单片机很难,越学越复杂,最后学不下去了。
有的同学看书时似乎明白了,可是动起手来却一塌糊涂,究其原因就是电子技术基础没有打好,首先被表面知识给困惑了。
单片机属于数字电路,其概念、术语、硬件结构和原理都源自数字电路,如果数字电路基础扎实,对复杂的单片机硬件结构和原理就能容易理解,就能轻松地迈开学习的第一步,自信心也会树立起来。
相反,基础不好,这个看不懂那个也弄不明白,越学问题越多,越学越没有信心。
如果你觉得单片机很难,那就应该先放下单片机教材,去重温数字电路,搞清楚触发器、寄存器、门电路、COMS电路、时序逻辑和时序图、进制转换等理论知识。
理解了这些知识之后再去看看单片机的结构和原理,我想你会大彻大悟,信心倍增。
模拟电路是电子技术最基础的学科,它让你知道什么是电阻、电容、电感、二极管、三极管、场效应管、放大器等等以及它们的工作原理和在电路中的作用,这是学习电子技术必须掌握的基础知识。
一般是先学习模拟电路再去学习数字电路。
扎实的模拟电路基础不仅让你容易看懂别人设计的电路,而且让你的设计的电路更可靠,提高产品质量。
单片机的学习离不开编程,在所有的程序设计中C语言运用的最为广泛。
C语言知识并不难,没有任何编程基础的人都可以学,在我看来,初中生、高中生、中专生、大学生都能学会。
当然,数学基础好、逻辑思维好的人学起来相对轻松一些。
C语言需要掌握的知识就那么3个条件判断语句、3个循环语句、3个跳转语句和1个开关语句。
别小看这10个语句,用他们组合形成的逻辑要多复杂有多复杂。
学习时要一条语句一条语句的学,学一条活用一条,全部学过用过这些关键语句后,相信你的C基础建立了。
当基础打好以后,你会感觉到单片机不再难学了,而且越学越起劲。
当单片机乖乖的依照你的逻辑思维和算法去执行指令,实现预期控制效果的时候,成就感会让你信心十足、夜以续日、废寝忘食的投入到单片机的世界里。
可以这么说,扎实的电子技术基础和C语言基础能增强学习单片机信心,较快掌握单片机技术。
实验实践
这是真正学习单片机的过程,既让人兴奋又让人疲惫,既让人无奈又让人不服,既让人孤独又让人充实,既让人气愤又让人欣慰,既有失落感又有成就感。
其中的酸甜苦辣只有学过的人深有体会。
思想上要有刻苦学习的决心,硬件上要有一套完整的学习开发工具,软件上要注重理论和实践相结合。
1.有刻苦学习的决心
首先,明确学习目的。
先认真回答两个问题:
我学单片机来做什么?
需要多长时间把它学会?
这是你学单片机的动力。
没有动力,我想你坚持不了多久。
其次,端正学习心态。
单片机学习过程是枯燥乏味、孤独寂寞的过程。
要知道,学习知识没有捷径,只有循序渐进,脚踏实地,一步一个脚印,才能学到真功夫。
再次,要多动脑勤动手。
单片机的学习具有很强的实践性,是一门很注重实际动手操作的技术学科。
不动手实践你是学不会单片机的。
最后,虚心交流。
在单片机学习过程中每个人都会遇到无数不能解决的问题,需要你向有经验的过来人虚心求教,否则,一味的自己埋头摸索会走许多弯路,浪费很多时间。
2.有一套完整的学习开发工具
学习单片机是需要成本的。
必须有一台电脑、一块单片机开发板(如果开发板不能直接下载程序代码的话还得需要一个编程器)、一套视频教程、一本单片机教材和一本C语言教材。
电脑是用来编写和编译程序,并将程序代码下载到单片机上;开发板用来运行单片机程序,验证实际效果;视频教程就是手把手教你单片机开发环境的使用、单片机编程和调试。
对于单片机初学者来说,视频教程必须看,要不然,哪怕把教材看了几遍,还是不知道如何下手,尤其是院校里的单片机教材,学了之后,面对真正的单片机时可能还是束手无策;单片机教材和C语言教材是理论学习资料,备忘备查。
不要为了节约成本不用开发板而光用Proteus软件仿真调试,这和纸上谈兵没什么区别。
3.要注重理论和实践相结合
单片机C语言编程理论知识并不深奥,光看书不动手也能明白。
但在实际编程的时候就没那么简单了。
一个程序的形成不仅需要有C语言知识,更多需要融入你个人的编程思路和算法。
编程思路和算法决定一个程序的优劣,是单片机编程的大问题,只有在实际动手编写的时候才会有深切的感悟。
一个程序能否按照你的意愿正常运行就要看你的思路和算法是否正确、合理。
如果程序不正常则要反复调试(检查、修改思路和算法),直到成功。
这个过程耗时、费脑、疲精神,意志不坚强者往往被绊倒在这里半途而废。
学习编写程序应该按照以下过程学习,效果会更好。
看到例程题目先试着构思自己的编程思路,然后再看教材或视频教程里的代码,研究人家的编程思路,注意与自己思路的差异;接下来就照搬人家的思路亲自动手编写这个程序,领会其中每一条语句的作用;对有疑问的地方试着按照自己的思路修改程序,比较程序运行效果,领会其中的奥妙。
每一个例程都坚持按照这个过程学习,你很快会找到编程的感觉,取其精华去其糟粕,久而久之会形成你独特的编程思想。
当然,刚开始,看别人的程序源代码就像看天书一样,只要硬着头皮看,看到不懂的关键字和语句就翻书查阅、对照。
只要能坚持下来,学习收获会事半功倍。
在实践过程中不仅要学会别人的例程,还要在别人的程序上改进和拓展,让程序产生更强大的功能。
同时,还要懂得通过查阅芯片数据手册(DATASHEET)里有关芯片命令和数据的读写时序来核对别人例程的可靠性,如果你觉得例程不可靠就把它修改过来,成为是你自己的程序。
不仅如此,自己应该经常找些项目来做,以巩固所学的知识和积累更多的经验。
硬件设计
当编写自己的程序信手拈来、阅读别人的程序能够发现问题的时候,说明你的单片机编程水平相当不错了。
接下来就应该研究硬件了。
硬件设计包括电路原理设计和PCB板设计。
学习做硬件要比学习做软件麻烦,成本更高,周期更长。
但是,学习单片机的最终目的是做产品开发----软件和硬件相结合形成完整的控制系统。
所以,做硬件也是学习单片机技术的一个必学内容。
电路原理设计涉及到各种芯片的应用,而这些芯片外围电路的设计、典型应用电路和与单片机的连接等在芯片数据手册(DATASHEET)都能找到答案,前提是要看得懂全英文的数据手册。
否则,照搬别人的设计永远落在别人的后面,你做的产品就没有创意。
电子技术领域的第一手资料(DATASHEET)都是英文,从第一手资料里你所获得的知识可能是在教科书、网络文档和课外读物等所没有的知识。
虽然有些资料也都是在DATASHEET的基础上撰写的,但内容不全面,甚至存在翻译上的遗漏和错误。
当然,阅读DATASHEET需要具备一定的英文阅读能力,这也是阻碍单片机学习者晋级的绊脚石。
良好的英文阅读能力能让你在单片机技术知识的海洋里自由遨游。
做PCB板就比较简单了。
只要懂得使用Protel软件或AltiumDesigner软件就没问题了。
但要想做的板子布局美观、布线合理还得费一番功夫了。
娴熟的单片机C语言编程、会使用Protel软件或AltiumDesigner软件设计PCB板和具备一定的英文阅读能力,你就是一个遇强则强的单片机高手了。
[2]
基础知识
本段仅针对硬件设计人员和软件设计人员,为了便于对硬件的理解要有一定的汇编语言基础。
总线
我们知道,一个电路总是由元器件通过电线连接而成的,在模拟电路中,连线并不成为一个问题,因为各器件间一般是串行关系,各器件之间的连线并不很多,但计算机电路却不一样,它是以微处理器为核心,各器件都要与微处理器相连,各器件之间的工作必须相互协调,所以需要的连线就很多了,如果仍如同模拟电路一样,在各微处理器和各器件间单独连线,则线的数量将多得惊人,所以在微处理机中引入了总线的概念,各个器件共同享用连线,所有器件的8根数据线全部接到8根公用的线上,即相当于各个器件并联起来,但仅这样还不行,如果有两个器件同时送出数据,一个为0,一个为1,那么,接收方接收到的究竟是什么呢?
这种情况是不允许的,所以要通过控制线进行控制,使器件分时工作,任何时候只能有一个器件发送数据(可以有多个器件同时接收)。
器件的数据线也就被称为数据总线,器件所有的控制线被称为控制总线。
在单片机内部或者外部存储器及其它器件中有存储单元,这些存储单元要被分配地址,才能使用,分配地址当然也是以电信号的形式给出的,由于存储单元比较多,所以,用于地址分配的线也较多,这些线被称为地址总线。
地址指令
这三者的本质都是一样的——数字,或者说都是一串‘0’和‘1’组成的序列。
换言之,地址、指令也都是数据。
指令:
由单片机芯片的设计者规定的一种数字,它与我们常用的指令助记符有着严格的一一对应关系,不可以由单片机的开发者更改。
地址:
是寻找单片机内部、外部的存储单元、输入输出口的依据,内部单元的地址值已由芯片设计者规定好,不可更改,外部的单元可以由单片机开发者自行决定,但有一些地址单元是一定要有的(详见程序的执行过程)。
数据:
这是由微处理机处理的对象,在各种不同的应用电路中各不相同,一般而言,被处理的数据可能有这么几种情况:
1.地址(如MOVDPTR,1000H),即地址1000H送入DPTR。
2.方式字或控制字(如MOVTMOD,#3),3即是控制字。
3.常数(如MOVTH0,#10H)10H即定时常数。
4.实际输出值(如P1口接彩灯,要灯全亮,则执行指令:
MOVP1,#0FFH,要灯全暗,则执行指令:
MOVP1,#00H)这里0FFH和00H都是实际输出值。
又如用于LED的字形码,也是实际输出的值。
理解了地址、指令的本质,就不难理解程序运行过程中为什么会跑飞,会把数据当成指令来执行了。
功能
初学时往往对P0口、P2口和P3口的第二功能用法迷惑不解,认为第二功能和原功能之间要有一个切换的过程,或者说要有一条指令,事实上,各端口的第二功能完全是自动的,不需要用指令来转换。
如P3.6、P3.7分别是WR、RD信号,当微处理机外接RAM或有外部I/O口时,它们被用作第二功能,不能作为通用I/O口使用,只要一微处理机一执行到MOVX指令,就会有相应的信号从P3.6或P3.7送出,不需要事先用指令说明。
事实上‘不能作为通用I/O口使用’也并不是‘不能’而是(使用者)‘不会’将其作为通用I/O口使用。
你完全可以在指令中按排一条SETBP3.7的指令,并且当单片机执行到这条指令时,也会使P3.7变为高电平,但使用者不会这么去做,因为这通常会导致系统的崩溃。
执行过程
单片机在通电复位后8051内的程序计数器(PC)中的值为‘0000’,所以程序总是从‘0000’单元开始执行,也就是说:
在系统的ROM中一定要存在‘0000’这个单元,并且在‘0000’单元中存放的一定是一条指令。
堆栈
堆栈是一个区域,是用来存放数据的,这个区域本身没有任何特殊之处,就是内部RAM的一部份,特殊的是它存放和取用数据的方式,即所谓的‘先进后出,后进先出’,并且堆栈有特殊的数据传输指令,即‘PUSH’和‘POP’,有一个特殊的专为其服务的单元,即堆栈指针SP,每当执一次PUSH指令时,SP就(在原来值的基础上)自动加1,每当执行一次POP指令,SP就(在原来值的基础上)自动减1。
由于SP中的值可以用指令加以改变,所以只要在程序开始阶段更改了SP的值,就可以把堆栈设置在规定的内存单元中,如在程序开始时,用一条MOVSP,#5FH指令,就是把堆栈设置在从内存单元60H开始的单元中。
一般程序的开头总有这么一条设置堆栈指针的指令,因为开机时,SP的初始值为07H,这样就使堆栈从08H单元开始往后,而08H到1FH这个区域正是8031的第二、三、四工作寄存器区,经常要被使用,这会造成数据的混乱。
不同作者编写程序时,初始化堆栈指令也不完全相同,这是作者的习惯问题。
当设置好堆栈区后,并不意味着该区域成为一种专用内存,它还是可以象普通内存区域一样使用,只是一般情况下编程者不会把它当成普通内存用了。
开发过程
这里所说的开发过程并不是一般书中所说的从任务分析开始,我们假设已设计并制作好硬件,下面就是编写软件的工作。
在编写软件之前,首先要确定一些常数、地址,事实上这些常数、地址在设计阶段已被直接或间接地确定下来了。
如当某器件的连线设计好后,其地址也就被确定了,当器件的功能被确定下来后,其控制字也就被确定了。
然后用文本编辑器(如EDIT、CCED等)编写软件,编写好后,用编译器对源程序文件编译,查错,直到没有语法错误,除了极简单的程序外,一般应用仿真机对软件进行调试,直到程序运行正确为止。
运行正确后,就可以写片(将程序固化在EPROM中)。
在源程序被编译后,生成了扩展名为HEX的目标文件,一般编程器能够识别这种格式的文件,只要将此文件调入即可写片。
在此,为使大家对整个过程有个认识,举一例说明:
单片机试验板
ORG0000H
LJMPSTART
ORG040H
START:
MOVSP,#5FH;设堆栈
LOOP:
NOP
LJMPLOOP;循环
END;结束
单片指令
传送操作
助记符代码说明
MOVA,RnE8~EF寄存器A
MOVA,directE5direct直接字节送A
MOVA,@RiER~E7间接RAM送A
MOVA,#data74data立即数送A
MOVRn,AF8~FFA送寄存器
MOVRn,directA8~AFdirect直接字节送寄存器
MOVRn,#data78~7Fdata立即数送寄存器
MOVdirect,AF5directA送直接字节
MOVdirect,Rn88~8Fdirect寄存器送直接字节
MOVdirect1,direct285direct1direct2直接字节送直接字节
MOVdirect,@Ro86~87间接RAM送直接字节
MOVdirect,#data75directdata立即数送直接字节
MOV@Ri,AF6~F7A送间接RAM
MOV@Ri,direct76~77direct直接字节送间接RAM
MOV@Ri,#data76~77data立即数送间接RAM
MOVDPTR,#data1690data15~816位常数送数据指针
data7~0
MOVCA,@A+DPTR93由((A)+(DPTR))寻址的程序存贮
器字节选A
MOVCA,@A+PC83由((A)+(PC));寻址的程序存贮器字节送A
MOVXA,@RiE2~E3送外部数据(8位地址)送A
MOVXA,@DPTRE0送外部数据(16位地址)送A
MOVX@Ri,AF2~F3A送外部数据(8位地址)
MOVX@DPTR,AF0A送外部数据(16位地址)
PUSHdirectC0direct直接字节进栈,SP加1
POPdirectD0direct直接字节退栈,SP减1
XCHA,RnC8~CF交换A和寄存器
XCHA,directC5direct交换A和直接字节
XCHA,@RiC6~C7交换A和间接RAM
XCHA,@RiD6~D7交换A和间接RAM的低位
SWAPAC4
算术操作
(A的二个半字节交换)
ADDA,Rn28~2F寄存器加到A
ADDA,direct25direct直接字节加到A
ADDA,@Ri26~27间接RAM加到A
ADDA,#data24data立即数加到A
ADDA,Rn38~3F寄存器和进位位加到A
ADDA,direct35direct直接字节和进位位加到A
ADDA,@Ri36~37间接字节和进位位加到A
ADDA,data34data立即数和进位位加到A
ADDA,Rn98~9FA减去寄存器和进位位
ADDA,direct95directA减去直接字节和进位位
ADDA,@Ri36~37间接RAM和进位位加到A
ADDA,data34data立即数和进位位加到A
SUBBA,Rn98~9FA减去寄存器和进位位
SUBBA,direct95directA减去直接字节和进位位
SUBBA,@Ri96~97A减去间接RAM和进位位
SUBBA,#data94dataA减去立即数和进位位
INCA04A加1
INCRn08~0F寄存器加1
INCdirect05direct直接字节加1
INC@Ri06~07间接RAM加1
DECA14A减1
DECRn18~1F寄存器减1
DECdirect15direct直接字节减1
DEC@Ri16~17间接RAM减1
INCDPTRA3数据指针加1
MULABA4A乘以B
DIVAB84A除以B
DAAD4A的十进制加法调整
逻辑操作
ANLA,Rn58~5F寄存器“
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 相关 知识