第二讲:指令系统及开发语言

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第二讲指令系统及开发语言主要内容:一、概述二、指令系统三、汇编语言程序设计举例四、C51程序设计举例一、指令系统概述1、指令分类MCS-51系列单片机共有111条指令按功能可分成5类指令:数据传送指令(29条)算术运算指令(24条)逻辑运算指令(24条)控制转移指令(17条)位操作类指令(17条)1)指令执行时间快单周期指令65条(1us,12MHz晶振)双周期指令44条(2us,12MHz晶振)四周期指令2条(4us,12MHz晶振)2)指令短单字节指令49条双字节指令46条三字节指令16条3)单指令实现字节相乘或相除运算4)具有丰富的位操作类指令2、指令特点3、寻址方式7种寻址方式:立即寻址直接寻址寄存器寻址寄存器间接寻址相对寻址变址寻址位寻址二、51单片机指令系统介绍1、指令中常用符号说明2、数据传送指令3、算术运算指令4、逻辑运算指令5、控制转移指令6、位操作类指令1、指令中常用符号说明Rn当前寄存器区的Ro~R7(其中n=0~7)Ri当前寄存器区中的R0和R1(其中i=0,1)direct8位直接字节地址(片内RAM和SFR空间)#data8位立即数。#data1616位立即数。addr1616位地址值。Addr1111位地址值。rel8位带符号地址偏移量(-128~+127)bit片内RAM和SFR中的可直接寻址位@间接寻址寄存器或基址寄存器的前缀()表示括号中的内容(())表示间址寻址的内容2、数据传送指令(1)MOVA,RnMOVA,directMOVA,@RiMOVA,#dataMOVRn,AMOVRn,directMOVRn,#data2、数据传送指令(2)MOVdirect,AMOVdirect,RnMOVdirect,directMOVdirect,@RiMOVdirect,#dataMOV@Ri,AMOV@Ri,directMOVDPTR,#data16MOVCA,@A+DPTRMOVCA,@A+PCMOVXA,@RiMOVXA,@DPTRMOVX@Ri,AMOVX@DPTR,A2、数据传送指令(3)PUSHdirectPOPdirectXCHA,RnXCHA,directXCHA,@RiXCHDA,@RiSWAPA2、数据传送指令(4)3、算术运算指令ADDA,RnADDA,directADDA,@RiADDA,#dataADDCA,RnADDCA,directADDCA,@RiADDCA,#dataSUBBA,RnSUBBA,directSUBBA,@RiSUBBA,#dataINCAINCRnINC@RiDECADECRnDECdirectDEC@RiINCDPTRMULABDIVABDAA4、逻辑运算指令ANLA,RnANLA,directANLA,@RiANLA,#dataANLdirect,AANLdirect,#dataORLA,RnORLA,directORLA,@RiORLA,#dataORLdirect,AORLdirect,#dataXRLA,RnXRLA,@RiXRLA,#dataXRLdirect,AXRLdirect,#dataCLRACPLARLARLCARRARRCA5、控制转移指令ACALLaddr11LCALLaddr16RETRETIAJMPaddr11LJMPaddr16SJMPrelJMP@A+DPTRJZrelJNZrelCJNEA,direct,relCJNEA,#data,relCJNE@Ri,#data,relDJNZRn,relDJNZdirect,relNOP6、位操作类指令CLRCCLRbitSETBCSETBbitCPLCCPLbitANLC,bitANLC,/bitORLC,bitORLC,/bitMOVC,bitMOVbit,CJCrelJNCrelJBbit,relJNBbit,relJBCbit,rel三、汇编语言程序设计举例举例1:设计一个报警程序,要求当报警按键按下后,蜂鸣器发出报警声。设P1.0口驱动蜂鸣器P1.1口作为报警按键输入P1.2口驱动发光报警接口电路设计见右图R1330P1.2+5VD1LED4.7KP1.0R2+5VQ18550B1BELL+5VP1.1R310KSW1ORG0000HLJMPSTARTORG0100HSTART:MOVSP,#60HLOOP1:JBP1.1,$JNBP1.1,$LCALLSOUNDSJMPLOOP1SOUND:MOVR7,#5SOUND1:CLRP1.0MOVR0,#20LCALLDELAYSETBP1.0MOVR0,#10LCALLDELAYDJNZR7,SOUND1RETDELAY:MOVR1,#100;100msDELAY1:MOVR2,#200;1msDELAY2:NOPNOPNOPDJNZR2,DELAY2DJNZR1,DELAY1DJNZR0,DELAYRET四、C51程序设计举例1、C51是专用于51单片机硬件开发的C语言。2、C51与标准C的区别,大致可分为8类:a)8051存储类型及存储区域;b)存储模式;c)存储器类型声明;d)变量类型声明;e)位变量与位寻址;f)特殊功能寄存器;g)C51指针;h)函数属性。a)存储类型及存储区域code:程序存储区内部数据存储区:data:直接寻址区,内部RAM低128位(00H~7FH)idata:间接寻址区,整个内部RAM(00H~FFH)bdata:可位寻址区(20H~2FH)外部数据存储区:xdata:可指定64K外部RAM(0000H~0FFFFH)pdata:能访问1页(256Byte)的外部RAM特殊功能寄存器:sfr:字节寻址比如sfrP0=0x80;为PO口地址为80Hsfr16:字寻址,如sfr16T2=0xcc;指定Timer2口地址T2L=0xccT2H=0xCD;sbit:位寻址,如sbitEA=0xAFb)存储模式存储模式决定了没有明确指定存储类型的变量,函数参数等的缺省存储区域,共三种(在C51编译器选项中选择):Small模式所有缺省变量参数均装入内部RAM,优点是访问速度快,缺点是空间有限,只适用于小程序。Compact模式所有缺省变量均位于外部RAM区的一页(256Bytes),具体哪一页可由P2口指定,在STARTUP.A51文件中说明,也可用pdata指定,优点是空间较Small宽裕,速度较Small慢,较large要快,是一种中间状态。Large模式所有缺省变量可放在多达64KB的外部RAM区,优点是空间大,可存变量多,缺点是速度较慢。C)存储器类型声明变量或参数的存储类型可由存储模式指定缺省类型,也可由关键字直接声明指定。各类型分别用:code,data,idata,xdata,pdata说明例:datauar1;charcodearray[]=“hello!”;unsignedcharxdataarr[10][4];d)变量类型声明C51提供以下几种扩展数据类型:bit:位变量值为0或1sbit:从字节中定义的位变量0或1sfr:sfr字节地址0~255sfr16:sfr字地址0~65535其余数据类型如:char,enum,short,int,long,float等与ANSIC(标准C)相同。e)位变量与位寻址●位变量定义用bit,存储于内部RAM的20H~2FH●可位寻址区说明:可作如下定义:intbdatai;unsignedcharbdataarr[3],然后:sbitbit0=i^0;sbitbit15=i^15;sbitarr07=arr[0]^7;sbitarr17=arr[1]^7;f)特殊功能寄存器g)C51指针●一般指针的声明与标准C的相同,不过同时还可以说明指针的类型,如:char*xdataptr;ptr为一个指向char数据的指针,而ptr本身放于外部RAM区,以上的long,char等指针指向的数据可存放于任何存储器中。●存储器指针基于存储器的指针说明时即指定了存贮类型,如:chardata*str;str指向data区中char型数据intxdata*pow;pow指向外部RAM的int型整数。h)函数属性C51中函数的声明:●普通函数的声明:uintRecOder(uchara)uint:函数返回的值类型为uintRecOder:函数名(uchara):括号中为对传递变量的声明●中断函数的声明:voidSerialISR()interrupt4using1SerialISR:中断函数名interrupt4:中断类型号,4为串口中断using1:指定存储工作区,可缺省,由编译器指定3、KeilC51开发软件介绍KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM语言和C语言的程序设计,界面友好,易学易用。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,KeilC51生成的目标代码效率相当高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。KEIL软件开发基本步骤:a)新建工程;b)选择单片机型号;c)新建工程文件,即代码,并将其添加到工程中;d)编译修改编译……编译通过;e)软件调试;f)硬件调试。4、Keil中C语言的书写风格好的程序应该是简洁、易懂的,除了从程序的逻辑性出发,还应该形成良好的书写风格。主要有以下几个方面:1)缩进格式;2)大符号的位置,如{};3)变量的命名;4)函数的命名;5)程序的分块,尽量使函数功能单一;6)添加注释。5、C51程序示例举例一:includereg51.hsbitLed=P1^2;//P要大写,否则和头文件sbitBell=P1^0;//中的定义不相符,编译sbitSw1=P1^1;//出错voidmain(){……if(Sw1==0)//如果有按键{Led=0;//亮LedBell=0;//蜂鸣器响}else{Led=1;//灭LedBell=1;//蜂鸣器关}……}R1330P1.2+5VD1LED4.7KP1.0R2+5VQ18550B1BELL+5VP1.1R310KSW1举例二:将示例一中查询按键的程序放入定时中断中,每隔一定的时间都会对按键进行查询。voidSysIni(){……TMOD=0x02;//定时器0,工作方式2TCON=0x00;TL0=0x80;//定时器0装载初值TH0=0x80;ET0=1;//开定时器中断0EA=1;//开中断TR0=1;//启动定时器0……}voidKeyScan()interrupt1using1{if(Sw1==0)//如果有按键{Led=0;//亮LedBell=0;//蜂鸣器响}else{Led=1;//灭LedBell=1;//蜂鸣器关}}

1 / 40
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功