arm与单片机的区别知识

第1章 单片机基础知识_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
68页免费61页免费15页免费96页免费12页免费63页1下载券88页免费42页免费145页2下载券84页2下载券
喜欢此文档的还喜欢41页1下载券29页免费22页1下载券18页1下载券45页1下载券
第1章 单片机基础知识|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢51单片机基础知识总结(最新)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者贡献于
评价文档:
22页2下载券23页2下载券1页免费170页1下载券48页1下载券22页1下载券40页1下载券2页免费43页1下载券55页1下载券
喜欢此文档的还喜欢170页1下载券98页1下载券192页1下载券31页免费85页1下载券
51单片机基础知识总结(最新)|万​丈​高​楼​平​地​起​,​先​学​基​础​知​识​吧
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:540.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢您当前的位置:&>&&>&
单片机学习知识点全攻略(二)
导语:单片机对于初学者来说确实很难理解,不少学过单片机的同学或电子爱好者,甚至在毕业时仍旧是一无所获。基于此,电子发烧友网将整合《单片机学习知识点全攻略》,共分为四个系列,以飨读者,敬请期待!此系列对于业内电子工程师也有收藏和参考价值。
&&&&&& 本单片机系列关键知识点一览:
  8:单片机寻址方式与指令系统
  9:单片机数据传递类指令
  10:单片机数据传送类指令
  11:单片机算术运算指令
  12:单片机逻辑运算类指令
  13:单片机逻辑与或异或指令祥解
  14:单片机条件转移指令
8、单片机寻址方式与指令系统
  通过前面的学习,我们已经了解了单片机内部的结构,并且也已经知道,要控制单片机,让它为我们干学,要用指令,我们已学了几条指令,但很零散,从现在开始,我们将要系统地学习8051单片机的指令部份。
  一、概述
  1、指令的格式
  我们已知,要让计算机做事,就得给计算机以指令,并且我们已知,计算机很&笨&,只能懂得数字,如前面我们写进机器的75H,90H,00H等等,所以指令的第一种格式就是机器码格式,也说是数字的形式。但这种形式实在是为难我们人了,太难记了,于是有另一种格式,助记符格式,如MOV P1,#0FFH,这样就好记了。 这两种格式之间的关系呢,我们不难理解,本质上它们完全等价,只是形式不一样而已。
  2、汇编
  我们写指令使用汇编格式,而计算机和单片机只懂机器码格式,所以要将我们写的汇编格式的指令转换为机器码格式,这种转换有两种办法:手工汇编和机器汇编。手工汇编实际上就是查表,因为这两种格式纯粹是格式不一样,所以是一一对应的,查一张表格就行了。不过手工查表总是嫌麻烦,所以就有了计算机软件,用计算机软件来替代手工查表,这就是机器汇编。
  二、单片机的寻址
  让我们先来复习一下我们学过的一些指令:MOV P1,#0FFH,MOV R7,#0FFH这些指令都是将一些数据送到对应的位置中去,为什么要送数据呢?第一个因为送入的数能让灯全灭掉,第二个是为了要实现延时,从这里我们能看出来,在用单片机的编程语言编程时,经常要用到数据的传递,事实上数据传递是单片机编程时的一项重要工作,一共有28条指令(单片机共111条指令)。下面我们就从数据传递类指令开始吧。
  分析一下MOV P1,#0FFH这条指令,我们不难得出结论,第一个词MOV是命令动词,也就是决定做什么事情的,MOV是MOVE少写了一个E,所以就是&传递&,这就是指令,规定做什么事情,后面还有一些参数,分析一下,数据传递必须要有一个&源&也就是你要送什么数,必须要有一个&目的&,也就是你这个数要送到什么地方去,显然在上面那条单片机指令中,要送的数(源)就是0FFH,而要送达的地方(目的地)就是P1这个寄存器。在数据传递类指令中,均将目的地写在指令的后面,而将源写在最后。
  这条指令中,送给P1是这个数本身,换言之,做完这条指令后,我们能明确地知道,P1中的值是0FFH,但是并不是任何时候都能直接给出数本身的。例如,在我们前面给出的单片机延时程序例是这样写的:
  MAIN: SETB P1.0     ;(1)
  LCALL DELAY ;(2)
  CLR P1.0      ;(3)
  LCALL DELAY   ;(4)
  AJMP MAIN    ;(5)
  ;以下子程序
  DELAY: MOV R7,#250   ;(6)
  D1: MOV R6,#250   ;(7)
  D2: DJNZ R6,D2    ;(8)
  DJNZ R7,D1   ;(9)
  RET        ;(10)
  END        ;(11)
  -----------------------------------------------------
  MAIN: SETB P1.0     ;(1)
  MOV 30H,#255
  LCALL DELAY ;
  CLR P1.0      ;(3)
  MOV 30H,#200
  LCALL DELAY   ;(4)
  AJMP MAIN    ;(5)
  ;以下子程序
  DELAY: MOV R7,30H   ;(6)
  D1: MOV R6,#250   ;(7)
  D2: DJNZ R6,D2    ;(8)
  DJNZ R7,D1   ;(9)
  RET        ;(10)
  END        ;(11)
  这样一来,我每次调用延时程序延时的时间都是相同的(大致都是0.13S),如果我提出这样的要求:灯亮后延时时间为0.13S灯灭,灯灭后延时0.1秒灯亮,如此循环,这样的程序还能满足要求吗?不能,怎么办?我们能把延时程序改成这样(见表2):调用则见表2中的主程,也就是先把一个数送入30H,在子程序中R7中的值并不固定,而是根据30H单元中传过来的数确定。这样就能满足要求。
  从这里我们能得出结论,在数据传递中要找到被传递的数,很多时候,这个数并不能直接给出,需要变化,这就引出了一个概念:如何寻找操作数,我们把寻找操作数所在单元的地址称之为寻址。在这里我们直接使用数所在单元的地址找到了操作数,所以称这种办法为直接寻址。除了这种办法之外,还有一种,如果我们把数放在工作寄存器中,从工作寄存器中寻找数据,则称之为寄存器寻址。例:MOV A,R0就是将R0工作寄存器中的数据送到累加器A中去。提一个问题:我们知道,工作寄存器就是内存单元的一部份,如果我们选择工作寄存器组0,则R0就是RAM的00H单元,那么这样一来,MOV A,00H,和MOV A,R0不就没什么区别了吗?为什么要加以区别呢?的确,这两条指令执行的结果是完全相同的,都是将00H单元中的内容送到A中去,但是执行的过程不一样,执行第一条指令需要2个周期,而第二条则只需要1个周期,第一条指令变成最终的目标码要两个字节(E5H 00H),而第二条则只要一个字节(E8h)就能了。
  这么斤斤计较!不就差了一个周期吗,如果是12M的晶体震荡器的话,也就1个微秒时间了,一个字节又能有多少?
  不对,如果这条指令只执行一次,也许无所谓,但一条指令如果执行上1000次,就是1毫秒,如果要执行1000000万次,就是1S的误差,这就很可观了,单片机做的是实时控制的事,所以必须如此&斤斤计较&。字节数同样如此。
  再来提一个问题,现在我们已知,寻找操作数能通过直接给的方式(立即寻址)和直接给出数所在单元地址的方式(直接寻址),这就够了吗?
  看这个问题,要求从30H单元开始,取20个数,分别送入A累加器。
  就我们目前掌握的办法而言,要从30H单元取数,就用MOV A,30H,那么下一个数呢?是31H单元的,怎么取呢?还是只能用MOV A,31H,那么20个数,不是得20条指令才能写完吗?这里只有20个数,如果要送200个或2000个数,那岂不要写上200条或2000条命令?这未免太笨了吧。为什么会出现这样的状况?是因为我们只会把地址写在指令中,所以就没办法了,如果我们不是把地址直接写在指令中,而是把地址放在另外一个寄存器单元中,根据这个寄存器单元中的数值决定该到哪个单元中取数据,比如,当前这个寄存器中的值是30H,那么就到30H单元中去取,如果是31H就到31H单元中去取,就能解决这个问题了。怎么个解决法呢?既然是看的寄存器中的值,那么我们就能通过一定的办法让这里面的值发生变化,比如取完一个数后,将这个寄存器单元中的值加1,还是执行同一条指令,可是取数的对象却不一样了,不是吗。通过例程来说明吧。
  MOV R7,#20
  MOV R0,#30H
  LOOP:MOV A,@R0
  INC R0
  DJNZ R7,LOOP
  这个例程中大部份指令我们是能看懂的,第一句,是将立即数20送到R7中,执行完后R7中的值应当是20。第二句是将立即数30H送入R0工作寄存器中,所以执行完后,R0单元中的值是30H,第三句,这是看一下R0单元中是什么值,把这个值作为地址,取这个地址单元的内容送入A中,此时,执行这条指令的结果就相当于MOV A,30H。第四句,没学过,就是把R0中的值加1,因此执行完后,R0中的值就是31H,第五句,学过,将R7中的值减1,看是否等于0,不等于0,则转到标号LOOP处继续执行,因此,执行完这句后,将转去执行MOV A,@R0这句话,此时相当于执行了MOV A,31H(因为此时的R0中的值已是31H了),如此,直到R7中的值逐次相减等于0,也就是循环20次为止,就实现了我们的要求:从30H单元开始将20个数据送入A中。
  这也是一种寻找数据的办法,由于数据是间接地被找到的,所以就称之为间址寻址。注意,在间址寻址中,只能用R0或R1存放等寻找的数据。
9、单片机数据传递类指令
  单片机数据传递类指令
  (3)以直接地址为目的操作数的指令
  MOV direct,A 例: MOV 20H,A
  MOV direct,Rn MOV 20H,R1
  MOV direct1,direct2 MOV 20H,30H
  MOV direct,@Ri MOV 20H,@R1
  MOV direct,#data MOV 20H,#34H
  (4)以间接地址为目的操作数的指令
  MOV @Ri,A 例:MOV @R0,A
  MOV @Ri,direct MOV @R1,20H
  MOV @Ri,#data MOV @R0,#34H
  (5)十六位数的传递指令
  MOV DPTR,#data16
  8051是一种8位机,这是唯一的一条16位立即数传递指令,其功能是将一个16位的立即数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。例:MOV DPTR,#1234H,则执行完了之后DPH中的值为12H,DPL中的值为34H。反之,如果我们分别向DPH,DPL送数,则结果也一样。如有下面两条指令:MOV DPH,#35H,MOV DPL,#12H。则就相当于执行了MOV DPTR,#3512H。
  数据传递类指令综合练习:
  给出每条指令执行后的结果
  上机练习:
  说明:用括号括起来代表内容,如(23H)则代表内部RAM23H单元中的值,(A)则代表累加器A单元中的值。
  进入DOS状态,进入WAVE所在的目录,例D:WAVE
  键入MCS51,出现如下画面
《单片机数据传递指令》图1
  按File-》Open,出现对话框后,在Name处输入一个文件名(见图2),如果是下面列表中已存在的,则打开这个文件,如果不存在这个文件,则新建一个文件(见图3)
  在空白处将上面的程序输入。见图4。用ALT+A汇编通过。用F8即可单步执行,在执行过程中注意观察屏幕左边的工作寄存器及A累加器中的值的变化。
经过反复的比较和遴选,《今日电子》和21ic中国电子网举办的2013年度产品奖正式揭晓…
() () () () () () () () ()第一讲 单片机基础知识_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
96页免费68页免费70页免费48页免费88页免费61页免费21页免费39页免费19页免费20页免费
喜欢此文档的还喜欢25页免费26页免费15页5下载券33页5下载券20页5下载券
第一讲 单片机基础知识|手​把​手​教​你​学1​单​片​机​视​频​教​程​
​
1​单​片​机​ ​单​片​机​视​频​ 1​视​频​ 1​教​程
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢第一章 单片机基础知识第一章
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
第一章 单片机基础知识
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 最便宜的单片机 的文章

 

随机推荐