《片机原理及应用.ppt》由会员分享,可在线阅读,更多相关《片机原理及应用.ppt(68页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、单片机原理及应用251单片机并口及并口应用51单片机晶振和复位51单片机指令集编者:康戈文51单片机的并行接口n51单片机I/O具有4组,每组8位,共32位并行接口,按“第二功能”不同,结构也稍有不同。nP0口:并口/数据地址总线nP1口:并行接口nP2口:并口/地址高8位nP3口:并口,每个引脚还有不同功能:RXD;TXD;INT0;INT1;T0;T1;WR;RD标准并行接口电路框图引脚锁存器RD数据WR方向 DIR(需要设定方向需要设定方向)三态门51单片机P1口引脚锁存器读寄存器数据WRQQVCCRT读引脚51单片机P0口引脚锁存器读寄存器数据WRQQVCCT多路器MUX地址/数据控制
2、(H)读引脚51单片机P2口引脚锁存器RD数据WRQQVCCT多路器MUX地址/数据控制(H)R读引脚51单片机P3口引脚锁存器RD数据WRQQVCCT第二输出功能第二输入功能读引脚51单片机并口应用小结n并口基本功能:只要写“1”到锁存器,就可以读取引脚数据。n并口第二功能随指令变化:1.使用MOVX/MOVC指令时,P0/P2口自动切换到“地址、数据”方式2.P3口第二功能是“直通”的,可以直接输出:WR、RD、TXD,直接输入:INT0、INT1、T0、T1、RXD。由程序和电路直接相应(预先设定功能,采用相应指令)并口输出应用举例VCCR2kPx.xOUTVCC220LED继电器单片机
3、连接光耦合器件89C51晶振电路电容:2033pf(常:30pf)晶体:1.216MHZ(常:12M)XTL1XTL2XTL1XTL2外接时钟不接指令时序振荡周期ALE输出状态周期读操作码(无效)读第二字节ADD A,#dataS1 S2 S3 S4 S5 S6读操作码S1 S2 S3 S4 S5 S6读操作码(单周期)机器周期时序要点:n一个指令周期1,2或者4个机器周期n一个机器周期12个晶振周期n一个机器周期输出两个ALE脉冲即:nALE的输出频率fALE(1/6)fOSCn如果使用晶振频率为12MHZ,则fALE 2MHZ,指令执行时间1,2,4微秒。复位电路上电复位时序时间t上电电容
4、充电复位结束,单片机工作大于24个晶振周期宽度(复位期)Vcc电容电压RES引脚电压复位后寄存器状态nPC0000 程序从0000开始执行,ROM的这个地址也称为“复位地址”nPSW=0 其中RS1,RS1=0,默认主程序使用寄存器组0nSP=07 堆栈从RAM的07地址开始,一般需要更改堆栈栈底值nP0P3=FFH 引脚输出高电平nIE=0X000000B 所有中断被关闭nIP=0X000000B 所有中断无优先级nTMOD=00 定时器T0,T1模式0nTCON=00 定时器不工作.nSCON=00 串行口默认使用方式0nPCON=0XXX0000B 无电源管理,无波特率2倍设置n其他如A
5、CC;DPTR;TH0;TL0;TH1;TL1;SBUF等可以不关心。地址数据扩展电路A8A15A8A15A8A15A0A7A0A7A0A7扩展后的地址数据时序P0D0D7A0A7D0D7A0A7D0D7A0A7ALEP2373出 74LS373 是一种“透明”的8D锁存器,当LE引脚为“高”时,输出输入。低电平时锁定数据。Intel 8282 类似,但引脚不一样。不能用其它锁存器代替。51单片机(汇编)指令集n任何CPU的指令都使用“二进制”机器码!n用数字(代码)表达需要CPU执行的功能显然是极不方便的!n采用“助记符”表达“二进制机器码”,便于编写程序。“助记符”也称为“助记符指令”。n
6、用“助记符”编写的程序,称为“汇编语言程序”n“助记符二进制机器码”过程称为“汇编”n“二进制机器码 助记符”过程称为“反汇编”n常用的指令表达方式为:标号:标号:助记符助记符 操作对象操作对象1(结果结果),操作对象,操作对象2寻址方式nAddressing 地址(动名词),翻译为“寻址”n一般意义:可以访问的所有地址空间的“地址表地址表达式达式”n指令中的意义:“地址”的表达形式:1.直接用“地址码”表达称为“直接寻址”2.用“寄存器内容”表达称为“寄存器间接寻址”3.寄存器作为访问对象称为“寄存器寻址”4.直接使用常数(立即数)称为“立即寻址”5.固定地址偏移称为“变址寻址”,也称:基址
7、变址6.当前程序地址相对偏移相对寻址7.操作数是位寄存器或者位变量位寻址8.不同CPU还有其它表达方式(寻址方式)51单片机指令通用符号nRn 代表R0,R1R7中任意一个,即:n=0,17nRi 代表R0或R1,即:i=0.1n#data 代表8位立即数(常数)n#data16 代表16位立即数(常数)nDirect 代表直接地址:8位地址码(变量名)或寄存器 名:寄存器除A,Rn外)nrel 带符号的8位相对偏移地址nAddr 11 addr16 11位或者16位地址nRi 用Ri的内容表达地址(8位地址)nDPTR 用DPTR的内容表达地址(16位地址)nLABEL 程序入口的名称nBI
8、T 位变量、位寄存器,如:P1.0,C,ACC.7等51单片机寻址表达式1n直接寻址:操作对象是地址、变量名、SFR中的寄存器名。例如:MOV 20H,A MOV SP,#30H PUSH ACCn(寄存器)间接寻址:通过寄存器指出访问地址,寄存器只能使用R0,R1或DPTR,在寄存器前面冠以符号。例如:MOV R1,A MOVX DPTR,A 此表达方法可以方便地用于循环程序51单片机寻址表达式2n寄存器寻址:对寄存器操作。寄存器指:Rn和A,其余“寄存器”不算。例如:MOV R4,A INC R7n立即寻址:操作数是常数(立即数)。常数前冠以符号#,例如:MOV A,#30 MOV 20H
9、,#30Hn位寻址:操作数是位寄存器或者位变量,例如:MOV P1.0,C SETB P1.151单片机寻址表达式3n变址寻址:基本地址偏移量。基本地址用DPTR表达,偏移量用A表达,在寄存器前面冠以符号。例如:MOVC A,A+DPTR MOVC A,A+PC JMP A+DPTRn相对寻址:当前程序地址(相对偏移)即PC+rel,相对偏移是一个8位符号数rel,其范围128127之间,表达为另一个程序入口的label,此label的距离不能太远,汇编器自动计算出相对偏移。主要用于“条件转移”指令,例如:DJNZ R7,label JNC label51单片机指令内部传送指令n立即寻址MOV
10、 A,#DATAMOV Rn,#DATAMOV Ri,#DATAMOV Direct,#DATAn直接寻址:MOV A,DirectMOV Direct,AMOV Direct,RnMOV Ri,DirectMOV Direct1,Direct251单片机指令内部传送指令n间接寻址MOV A,RiMOV Ri,AMOV Direct1,Rin寄存器寻址MOV A,RnMOV Rn,AMOV Direct1,Rn51单片机指令外部传送指令nMOVX DPTR,AnMOVX Ri,AnMOVX A,DPTRnMOVX A,RinMOVC A,A+DPTR 查表指令nMOVC A,A+PCn补充:M
11、OV DPTR,#data16 唯一16位传送51单片机指令堆栈操作指令nPUSH Direct 存储器内容存入堆栈nPOP Direct 堆栈内容回存到存储器注意,累加器A出入栈时,写为:nPUSH ACC 和 POP ACCn堆栈指令只对“直接地址”有效!对A、Rn无效51单片机指令数据交换指令nXCH A,RnnXCH A,directnXCH A,Rnn半字节交换指令:XCHD A,Ri 只交换低四位 SWAP A 累加器A的高4位和低4位交换,相当于字节循环移位4次字节拆分程序举例MOV MEM,#0MOV MEM+1,#0;对MEM的连续两个存储器清零MOV R0,#MEM;用R0
12、表达MEM地址MOV A,HEX;读取待拆数据,假定为“0ABH”XCHD A,R0 ;MEM中为“0BH”,A中为“A0H”INC R0SWAP A;A中高低4位互换,“A0H”变“0AH”MOV R0,A;存“0AH”到MEM+1 此程序常用作显示前的处理,一个数码管只能显示1个16进制数据,1字节数据要用2个数码管才能显示。51单片机指令算术运算指令n加法:带进位加法:ADD A,Rn ADDC A,RnADD A,direct ADDC A,directADD A,Rn ADDC A,RnADD A,#data ADDC A,#datan后者吧“C”作为最低位连同数据一起进行相加,常用
13、于16位加法的高8位相加。C是真正意义上的“进位”低8位相加后的进位。51单片机指令算术运算指令n减法,必须带上“借位”nSUBB A,Rn nSUBB A,directnSUBB A,RnnSUBB A,#datan一般使用时,先要使C=0即:CLR C,16位减法时,高8位运算不要清除C51单片机指令加1减1指令nINC A DEC AnINC Rn DEC RnnINC direct DEC directnINC Ri DEC Rin它们的操作不影响状态标志PSW,即:FFH+1=0 或 0-1=FFH,不会产生进位或者借位标志51单片机指令乘除法指令等n乘除法指令:MUL AB A*B
14、=BA结果:高8位在B,低8位在ADIV AB A/B=AB 结果:商在A,余数在Bn十进制调整指令 DA ABCD码加减之后,将结果又恢复成BCD码n数据指针加1指令 INC DPTR16位数据指针只能加1,不能减11字节16进制数转换成3字节BCD数举例 设HEX中存放着一个16进制(2进制)数,如果要将它送到数码管进行显示,首先要将其转换成3字节的BCD数,每字节的值data时转到label1,当其data转到label2,当其data时转到label3,程序如下:CJNE A,#data,label0LJMP label3Label0:JC label2LJMP label151单片机
15、指令调用和返回指令n调用指令LCALL addr16子程序可在64KB中任意地址,PC=addr16ACALL addr11绝对调用,当前PC地址保留高5位,其余11位被addr11替换。范围2KB,但不对称。n调用指令针对子程序,编程时使用子程序入口的标号(label)n子程序结束时有“返回”指令,可以回到调用前的下一条指令处。n“当前当前PC值值”指:读取调用指令后,指:读取调用指令后,PC自动指向自动指向“下一条指令下一条指令”,因此当前,因此当前PC值就是下一条指令值就是下一条指令地址。地址。51单片机指令调用和返回指令n返回指令子程序返回:RET中断返回:RETIn子程序(含中断服务
16、)调用过程:发生“调用”时,CPU自动把当前PC值送入堆栈保存,根据指令不同用addr16或者addr11更新PC值,从而读取子程序指令并执行。当读到“返回RET;RETI”指令时,CPU从堆栈中取回原来的PC值,读取调用前的“下一条指令”,从而返回“断点”处。nRETI指令还能清除中断响应时所置位的优先级状态触发器。51单片机指令布尔操作指令n位传送MOV C,bitMOV bit,cn清0和置1CLR bitCLR CSETB bitSETB C51单片机指令布尔操作指令n逻辑运算“与”、“或”、“非”与 ANL C,bitANL C,/bit或 ORL C,bitORL C,/bit非
17、CPL CCPL bit 注:/bit=bitn位控制转移前面已经讲过,关键字如下:JCJNCJBJNBJBC空操作指令nNOP 执行(耽误/延迟)一个机器周期对标志有影响的指令指令标志位指令标志位COVACCOVACADDCLR CADDCCPL CSUBBANL C,bitMUL0ANL C,/bitDIV0ORL C,bitDA AORL C,/bitRRCMOV C,bitRLCCJNESETB C151单片机的汇编语言(宏汇编)n只有指令助记符还不能编写出好程序,需要增添一些“伪指令”。n伪指令用于控制汇编软件如何处理和按什么规则编译程序。n伪指令不会产生“机器码”n不同的汇编器(仿
18、真器、仿真软件)具有一些不同的“伪指令”规定。n下面将介绍一些常用的伪指令ASM51汇编语言格式1.Label:标号,冒号结尾,表示程序入口。字母开头,通常少于8个字符。2.指令助记符:也可以是伪指令,后面如果有操作数的话必须有“空格”或“TAB键”将其与操作数分开3.操作数1:既是操作对象又是操作结果4.如果存在操作数2、3时,需要在前面用逗号隔开5.注释:前面用分号开头6.【】表示不一定存在,不是必须的【label:】指令助记符 【操作数1】【,操作数2】【,操作数3】【;注释】ASM51汇编保留字和特殊符号n保留字保留字常指:指令;寄存器名;伪指令,以及运算符号如:/等,这些字符串不能用
19、于作为标号、变量等,运算符不能用于标号、变量当中。n运算符运算符可以用于操作数中,起到运算作用。例如:MOV MEM+3,A,意义为:将A的内容送到MEM之后的第三个存储单元。n符号“$”在转移指令中当作label使用时,表示转到$符号所在行的前面,例如:SJMP$表示在本行作“死循环”。等效于:ABC:SJMP ABCASM51汇编器通用伪指令nORG 地址 定义程序/数据的起始地址nEND 汇编到此结束,其后面的内容将被忽略。同时也是程序结束的标志。nEQU 等值命令。定义变量地址或者常数名称。例如:ABC EQU 30HnDB 定义8位数据段(表格类常数)nDW 定义16位数据段(表格类
20、常数)nDS 预留一个数据段(单片机中不常用,因为只能在程序段中定义,而ROM不能修改)nBIT 定义位变量地址,用法与EQU相同。例如:fire bit p1.0ASM51汇编伪指令ORG举例ORG 0000HLJMP MAINORG 0003HLJMP INT0SAV;跳转到INT0服务程序ORG 000BHLJMP T0SAV;跳转到T0服务程序ORG 30HMAIN:主程序n意义:主程序从地址0000开始,实际又跳转到30H开始的主程序。INT0发生中断时,程序从0003H开始执行,并调转到INT0SAV程序执行。T0发生溢出中断时,从000BH开始执行。n这几个地址值是51单片机规定
21、的固定地址,在“中断系统”中再详细讨论ASM51汇编伪指令EQU/BITTEMPEQU 30H;定义变量TEMP地址为30HT_MODEQU 40H;定义定时器模式控制字常量40HnEQU之前的字符串可以理解为变量名,也可以理解为常量名,只要应用时前面加上“#”就是常量了!例如:qMOV TEMP,#TEMPq这条指令使30H地址内存入30H常数SFLAG BIT P1.0;定义SFLAG变量为P1.0引脚SIGN EQU 00H;定义SIGN变量为位地址00Hn有些编译器可以用EQU完全代替BIT来定义“位”ASM51汇编伪指令DB/DWTAB1:DB 0C0H,0F9H,0A4H,0B0H
22、,099HDB TAB2:DW 0C0F9H,0A4B0H,09992HDW n两个表格都定义了同样的内容共阳LED数码管显示代码表(段码表),它们分别依次代表:“0”;“1”;“2”;“3”;的显示代码。通过查表指令可以找出相应的显示代码。汇编语言程序的一般结构程序的一般结构按照下面顺序组成:1.用EQU/BIT定义变量、常量、端口2.用ORG指令和LJMP/AJMP定义中断向量表3.主程序:初始化堆栈、内存、端口、中断系统、允许中断,然后进入一个扫描循环体。4.独立模块区:子程序、中断服务程序等程序模块区。5.用END作为程序结束。6.程序用图示方式表达为下页线性程序的全部结构主程序入口初
23、始化允许中断循环体中断程序1中断程序n中断返回中断返回其他子程序、中断服务等循环体常为显示和键盘管理中断过程往往发生在循环体的某两条指令之间,不可预测。一般程序的一般结构v程序的局部可以设计成如下结构之一n顺序结构n循环结构n分支结构n子程序调用结构:模块化结构顺序结构与循环结构n已知RED;GRE和YEL为连续3个存储单元,将其依次右移1位。ROTATE:MOV A,YEL MOV C,ACC.0 MOV A,RED RRC A MOV RED,A MOV A,GRE RRC A MOV GRE,A MOV A,YEL RRC A MOV YEL,A RETROTATE:MOV A,YELM
24、OV C,ACC.0MOV R0,#REDMOV R7,#3 ;循环3次LOOP:MOV A,R0RRC AMOV R0,AINC R0DJNZ R7,LOOPRET当字节数多时,循环结构可以省去许多语句。REDGREYEL分支结构 子程序调用n“分支”通常都是有条件的n按“功能号”分支,就是“散转”n按条件分支,可以是标志位,可以是运算结果,相当于“如果满足条件就否则就”MAINLOOP:LCALL KEYSCANGCJNE A,#80H,KEYPROLCALL DISPLAYAJMP MAINLOOPKEYPRO:CJNE A,#0FH,KEY_NOFLCALL F_PROCAJMP MA
25、INLOOPKEY_NOF:CJNE A,#0EH,KEYNELCALL E_PROCAJMP MAINLOOPAJMP MAINLOOP查表举例指令MOVC A,A+DPTR和 MOVC A,A+PCSERCH1:MOV A,BUFFMOV DPTR,#TAB1 MOVC A,A+DPTRLJMP DISPLAYSERCH2:MOV A,BUFFADD A,#03H ;*MOVC A,A+PCLJMP DISPLAYTAB1:TAB1:DB 0C0H,0F9H,0A4HDB 0B0H,099H,092HDB 082H,0F8H,080HDB 090H表格中依次定义了从“09”的共阳LED数码管显示“7段码”*:LJMP DISPLAY指令占用3字节,即:MOVC指令到TAB之间相距3字节。n作业n4.2 4.3 4.4 4.5 4.6 4.11 4.12 n大作业n流量计量仪软件硬件设计(要求能测量、显示流量值,硬件原理图、软件原代码)
限制150内