单片机基础知识点全攻略.pdf
《单片机基础知识点全攻略.pdf》由会员分享,可在线阅读,更多相关《单片机基础知识点全攻略.pdf(86页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、单片机学习知识点全攻略系列一 1:单片机简叙-2:单片机引脚介绍-3:单片机存储器结构 4:第一个单片机小程序 5:单片机延时程序分析 6:单片机并行口结构-7:单片机的特殊功能寄存器系列二 8:单片机寻址方式与指令系统 9:单片机数据传递类指令 10:单片机数据传送类指令 11:单片机算术运算指令 12:单片机逻辑运算类指令 13:单片机逻辑与或异或指令样解 14:单片机条件转移指令系列三 15:单片机位操作指令 16:单片机定时器与计数器 17:单片机定时器/计数器的方式-18:单片机的中断系统 19:单片机定时器、中断试验 2 0:单片机定时/计数器实验 2 1:单片机串行口介绍系列四
2、2 2:单片机串行口通信程序设计 2 3:L E D 数码管静态显示接口与编 2 4;动态扫描显示接口电路及程序 2 5:单片机键盘接口程序设计 2 6:单片机矩阵式键盘接口技术及 2 7:关于单片机的一些基本概念 2 8:实际案例实践单片机音乐程序设计1:单片机简叙什么是单片机一台能够工作的计算机要有这样儿个部份构成:C P U (进行运算、控制)、R A M (数据存储)、R O M (程序存储)、输入/输出设备(例如:串行口、并行输出口等)。在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单
3、芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如A/D,D/A 等。单片机是一种控制芯片,一个微型的计算机,而加上晶振,存储器,地址锁存器,逻辑门,七段译码器(显示器),按 钮(类似键盘),扩展芯片,接口等那是单片机系统。2:单片机引脚介绍f l.0 140-VccPl.1 239 PO.OP l.2 338 P0.1P l.3 437 T O.2P l.4 536 P0.3P l.5 535 P0.4P l.6 734 P0.5P l.7 B33 P0.6RST/Vro 980C51 32 POTRXD/P3.0 1031 EA/VJTTXD/P3.1 1130-ALE/PRO
4、GIN T0/P3.2 1229 PSENIN T I/P 3.3 1328一P2.7T 0/P 3.4 1427 P2.6T 1/P 3.5 1526一P2.5画 P 3.6 1625一P2.4面/P 3.7 1724一P2.3XTAL1 1823一F2.2XTAL2 1922 P2.1V ss 2021一P2.0Vcc Vss-XTAL1匚XTAL2EA/VFT-PSENALE/PROGcx7H电3或版友说明:用括号括起来代表内容,如(2 3 H)则代表内部R A M2 3 H 单元中的值,(A)则代表累加器A 单元中的值。进入D O S 状态,进入W A V E 所在的目录,例 D:W
5、A V E键入MC S 5 1,出现如下画面0 LODDirifiiMOU R7,R0002000400050006000700080009O00AO00C000DDB76080000001DE835FCC43EDJNZ R3,007AHINC R ONOPNOPHOPDEC R5MOU*ROADDC A,OFCHSWAP AADDC A,R6R0=R1=R2=R3=R4=R5=R6=R7=A =00B=00BIH=867F6DDA9*FO5F7F92A544E66B19-3C7O2885 7D8A 7C00 03C4 F87E 0606 5726 FFC4 76P0=FFP1=FFP2=FF
6、F2 Save F3 Open F7 Trace F8 Step 9 Make 单片机数据传递指令图 I 1按 F i l e-O p e n,出现对话框后,在 N a m e 处输入一个文件名(见图2),如果是下面列表中已存在的,则打开这个文件,如果不存在这个文件,则新建一个文件(见图3)F ile E d itS e a r c h R u n A s s e m b le O p tio n s D e b u g W in d o w s A n a ly z e r s ReadytXDATASP050301FFFDFBDATA00 F8 06 57 FF 76 FB 9A 29 1
7、A 95 34 C4 7E 06 26 8B TBITD:WAUETEST1.ASMR0=1AR1=R2=11111bZ Saver 匚、d】007E0626298BR6=R7=A=00B=00BIN=DP=OO00PC=00000000000029FBFF06267EE5858A00C47E0626C4-19A7657F87D7C03F80657FF76PO=FFP1=FFP2=FFPSW-C肝P3-f ,图 2在空白处将上面的程序输入。见图4。用 A L T+A 汇编通过。用 F 8 即可单步执行,在执行过程中注意观察屏幕左边的工作寄存器及A累加器中的值的变化。Edit SearchAss
8、embleions Uebug Windows AnalyzersSPXDATATDATA00 F8 06 57 FF 76 FB 9A 29 1A 95 34 C4 7E 06 26 8B t HeadyBIT00 1 129FBFF06267EE5r i MOUHOUMOUMOUMOUMOUMOUMOUMOUMOUMOU23H,#30H1 2 1,434HR0,tt23HR7,#22HR1,12H3 皿 QR145H,34HDPTR,#6712H12H.DPHR0,DPLD:WAUETEST1.ASM11:1F2 SaveA=00 DP=0000 P0=FFB=00 PC=0000 P1=
9、FFBIN=00000000 P2=FF1 11 0 110e图 4内存中值的变化在此是看不到的,可以用如下方法观察(看图5):将鼠标移到D AT A,双击,则光标进入此行,此时可以键盘上的上下光标键上下翻动来观察内存值的变化。本行的最前面D AT A后面的数据代表的是“一段”的开始地址,如现在为2 0 H,再看屏幕的最上方,数字从。到 F,显示两者相加就等于真正的地址值,如现在图上所示的内存2 0 H、2 1 H、2 2 H、2 3 H 中的值分别是 F B H、O E H、E 8 H、3 0 HF ile E dit S earch R un A ssemble O ptions D eb
10、ug W indows A nalyzerri -M C S 5 1 C P UA ddr 0 1 2 3 4 5 6 7 8 9 A B C D E FC O D E 0 0 0 0 7 5 2 3 3 0 7 5 1 2 3 4 7 8 2 3 7 F 2 2 A 9 1 2 E 6 8 7 3 4 8 5 门 0 7-0 5X D A T A-T 疆 0 3-h i 0 1D A T A 2 0 F B 0 E E 8 3 0 D 7 C 4 7 E 0 6 2 6 0 1 8 5 8 E 0 0 8 B 4 6 F D T F F-b h F DB I T 0 0 1 1 0 1 1
11、1 1 1 0 1 1 1 0 0 0 0 ;F BT图 5M 0 0 0 7 5 2 3 3 0M O VR 0=1 210 0 0 3 7 5 1 2 3 4Klim1 2 H,it3 4 HR I=3 40 0 0 6 7 8 2 3M O VR 0,#2 3 HR 2=5 7KT0 0 0 8 7 F 2 2M O VR 7,H 2 2 HR 3=F Fc0 0 0 A A 9 1 2M O VR I,1 2 HR 4=7 67 E0 0 0 C E 6M O VA.R 0R 5=F B0 0 0 D 8 7 3 4M O V3 4 H,R 1R 6=9 A20 0 0 F 8 5 3
12、 4 4 5M O V4 5 H,3 4 HR 7=2 28E0 0 1 2 9 0 6 7 1 2M O VD P T R,H 6 7 1 2 Hfi=0 0 D P=0 0 B0 0 1 5 8 5 8 3 1 2M O V1 2 H,D P HB=0 0P C=0 00 0 1 8 A 8 8 2M O VR 0,D P L|_B I N=0 0 0 0 0 0 0 0 1 A E 6M O VA,R 0 I1 P S W=6、当运行完程序后,即进入它的反汇编区,不是我们想要的东西。为了再从头开始,可以用C T R L+F 2 功能键复位PC 值。注意此时不会看到原来的窗口,为看到原来的
13、窗口,请用 AL T+4 或 AL T+5 等来切换。当然以上操作也可以菜单进行。C T R L+F 2 是程序复位,用 R U N菜单。窗口用W IN D O W S 菜单。此次大家就用用熟这个软件吧,说实话,我并不很喜欢它,操作起来不方便,但给我的机器只能上这个,没办法,下次再给网友单独介绍一个好一点的吧。现在最好的是k ei l1 0、单片机数据传送类指令单片机的累加器A 与片外R AM 之间的数据传递类指令M O V X A,R iM O V X R i,AM O V X A,D PT RM O V X D PT R,A说明:1)在 5 1 系列单片机中,与外部存储器R AM 打交道的
14、只能是A 累加器。所有需要传送入外部R AM 的数据必需要通过A 送去,而所有要读入的外部R AM 中的数据也必需通过A 读入。在此我们能看出内外部R AM 的区别了,内部R AM 间能直接进行数据的传递,而外部则不行,比如,要将外部R AM 中某一单元(设为0 1 0 0 H单元的数据)送入另一个单元(设为0 2 0 0 H单元),也必须先将0 1 0 0 H单元中的内容读入A,然后再传送到0 2 0 0 H单元中去。要读或写外部的R AM,当然也必须要知道R AM 的地址,在后两条单片机指令中,地址是被直接放在D PT R 中的。而前两条指令,由于R i (即 R O 或 R 1)只是一个
15、8 位的寄存器,所以只供给低8 位地址。因为有时扩展的外部R AM 的数量比较少,少于或等于2 5 6 个,就只需要供给8 位地址就够了。使用时应当首先将要读或写的地址送入D PT R 或 R i 中,然后再用读写命令。例:将单片机外部R A M 中 1 0 0 H 单元中的内容送入外部R A M 中 2 0 0 H 单元中。M O V D P T R,#0 1 O O HM O V X A,D P T RM O V D P T R,#0 2 0 0 HM O V X D P T R,A程序存储器向累加器A传送指令M O V C A,A+D P T R 本指令是将R O M 中的数送入A中。本
16、指令也被称为单片机查表指令,常用此指令来查一个已做好在R O M 中的表格说明:此条指令引出一个新的寻址办法:变址寻址。本指令是要在R O M 的一个地址单元中找出数据,显然必须知道这个单元的地址,这个单元的地址是这样确定的:在执行本指令立脚点D P T R 中有一个数,A中有一个数,执行指令时,将 A和 D P T R 中的数加起为,就成为要查找的单元的地址。查找到的结果被放在A中,因此,本条指令执行前后,A中的值不一定相同。例:有一个数在R 0 中,要求用查表的办法确定它的平方值(此数的取值范围是0-5)M O V D P T R,S T A B L EM O V A,R OM O V C
17、 A,A+D P T RT A B L E:D B 0,1,4,9,1 6,2 5设 R O 中的值为2,送入A中,而 D P T R 中的值则为T A B L E,则最终确定的R O M 单元的地址就是T A B L E+2,也就是到这个单元中去取数,取到的是4,显然它正是2的平方。其它数据也能类推。标号的真实含义:从这个地方也能看到另一个问题,我们使用了标号来替代具体的单元地址。事实上,标号的真实含义就是地址数值。在这里它代表了,0,1,4,9,1 6,2 5 这几个数据在R O M 中存放的起点位置。而在以前我们学过的如L C A L L D E L A Y 单片机指令中,D E L A
18、 Y 则代表了以D E L A Y 为标号的那段程序在R O M 中存放的起始地址。事实上,C P U 正是通过这个地址才找到这段程序的。能通过以下的例程再来看一看标号的含义:M O V D P T R,#1 0 0 HM O V A,R OM O V C A,A+D P T RO R G 0 1 0 0 H.D B 0,1,4,9,1 6,2 5如果R O 中的值为2,则最终地址为1 0 0 H+2 为 1 0 2 H,到 1 0 2 H 单元中找到的是4。这个能看懂了吧?那为什么不这样写程序,要用标号呢?不是增加疑惑吗?如果这样写程序的话,在写程序时,我们就必须确定这张表格在R O M 中
19、的具体的位置,如果写完程序后,又想在这段程序前插入一段程序,那么这张表格的位置就又要变了,要改O R G 1 0 0 H 这句话了,我们是经常需要修改程序的,那多麻烦,所以就用标号来替代,只要一编译程序,位置就自动发生变化,我们把这个麻烦事交给计算机;;指我们用的电脑去做了。堆栈操作P U S H d i r e c tP O P d i r e c t第一条指令称之为推入,就是将d i r e c t 中的内容送入堆栈中,第二条指令称之为弹出,就是将堆栈中的内容送回到d i r e c t 中。推入指令的执行过程是,首先将S P 中的值加1,然后把S P 中的值当作地址,将 d
20、i r e c t 中的值送进以S P 中的值为地址的R A M 单元中。例:M O V S P,#5 F HM O V A,#1 0 0M O V B,#2 0P U S H A C CP U S H B则执行第一条P U S H A C C指令是这样的:将S P中的值加1,即变为6 0 H,然后将A中的值送到6 0 H单元中,因此执行完本条指令后,内存6 0 H单元的值就是1 0 0,同样,执行P U S HB时,是将S P+1,即变为6 1 H,然后将B中的值送入到6 1 H单元中,即执行完本条指令后,6 1 H单元中的值变为2 0。P O P指令的在单片机中执行是这样的,首先将S P中
21、的值作为地址,并将此地址中的数送到P O P指令后面的那个d i r e c t中,然 后S P减1。接上例:P O P BP O P A C C则执行过程是:将S P中 的 值(现在是6 1 H)作为地址,取6 1 H单元中的数值(现在是2 0),送到B中,所以执行完本条指令后B中的值是2 0,然后将S P减1,因此本条指令执行完后,S P的值变为6 0 H,然后执行P O P A C C,将S P中 的 值(6 0 H)作为地址,从该地址中取 数(现在是1 0 0),并送到A C C中,所以执行完本条指令后,A C C中的值是1 0 0。这有什么意义呢?A C C中的值本来就是1 0 0,
22、B中的值本来就是2 0,是的,在本例中,的确没有意义,但在实际工作中,则在P U S H B后一般要执行其他指令,而且这些指令会把A中的值,B中的值改掉,所以在程序的结束,如果我们要把A和B中的值恢复原值,那么这些指令就有意义了。还有一个问题,如果我不用堆栈,比如说在P U S H A C C指令处用M O V 6 0 H,A,在P U S H B处用指令M O V 6 1 H,B,然后用M O V A,6 0 H,M O V B,6 1 H来替代两条P O P指令,不是也一样吗?是的,从结果上看是样的,但是从过程看是不一样的,P U S H和P O P指令都是单字节,单周期指令,而M O V
23、指令则是双字节,双周期指令。更何况,堆栈的作用不止于此,所以一般的计算机上都设有堆栈,单片机也是一样,而我们在编写子程序,需要保存数据时,常常也不采用后面的办法,而是用堆栈的办法来实现。例:写出以下单片机程序的运行结果M O V 3 0 H,#1 2M O V 3 1 H,#2 3P U S H 3 0 HP U S H 3 1 1 1P O P 3 0 HP O P 3 1 1 1结果是3 0 H中的值变为2 3,而 3 1 H中的值则变为1 2。也就两者进行了数据交换。从这个例程能看出:使用堆栈时,入栈的书写次序和出栈的书写次序必须相反,才能保证数据被送回原位,不然就要出错了。作业:在 M
24、 C S 5 1 下执行上面的例程,注意观察内存窗口和堆栈窗口的变化。1 1、单片机算术运算指令不带进位位的单片机加法指令A DD A,#DA T A ;例:A DD A,#1 0 HA DD A,d i r e c t ;例:A DD A,1 0 HA DD A,R n ;例:A DD A,R 7A DD A,e R i ;例:A DD A,R 0用途:将 A中的值与其后面的值相加,最终结果否是回到A中。例:M O V A,#3 0 HA DD A,#1 0 H则执行完本条指令后,A中的值为4 0 H。下面的题目自行练习M O V 3 4 1 1,t t l O HM O V R O,#1
25、3 1 1M O V A,3 4 HA DD A,R OM O V R I,#3 4 HA DD A,R 1带进位位的加法指令A DDC A,R nA DDC A,d i r e c tA DDC A,R iA DDC A,#d a t a用途:将 A中的值和其后面的值相加,并且加上进位位C中的值。说明:由于5 1 单片机是一种8位机,所以只能做8位的数学运算,但 8 位运算的范围只有0-2 5 5,这在实际工作中是不够的,因此就要进行扩展,一般是将2个 8 位的数学运算合起来,成为一个1 6 位的运算,这样,能表达的数的范围就能达到0-6 5 5 3 5。如何合并呢?其实很简单,让 我 们
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 基础 知识点 攻略
限制150内