《情境 电子显示屏的设计.ppt》由会员分享,可在线阅读,更多相关《情境 电子显示屏的设计.ppt(44页珍藏版)》请在三一办公上搜索。
1、子情景二 单灯闪烁,项目引入,在公共场合,可以看到各种各样的闪灯。单片机控制发光二极管的亮灭。,通过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条),共有控制程序转移类指令(不
2、包括位操作类的转移指令)。此类指令一般不影响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、LJ
3、MP后跟的是绝对地址,而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
4、 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,就转移
5、。转移到相对于当前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
6、,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就可判断出
7、哪个数大,哪个数小了。,举例:,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;如果R010H,则R1=0AAH;如果R010H,则R1=0FFH。,三、减1不为0转移指令(2条),DJNZ Rn,relDJNZ direct,relDJNZ指令的执行过程是这样的:它将第一个参数中的值减1,然后看这个值是否等于0,如果等于0,就往下执行,如果不等
8、于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 中,有一
9、部份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;位名称方式
10、:如 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;使
11、指定的位地址等于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就转移,否则就顺序执行。第二条指令则和
12、第一条指令相反,即如果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 0100
13、H 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,在指
14、令中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),
15、格式:DW 16位二进制数表,功能:从指定的地址单元开始,定义 若干个16位数据。,格式:字符名称 BIT 位地址,5.7定义位地址伪指令BIT,功能:将位地址赋予所规定的字符名称。,AQ BIT P0.0 DEF BIT 30H 把P00的位地址赋给字符AQ,把位地址30H赋给字符DEF。在其后的编程中,AQ可作P0.0使用,DEF可作位地址30H使用。,6.1 要求:占用存储空间少;运行时间短;程序的编制、调试及排错所需时间短;结构清晰,易读、易于移植,6 程序设计方法和技巧,6.2 程序设计的一般步骤(1)分析工作任务,明确要达到的工作目的、技术指标等。(2)确定解决问题的算法。算法就是
16、如何将实际问题转化成程序模块来处理,要对不同的算法进行分析、比较,找出最适宜的算法。(3)画程序流程图。其图形的符号规定均与高级语言流程图相同,如桶形框表示程序的开始或结束,矩形框表示需要进行的工作,菱形框表示需要判断的事情,指向线表示程序的流向等。(4)分配内存工作单元,确定程序与数据的存放地址。(5)编写源程序。(6)上机调试、修改源程序。,6.3 程序设计的一般技巧尽量采用循环结构和子程序结构。这样可以使程序的总容量大大减少,提高程序的效率,节省内存。尽量少用无条件转移指令。这样可以使程序条理更加清楚,从而减少错误。对于通用的子程序,除了用于存放子程序入口参数的寄存器外,子程序中用到的其
17、他寄存器的内容应压入堆栈,即保护现场。一般不必把标志寄存器压入堆栈。在中断处理程序中,除了要保护中断处理程序中用到的寄存器外,还要保护标志寄存器。用累加器传递入口参数或返回参数比较方便,在子程序中,一般不必把累加器内容压入堆栈。,汇编语言常用延时程序所用到的指令指令 占用机器周期数MOV Rn,#Data 1DJNZ Rn,rel 2RET 2NOP 1,7 延时程序,基本延时模式及延时时间的计算:单循环延时程序 MOV R0,#X;个机器周期D1:DJNZ R0,D1;2个机器周期 RET;2个机器周期 单延时时间:=2*X*T+1*T+2*T=(2*X+3)*T 假定晶振12MHZ时,当X
18、=0时循环256次,最长延时515s 当X=1时循环次,最短延时s,双重循环延时程序 MOV R1,#Y;1个机器周期D1:MOV R0,#X;1个机器周期D2:DJNZ R0,D2;2个机器周期 DJNZ R1,D1;2个机器周期 RET;2个机器周期双重循环延时时=(2*X+1+2)*Y*T+1*T+2*T=(2*X*Y+3*Y+3)*T假定晶振12MHZ时,最长延时131843s最短延时8s,三重循环延时程序 MOV R2,#Z;1个机器周期D1:MOV R1,#Y;1个机器周期D2:MOV R0,#X;1个机器周期D3:DJNZ R0,D3;2个机器周期 DJNZ R1,D2;2个机器
19、周期 DJNZ R2,D1;2个机器周期 RET;2个机器周期三重循环延时时间:=(2*X+1+2)*Y+1+2*Z*T+1*T+2*T=(2*X*Y*Z+3*Y*Z+3*Z+3)*T假定晶振12MHZ时,最长延时33751811s最短延时11s,1、设计硬件连接图,项目实施,将单片机的P1.7端口与发光二极管的阳极相连,二极管的阴极接地。当P1.7=1时,发光二极管点亮;当P1.7=0时,发光二极管灭。通过延时程序实现二极管持续点亮1S。,2、编写延时程序,s延时程序 MOV R2,#8 D1:MOV R1,#249 D2:MOV R0,#250 D3:DJNZ R0,D3 DJNZ R1,D2 DJNZ R2,D1 RET,ORG 0000HLJMP MAIN ORG 1000HMAIN:CLR P1.7 NEXT:CPL P1.7 MOV R2,#8 D1:MOV R1,#249 D2:MOV R0,#250 D3:DJNZ R0,D3 DJNZ R1,D2 DJNZ R2,D1 LJMP NEXTEND,3、编写总程序,4、调试运行程序,5、结果分析,