情境一 [1][1].2 电子显示屏的设计
子情景二 单灯闪烁,项目引入,在公共场合,可以看到各种各样的闪灯。单片机控制发光二极管的亮灭。,通过8051单片机控制一个发光二极管的亮灭闪烁,点亮时间持续1秒钟。,项目要求,项目分析,1、单片机简单程序的编写2、延时程序的编写2、单片机与发光二极管的连接 3、二极管闪烁程序,项目计划,1、设计单片机与二极管的硬件连接图2、编写程序3、运行调试程序,1 清0与取反指令(2条),取反:CPL A ;/AA例:若A=5CH,执行CPL A 结果:A=A3H,清0:CLR A ;0A,ComPlement Logic Operation,相关知识,2 控制转移类指令( 17条),共有控制程序转移类指令(不包括位操作类的转移指令)。此类指令一般不影响PSW。包括以下类型:无条件转移和条件转移相对转移和绝对转移长转移和短转移调用与返回指令,2.1 无条件转移类指令(4条),短转移类指令:AJMP addr11 长转移类指令:LJMP addr16 相对转移指令:SJMP rel 间接转移指令:JMP A+DPTR,(1)上面的前三条指令,统统理解成:PC值改变,即跳转到一个标号处。 那么他们的区别何在呢?,跳转的范围不同。,短转移类指令:AJMP addr11 长转移类指令:LJMP addr16 相对转移指令:SJMP rel,转移范围:2KB64KB-128+127,指令构成不同。 AJMP、LJMP后跟的是绝对地址, 而SJMP后跟的是相对地址。,指令长度不同 原则上,所有用SJMP或AJMP的地方都可以用 LJMP来替代。,间接转移指令:JMP A+DPTR,这条指令的用途也是跳转,转到什么地方去呢?这可不能由标号简单地决定了。 转移地址由A+DPTR形成,并直接送入PC。指令对A、DPTR和标志位均无影响。 本指令可代替众多的判别跳转指令,又称为散转指令,多用于多分支程序结构中。,(2)第四条指令与前三条指令相比有所不同,例: MOV DPTR,#TAB ;将TAB代表的地址送入DPTR JMP A+DPTR ;跳转TAB: AJMP ROUT0 ;跳转ROUT0开始的程序段TAB+2: AJMP ROUT1 ;跳转ROUT1开始的程序段TAB+4: AJMP ROUT2 ;跳转ROUT2开始的程序段TAB+6: AJMP ROUT3 ;跳转ROUT3开始的程序段 .ROUT0: .ROUT1: .ROUT2: .ROUT3:,执行该段程序后,程序将根据A中的内容转移到不同的程序段去执行-散转。A=0,转ROUT0A=2,转ROUT1A=4,转ROUT2A=6,转ROUT3,2.2 条件转移指令(8条),条件转移指令是指在满足一定条件时进行相对转移,否则程序继续执行本指令的下一条指令。,一、判A内容是否为0转移指令(2条),JZ rel ;如果A=0,则转移,否则顺序执行。 JNZ rel ;如果A0,就转移。转移到相对于当前PC值的8位移量的地址去。即: 新的PC值=当前PC+偏移量rel我们在编写汇编语言源程序时,可以直接写成: JZ 标号 ;即转移到标号处。,例:,MOV A,R0 JZ L1 MOV R1,#00H AJMP L2 L1: MOV R1,#0FFH L2: SJMP L2 END 在执行上面这段程序前:如果R0=0,结果R1=0FFH。而如果R00,则结果是R1=00H。 把上面的那个例子中的JZ改成JNZ,看看程序执行的结果是什么?,如果R0=0,结果R1=00H。如果R0 0,结果是R1中的值为0FFH。,二、比较不等转移指令(4条),CJNE A,#data,rel CJNE A,direct,relCJNE Rn,#data,relCJNE Ri,#data,rel此类指令的功能是将两个操作数比较,如果两者相等,就顺序执行,如果不相等,就转移。同样地,使用时,我们可以将rel理解成标号,即:CJNE A,#data,标号CJNE A,direct,标号CJNE Rn,#data,标号CJNE Ri,#data,标号,利用这些指令,可以判断两数是否相等。但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能:如果两数不相等,则CPU还会用CY(进位位)来反映哪个数大,哪个数小。如果前面的数大,则CY=0,否则CY=1。因此在程序转移后再次利用CY就可判断出哪个数大,哪个数小了。,举例:,MOV A,R0 CJNE A,#10H,L1 MOV R1,#0 ;如R0=10H,则不转移R1=00H; AJMP L3L1:JC L2 ;如CY=1即 R010H,则转移 AJMP L3L2:MOV R1,#0FFHL3:SJMP L3因此最终结果是:本程序执行前,如果R0=10H,则R1=00H;如果R0>10H,则R1=0AAH;如果R0<10H,则R1=0FFH。,三、减1不为0转移指令(2条),DJNZ Rn,relDJNZ direct,relDJNZ指令的执行过程是这样的:它将第一个参数中的值减1,然后看这个值是否等于0,如果等于0,就往下执行,如果不等于0,就转移到第二个参数所指定的地方去。例: DJNZ 10H,LOOP .LOOP: .,例: MOV 23H,#0AH CLR ALOOP: ADD A,23H DJNZ 23H,LOOP SJMP $上述程序段的执行过程是:将23H单元中的数连续相加,存至A中,每加一次, 23H单元中的数值减1,直至减到0,共加(23H)次。,3 空操作指令(1条),NOP空操作,就是什么事也不干,停一个周期,一般用作短时间的延时。,4 位操作指令( 17条),MCS-51单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套位变量处理的指令集,包括位变量传送、逻辑运算、控制程序转移等。在MCS-51 中,有一部份RAM和一部份SFR是具有位寻址功能的。位操作区:内部RAM的20H-2FH这16个字节单元,即128个位单元(位地址空间位007FH);可以位寻址的特殊功能寄存器:8031中有一,些SFR是可以进行位寻址的,这些SFR的特点是其字节地址均可被8整除, 如A累加器,B寄存器、PSW、IP(中断优先级控制寄存器)、 IE(中断允许控制寄存器)、SCON(串行口控制寄存器)、TCON(定时器/计数器控制寄存器)、P0-P3(I/O端口锁存器)。 在进行位处理时, CY用作“位累加器” 。,以PSW中位4( RS1 )为例。直接(位)地址方式:如 D4H;点操作符号方式:如 PSW.4,D0H.4;位名称方式:如 RS1;用户定义名方式:如用伪指令 bitSUB.REG bit RS1定义后,可用SUB.REG代替RS1。,位地址表达方式,4.1 位传送指令(2条),MOV C,bit;bit CMOV bit,C;C bit这组指令的功能是实现位累加器(CY)和其它位地址之间的数据传递。例:MOV C,P1.0;将P1.0的状态送给C。 MOV P1.0,C ;将C中的状态送到P1.0 ;引脚上去。,4.2 位清0和置位(4条),位清0指令 CLR C ;使CY=0 CLR bit ;使指令的位地址等于0。 例:CLR P1.0 ;即使P1.0变为0 位置1指令 SETB C ;使CY=1 SETB bit ;使指定的位地址等于1。 例:SETB P1.0 ;使P.0变为1,4.3 位逻辑运算指令 (6条),位与指令 ANL C,bit ;Cy与指定位的值相与,结果送CyANL C,/bit ;先将指定的位地址中的值取出后取反,再和Cy相与,结果送回Cy。但注意:指定的位地址中的值本身并不发生变化。例:ANL C,/P1.0,位取反指令 CPL C ;使Cy值取反。CPL bit ;使指定的位的值取反。例:CPL P1.0,位或指令 ORL C,bitORL C,/bit,4.4 位条件转移指令(5条),判Cy转移指令 JC relJNC rel 第一条指令的功能是如果Cy=1就转移,否则就顺序执行。 第二条指令则和第一条指令相反,即如果Cy=0就转移,否则就顺序执行。 同样理解: JNC 标号,判位变量转移指令 JB bit,relJNB bit,rel JBC bit,rel第一条指令:如果指定的(bit)=1,则转移,否则顺序执行,第二条指令功能相反。 同样理解:JB bit,标号第三条指令是如果指定的(bit)=1,则转移,并把该位清0,否则顺序执行。,5 伪指令,在汇编时起控制作用,自身并不产生机器码,而仅是为汇编服务的一些指令,称为伪指令。伪指令不属于80C51指令系统。,5.1 起始伪指令 ORG(Origin),功能:规定ORG下面目标程序的起始地址。,格式:ORG 16位地址,ORG 0100H START:MOV A,#05H ADD A,#08H MOV 20H,A ORG 0100H表示该伪指令下面第一条指令的起始地址是0100H,即MOV A,#05H指令的第一个字节地址为0100H,或标号START代表的地址为0100H。,功能:将一个数据或特定的汇编符号赋予规定 的字符名称。,5.2 结束伪指令 END,功能:汇编语言源程序的结束标志。 在END后面的指令,汇编程序不再处理。,格式:END,5.3 等值伪指令 EQU(Equate),格式:字符名称 EQU 数据或汇编符号,例如: PP EQU R0 ;PP=R0 MOV A,PP ;A R0 这里将PP等值为汇编符号R0,在指令中PP就可以代替R0来使用。,5.4 数据地址赋值伪指令 DATA,格式:字符名称 DATA 表达式,功能:将数据地址或代码地址赋予规定的 字符名称。,5.5定义字节伪指令DB(Define Byte),格式:DB 8位二进制数表,功能:从指定的地址单元开始,定义若干 个8位内存单元的数据。 数据与数据之间用“,”分割。,例如: ORG 4000H TAB: DB 73H,45,“A”,“2” TAB1:DB 101B 以上指令经汇编后,将对4000H开始的若干内存单元赋值。 (4000H)=73H,(4001H):2DH(注:45的16进制数),,5.6 定义字伪指令DW(Define Word),格式:DW 16位二进制数表,功能:从指定的地址单元开始,定义 若干个16位数据。,格式:字符名称 BIT 位地址,5.7定义位地址伪指令BIT,功能:将位地址赋予所规定的字符名称。,