学习任务三单片机循环彩灯制作-《单片机应用技术》教学课件_第1页
学习任务三单片机循环彩灯制作-《单片机应用技术》教学课件_第2页
学习任务三单片机循环彩灯制作-《单片机应用技术》教学课件_第3页
学习任务三单片机循环彩灯制作-《单片机应用技术》教学课件_第4页
学习任务三单片机循环彩灯制作-《单片机应用技术》教学课件_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学习任务三单片机循环彩灯制作单片机应用技术学习目标(1)掌握单片机端口的控制方法;(2)熟悉常用的单片机传送指令的使用方法;(3)理解常用几种结构的程序设计特点;(4)掌握单片机数据输入的方法;(5)掌握常用元器件的特性和测试方法;(6)掌握单片机子程序的编写及调用方法;(7)掌握单片机延时程序的编写方法。知识要求学习目标

任务说明在本学习任务中,设计一个应用实例——循环彩灯(又称为流水灯)制作。就是将若干个发光二极管排列成一列或其他形状,在单片机的控制下依次发光,达到流动的效果。单片机循环彩灯系统的功能如下:(1)把8个发光二极管排成一列,单片机控制流水灯做单一灯的流动,从左至右再从右至左,如此反复。每一个发光二极管点亮时间为500ms。(2)利用开关作为单片机的输入,拨动不同的开关,循环彩灯点亮的方式和花样有所不同。学习目标能力要求(1)能够灵活运用单片机中的传送指令;(2)能够使用WAVE6000软件对汇编程序进行调试、编译等;(3)能够进行ED电路的正确连接及调试;(4)能够进行时钟电路、复位电路的正确连接及调试;(5)能够根据项目要求设计出硬件电路;(6)能够进行本项目单片机系统控制电路的正确连接及调试;(7)能够使用编程器下载程序到单片机中。一单片机中常用的数制及编码1.数制、基数、位权1)数制数制就是规定计数的进位制度,又称为进位计数制。不同的计数方法其进位制度就不同。例如,十进制数是“逢十进一”的进位制度,而钟表计时中分、秒之间的进位制度是“逢六十进一”的进位制度。2)基数十进制数中用于组成数字的编码集合中的数码为0~9这10个字符,而钟表计时中采用0~59共60个字符,由此得出“基数”概念。基数是指在某种数制中用于组成数字允许选择的数码集合中的数码个数。不同的数制其基数是不同的。一单片机中常用的数制及编码3)位权以十进制为例,如“6”这个数码在个位表示6,在十位表示60,在百位表示600,……其特点是数码在相应位乘以一个固定的常数,个位是1即100,十位是10即101,百位是100即102,……这个固定常数的底就是该进制的基数,指数与数码所在的位置有关,由此提出“位权”概念。位权即一个常数,这个常数就是一个以该进制的基数为底,以数码所在位置的编号为指数的幂数。例如,将十进制数205.349按照“位权”的形式展开,则有205.349=2×102+0×101+5×100+3×10-1+4×10-2+9×10-3一、单片机中常用的数制及编码2.任意进制的通用表示R进制的数可以用kn-1kn-2…k2k1k0k-1k-2…k-m表示(其中,k表示数码,n表示整数位数,m表示小数位数,R表示基数),其按照位权展开相加的形式为

kn-1×Rn-1+kn-2×Rn-2+…+

k2×R2+k1×R1+k0×R0+k-1×R-1+k-2×R-2+…+k-m×R-m一、单片机中常用的数制及编码3.常用数制表3-1四种常用数制对照表十进制数二进制数八进制数十六进制数十进制数二进制数八进制数十六进制数000091001119111110101012A2102211101113B3113312110014C41004413110115D51015514111016E61106615111117F71117716100002010810001081710000121114.各种数制间的转换例3-1将二进制数1010.101转换成十进制数。解1010.101=1×23+1×21+1×2-1+1×2-3=10.625例3-2将八进制数54.6转换成十进制数。解54.6=5×81+4×80+6×8-1=44.75例3-3将十六进制数2BA.8转换成十进制数。解2BA.8=2×162+11×161+10×160+8×161=512+176+10+0.5=698.5一、单片机中常用的数制及编码2)十进制数转换成非十进制数例3-4将十进制数57.24转换成二进制数。解基数整数部分余数小数部分整数0.242∣57×22∣28→10.48→02∣14→0×22∣7→00.96→02∣3→1×22∣1→11.92→10→1整数部分为111001小数部分为001故57.24D=111001.001B。一、单片机中常用的数制及编码3)二进制数转换成十六进制数例3-5将二进制数101111101.011转换为十六进制数。解000101111101.0110↓↓↓↓17D.6故101111101.011B=17D.6H。一、单片机中常用的数制及编码4)十六进制数转换成二进制数例3-6将十六进制数28F.6转换为二进制数。解28F.6↓↓↓↓001010001111.0110故28F.6H=(1010001111.011)2。一、单片机中常用的数制及编码4)十六进制数转换成二进制数例3-6将十六进制数28F.6转换为二进制数。解28F.6↓↓↓↓001010001111.0110故28F.6H=(1010001111.011)2。一、单片机中常用的数制及编码5.单片机中常用编码BCD码就是二-十进制编码,它用4位二进制数表示1位十进制数,称为压缩的BCD码。因为4位二进制数共有24=16种组合状态,故可选其中10种编码来表示0~9这10个数码字符,不同的选法对应不同的编码方案。按编码方案的不同又可分为有权码和无权码。

8421BCD码是一种最常用的编码。4位二进制码的权从前到后分别为8、4、2、1。其特点如下。(1)由4位二进制数0000~1001分别表示十进制数0~9。(2)每4位二进制数进位规则为逢十进一。(3)当进行两个BCD码运算时,为了得到BCD码结果,需要进行十进制调整。1)BCD码一、单片机中常用的数制及编码2)ASCII码ASCII码是由7位二进制数码构成的字符编码,常用的ASCII码表共有27=128种组合状态,用它们表示52个大小写英文字母、10个十进制数、7个标点符号、9个运算符号及50个其他控制符号。

在表示这些符号时,用高3位表示行码,低4位表示列码。常用的十进制数0~9的ASCII码为30H~39H,大写字母A~Z的ASCII码为41H~5AH,小写字母a~z的ASCII码为61H~7AH。一、单片机中常用的数制及编码表3-2常用的ASCII中的部分符号说明如下。NUL空FF换页CAN作废SOH标题开始CR回车EM载终STX正文结束SO移出符SUB取代ETX本文结束SI移入符ESC换码EOT传输结束DLE转义符FS文字分割符ENQ询问DC1设备控制1GS组分割符一、单片机中常用的数制及编码ACK应答DC2设备控制2RS记录分割符BEL报警符DC3设备控制3US单元分割符BS退一格DC4设备控制4SP空格HT横向列表NAK否定DEL删除LF换行SYN同步VT纵向列表ETB信息组传送结束一、单片机中常用的数制及编码二、常用指令及延时程序详解1.数据传送指令MOVP1,#0FFHMOVP2,#0FFH以上传送指令是初始化端口,就是在并行口P0、P1、P2或P3作为输入数据的端口时,先给此8位并行口送去1,然后再读这些并行端口数据,以保证读入的数据不出错。MOVA,P1;可以用ANLA,P1指令来完成同样的任务MOVP0,A以上两条传送指令的用途是:读取端口P1的输入值,再把这一数值送给P0端口输出。2.控制转移类指令LCALLDEL500ms……RETSJMPLOOPJNBACC.0,KEY0JNBACC.7,KEY1DJNZR3,LOOP1二、常用指令及延时程序详解LCALLDEL500ms……RETSJMPLOOPJNBACC.0,KEY0JNBACC.7,KEY1DJNZR3,LOOP1上面第一条指令是长调用子程序命令,调用子程序DEL500ms;RET是子程序DEL500ms的最后一条语句,表示子程序返回到LCALL的下一条指令继续执行;SJM-PLOOP指令表示无条件转移到标号为LOOP的语句处;JNBACC.0,KEY0指令是当累加器A的最低位等于0时,转移到KEY0处去执行;同理JNBACC.7,KEY1指令是当累加器A的最高位等于0时,转移到KEY1处去执行;DJNZR3,LOOP1指令先执行R3-1,若R3-1的值不为0时,转移到LOOP1处执行,一般用于循环的次数判定。二、常用指令及延时程序详解3.循环移位指令RLARRA以上两条指令把累加器A中的数据循环移动1位,不同的是RLA是向左循环1位,而RRA是向右循环1位。这两条指令常用在彩灯移动点亮方面。二、常用指令及延时程序详解4.延时子程序指令周期就是指执行一条指令的时间,它一般是机器周期的整数倍。某条指令的指令周期是机器周期的几倍,就称它为几周期指令。

时钟周期可以通过所接的晶振频率求倒数求得,如使用的是12MHz的晶振,那么它的时钟周期就是1/12μs。时钟周期

1个机器周期=12个时钟周期时钟周期=1/晶振频率=1/12μs机器周期=12×时钟周期=1μs机器周期时序分析指令周期二、常用指令及延时程序详解(2)延时程序

软件延时程序在单片机程序设计中应用十分广泛,其主要设计思想就是利用DJNZ减1指令构成循环程序,只占用CPU的时间,而不进行任何实质性操作来实现延时功能。有时在这个循环体中再加入一条空操作指令NOP,这样经过循环体的循环,延时的时间就会更长。二、常用指令及延时程序详解任务一循环彩灯的简易控制工作内容及要求本任务通过单片机对接在P0口上的8个发光二极管进行移动和闪烁控制,形成一个简易的循环彩灯控制系统。控制过程为:上电后第一个彩灯(二极管)点亮500ms后,开始由右向左移动,即从低位向高位移动,移动到最左边后再返回向右移动,当彩灯返回移动到最开始处时8个彩灯一起闪烁3次,然后整个程序再重复执行下去,直到关闭电源才会停止。通过实训熟悉单片机控制I/O端口的方法,了解和熟悉单片机硬件系统和软件指令系统的开发过程。任务一循环彩灯的简易控制任务分析根据本任务的工作内容及要求,单片机如何控制彩灯的亮灭是任务实施的关键。由于单片机的结构原因,51系列单片机对外提供负载电流的能力很弱,如果外接多个负载,需要单片机对外提供的总电流会很大,超出它的供给能力,这样不仅驱动不了这些负载,还会造成单片机损坏。但单片机接受灌电流的能力却很强,所以本任务中的8个发光二极管的负极与P0口的各位直接连接,由于不同的发光二极管驱动电流不同,每个发光二极管的正极串联一个47~220Ω的限流电阻到VCC,这样就得到了本例的循环彩灯系统电路图,如图3-1所示。任务一循环彩灯的简易控制图3-1循环彩灯系统电路图任务一循环彩灯的简易控制如何点亮这些发光二极管呢?根据前面学到的知识,只需使与之对应的端口输出低电平0即可,这样就会使此二极管正极与负极间产生正向偏置电压,并由电源提供电流流过二极管,使之点亮发光。同理,若使二极管熄灭,只需使与之对应的端口输出高电平1即可,使二极管两端等电位或反向偏压,此时二极管截止不发光。任务一循环彩灯的简易控制由上述分析可以得出P0端口的工作流程:只有P0.0低电平—只有P0.1低电平—只有P0.2低电平—……—只有P0.6低电平—只有P0.7低电平—只有P0.6低电平—……—只有P0.1低电平—只有P0.0低电平—[P0全为高电平(8个灯全灭)—P0端口全为低电平(8个灯全亮)]共3次—……(循环)。根据系统的功能要求,切换不同发光二极管的时间间隔为500ms。任务一循环彩灯的简易控制一、顺序结构程序设计顺序结构程序在执行时是从第一条指令开始依次执行每一条指令,直到执行完毕。这种结构的程序简单明了,结构清晰,往往是构成复杂结构程序的基础。但这种结构编写出来的程序在修改时效率低,且程序冗长、占用存储空间大。任务一循环彩灯的简易控制二、分支结构程序设计在一个实际的应用程序中,程序不可能始终是顺序执行的,通常需要根据实际问题设定条件,通过对条件是否满足的判断产生一个或多个分支,以决定程序的流向,这种程序称为分支程序。分支程序的特点是程序中含有条件转移指令。51系列单片机指令系统中直接用来判断分支条件的指令有JZ、JNZ、CJNE、DJNZ、JC、JNC、JB、JNB等。正确合理地运用条件转移指令是编写分支程序的关键。任务一循环彩灯的简易控制三、循环结构程序设计1.循环初始化循环初始化程序段位于循环程序的开头,用于完成循环前的准备工作。例如,给循环体计数器、各数据地址指针及运算变量设置初值等。2.循环处理循环处理程序段位于循环程序的中间,又称循环体,是循环程序不断重复执行的部分,用于对数据进行实际处理。此部分要求编写得尽可能简洁,以提高程序的执行速度。任务一循环彩灯的简易控制3.循环控制循环控制包括修改变量和循环结束条件检测两部分。通过修改循环计数器和数据指针的值,为下一次循环和循环结束检测做准备,然后通过条件转移来判断循环是否结束。4.循环结束循环结束程序段用于存放执行循环程序后的运算结果等操作。循环程序在结构上通常有两种编制方法:一种是先处理后判断(如延时程序),循环处理部分至少执行一次;另一种是先判断再处理,循环处理部分可能根本不执行就结束了。在程序设计时应根据需要采用不同的设计方法。实训模块一顺序结构程序设计的彩灯控制系统一、硬件电路的搭建表3-3实训电路所需要的元器件元器件名称主要参数数量元器件名称主要参数数量单片机AT89S511电解电容10μF1电阻10kΩ1面包板3个组合150Ω(排阻也可)8WAVE仿真器H5LL1瓷片电容30pF2编程器Tom1开关电源+5V/3W1插线—若干LED—8计算机—1晶振6MHz或12MHz1钳子尖口1接线开关可用独立开关2螺钉旋具一字及十字2排阻10kΩ(可以用独立的)1一一一实训模块一顺序结构程序设计的彩灯控制系统

注意连接完成后,需要对照电路图进行仔细检查,当把编译好的程序下载到单片机后再连接电源。在连接电源时务必确保电源的正负极没有接反,否则单片机和其他一些元器件很容易被烧坏,还容易发生危险。实训模块一顺序结构程序设计的彩灯控制系统

搭建电路3.AT89S51单片机40脚接电源VCC,20脚接地。1.按照原理图的要求在面包板上进行单片机、时钟电路、复位电路的安装。2.安装发光二极管、排阻等其他元器件。实训模块一顺序结构程序设计的彩灯控制系统结合图3-1所示电路,说出电路中都包括哪些元器件,写出这些元器件的名称、参数和数量。实训问题实训模块一顺序结构程序设计的彩灯控制系统单片机电路在搭建时,首先考虑能使单片机工作的最小系统。在以后的实训中必须熟练掌握单片机的最小系统的连接方法,这是单片机实训的第一步。图所示就是单片机最小系统在面包板上搭建的效果图。实训问题实训问题:图3-2中有6个管脚接好了,单片机也就做好工作准备了,把它们找出来,说明这些管脚的功能。实训模块一顺序结构程序设计的彩灯控制系统二、单片机端口输出数据表表3-4彩灯状态控制表步骤P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0十六进制数灯亮情况1111111100FEH1灯亮2111111010FDH2灯亮3111110110FBH3灯亮4111101110F7H4灯亮5111011110EFH5灯亮6110111110DFH6灯亮7101111110BFH7灯亮8011111117FH8灯亮实训模块一顺序结构程序设计的彩灯控制系统表3-4彩灯状态控制表步骤P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0十六进制数灯亮情况9101111110BFH7灯亮10110111110DEH6灯亮11111011110EFH5灯亮12111101110F7H4灯BH3灯DH2灯EH1灯亮16111111110FFH全灭170000000000H全亮实训模块一顺序结构程序设计的彩灯控制系统三、循环彩灯顺序结构程序设计1.程序设计思路根据前面的系统分析可以得到软件程序的设计思路:把表3-4中的数据依次向P0端口输出,为了保证彩灯显示的效果,把切换不同发光二极管的时间间隔设为500ms,最后再把全灭和全亮数据送出三次,全亮和全灭之间的时间间隔也设为500ms,时间延时通过调用延时500ms子程序来实现。按这个思路,利用传送指令和子程序调用指令很容易就把这个程序编制出来了。实训模块一顺序结构程序设计的彩灯控制系统2.程序设计

ORG0000H

LOOP:MOVP0,#0FEH;点亮第1个灯(最右侧)

LCALLDEL500ms;延时500ms

MOVP0,#0FDH;点亮第2个灯

LCALLDEL500ms;延时500ms……;省略部分

MOVP0,#0BFH;点亮第7个灯

LCALLDEL500ms实训模块一顺序结构程序设计的彩灯控制系统

MOVP0,#7FH;点亮第8个灯

LCALLDEL500ms

MOVP0,#0BFH;点亮第7个灯

LCALLDEL500ms……;省略部分

MOVP0,#0FEH;点亮第1个灯

LCALLDEL500ms

MOVP0,#0FFH;8个灯全灭实训模块一顺序结构程序设计的彩灯控制系统LCALLDEL500msMOVP0,#00H;8个灯全亮LCALLDEL500ms……;省略部分LJMPLOOP;返回重复DEL500ms:MOVR1,#5;延时500ms子程序LOOP3:MOVR2,#200实训模块一顺序结构程序设计的彩灯控制系统LOOP2:MOVR3,#250LOOP1:DJNZR3,LOOP1DJNZR2,LOOP2DJNZR1,LOOP3RETEND实训模块一顺序结构程序设计的彩灯控制系统实训问题把上面没有写全的程序(省略部分)补全,写到下面的空白处。实训模块一顺序结构程序设计的彩灯控制系统实训模块一顺序结构程序设计的彩灯控制系统四、软件仿真调试利用WAVE6000仿真软件进行如下操作:先进行新文件的建立,输入上述程序,然后保存文件,命名为“ED1.AS”;再建立项目文件,把保存好的“ED1.AS”加入项目文件中并保存;设置仿真器,选择伟福仿真器;然后编译项目得到程序的十六进制文件,为以后写入单片机时用。程序编译完成后,单击工具栏中的“单步运行”按钮开始调试程序。如图3-3所示,调试结束后,如果发现各端口和寄存器的数值变化与预测的一致,说明程序没有问题,仿真成功,可以写入单片机进行实际工作了。实训模块一顺序结构程序设计的彩灯控制系统图3-3彩灯顺序结构程序仿真调试图实训模块二顺序结构程序设计的彩灯控制系统一、彩灯循环结构程序的指令应用1.移位指令1)循环左移指令:RLA执行循环左移指令时,ACC中的每一位向左循环移动一位。每次移出ACC的位7进入位0,“ACC.7”→“ACC.0”,如图3-4所示。该指令不影响标志位。

2)循环右移指令:RRA执行循环右移指令时,ACC中的每一位向右循环移动一位。每次移出ACC的位0进入位7,即“ACC.0”→“ACC.7”,如图3-5所示。该指令不影响标志位。实训模块二顺序结构程序设计的彩灯控制系统图3-4循环左移操作图3-5循环右移操作实训模块二顺序结构程序设计的彩灯控制系统2.循环控制指令通过表3-4所列的端口输出数据可以总结出彩灯是先从右向左移位的,每次移动一位,一共移动8位到最左侧,然后再返回,用了7次移动返回到原处。显然用上述介绍的循环移动指令能使“0”流动起来,但流动多少次如何进行控制呢?这里需要用循环控制指令DJNZ来控制循环的次数,于是有如下指令应用。

MOVR1,#8;循环次数LOOP:……(循环体)DJNZR1,LOOP;判断循环次数是否为8次实训模块二顺序结构程序设计的彩灯控制系统二、循环结构程序设计1.循环结构程序设计思路先让所有灯熄灭,再让第一个灯点亮,然后利用循环移动指令向左移动一次点亮第2个灯,判断循环是否到第7次,不到继续左移一位……右移的方法与左移的相同,最后让灯全灭全亮3次,接着程序开始循环。2.编写循环结构程序ORG00HSTART:MOVP0,#0FFHMOVR1,#8

MOVA,#0FEHROTLEEF:MOVP0,ALCALLDEL500msRLADJNZR1,ROTLEFT实训模块二顺序结构程序设计的彩灯控制系统MOVR2,#8ROTRIGHT:RRAMOVP0,ALCALLDEL500msDJNZR2,ROTRIGHTMOVR3,#3;闪烁三次GLITTER:MOVP0,#0FFH;全灭

LCALLDEL500ms

MOVP0,#00H;全亮

LCALLDEL500ms实训模块二顺序结构程序设计的彩灯控制系统

DJNZR3,GLITTERSJMPSTARTDEL500ms:MOVR4,#5;延时500ms子程序LOOP3:MOVR5,#200LOOP2:MOVR6,#250LOOP1:DJNZR6,LOOP1DJNZR5,LOOP2DJNZR4,LOOP3RETEND实训模块二顺序结构程序设计的彩灯控制系统三、程序编译下载及软硬件联合调试1.循环结构程序的软件仿真利用WAVE6000仿真软件进行如下操作:先进行新文件的建立,输入上述程序然后保存文件,命名为“ED2.AS”;再建立项目文件,把保存好的“ED2.AS”加入项目文件中并保存;设置仿真器,选择伟福仿真器;然后编译项目得到程序的十六进制文件“ED2.EX”,为以后写入单片机时用。再打开CPU内部窗口和“外设”中的端口窗口,接着单击工具栏中的“单步运行”按钮开始调试程序,观察输出端口的值和相关寄存器的值,看是否与设计相同。这时得到的窗口提示如图3-6所示,如果调试中发现没有实现系统功能,那么立即进行修改,再保存,再编译。经过程序的修改编译和多次调试无误后,得到最终编译好的十六进制文件。实训模块二顺序结构程序设计的彩灯控制系统图3-6彩灯循环结构程序仿真调试图实训模块二顺序结构程序设计的彩灯控制系统2.软硬件联合调试软硬件联合调试步骤如下。(1)通过数据线将编程器与计算机相连(现在的编程器大多都是USB口连接),如图3-7所示。(2)将A89S51芯片插接到编程器上。(3)在计算机中找到源程序编译后生成的“LED1.HEX”或“LED2.HEX”。(4)利用编程器软件将文件“LED1.HEX”或“LED2.HEX”烧录到AT89S51芯片的Flash形式的程序存储器中,如图3-8所示。实训模块二顺序结构程序设计的彩灯控制系统图3-7编程器连接示意图实训模块二顺序结构程序设计的彩灯控制系统图3-8编程器程序下载示意图实训模块二顺序结构程序设计的彩灯控制系统(5)将烧录好的A89S51芯片从编程器上取下,安放到面包板上电路的原来位置。(6)再仔细检查硬件电路是否接线正确。(7)接通开关电源,控制系统将独立运行,再次观察发光二极管的状态。循环彩灯脱机运行如图3-9所示。图3-9自动控制彩灯系统实训效果图实训模块二顺序结构程序设计的彩灯控制系统任务二可人工干预的彩灯控制系统设计工作内容及要求本任务是在P1端口设置8个开关作为输入设备,开关的一端通过上拉电阻直接接电源,另一端接地,通过读取P1的状态,使相关的二极管点亮或进行彩灯的花式闪烁。通过本任务的学习,使学生熟悉硬件电路的设计和软件程序开发过程。任务分析在前一个任务彩灯电路的基础上,在P1端口接8位开关,在P0口接8只发光二极管,拨动开关使开关闭合,相对应的发光二极管点亮,即把当时的开关状态显示出来。在不改变电路的情况下,对程序修改控制彩灯的变化样式。如果按下接在P1.0上的开关,发光二极管最末一个点亮并向左循环移动;按下接在P1.7上的开关,发光二极管有一个点亮并向右循环移动;其他开关按下时,对应的发光二极管点亮。任务二可人工干预的彩灯控制系统设计一、如何把数据送给单片机的I/O端口在单片机应用系统中,通常应具有人机对话功能,这些功能一般采用键盘系统来实现。数据输入的方法通常有两种,即数据直接输入法和数据增减输入法。对于初学者来说,我们采用简易化的键盘系统来进行对I/O端口的数据输入,那就是用拨位开关作为输入设备,同样也能给端口输入数据或控制参数。任务二可人工干预的彩灯控制系统设计二、分支结构程序设计1.位地址(1)位寻址区。在51系列单片机中,有一部分RAM和一部分SFR是具有位寻址功能的,也就是说这些RAM中的20~2F共16个单元中的每一个位都有自己的地址,可以直接用这个地址来对这些位单独进行操作,这些位就叫51单片机的位寻址区。可以进行位寻址的一共是16×8=128个,编码为00H~7FH。

(2)可以位寻址的特殊功能寄存器。51系列单片机中的特殊功能寄存器SFR中的有一些也可以进行位寻址操作,这些SFR的特点是它们的地址均可以被8整除,即这些寄存器的地址最后一位是“0”或“8”的都可以进行位操作,如累加器A、B寄存器、PSW、IP、IE、P0~P3等。任务二可人工干预的彩灯控制系统设计实训问题对于特殊寄存器SFR中的具有位寻址功能的存储器,它们的某一位数据的位地址通常采用下面的方法表述。例如,累加器ACC具有位寻址功能,它的D0位的位地址可以写成“ACC.0”。再如,P1也是一个具有位寻址功能的SFR,它的D1位的位地址可以写成“P1.1”,其他的具有位寻址功能的SFR都可以这样表述。任务二可人工干预的彩灯控制系统设计2.位操作指令位操作指令的种类很多,在本任务中,我们只使用位控制转移指令。其主要包括下面三种指令。JBbit,relJNBbit,relJNCbit,rel

第一条指令是如果指定的bit位中的值是1,则转移,否则顺序执行。同样,我们将rel理解成标号,表示转移的目的地址。第二条指令除了跳转条件和第一条相反,其他都相同,rel同样理解成标号。第三条指令与第一条类似,都是指定的bit位中的值是1,则转移,但还要把bit所指定的那一位存储器的值清零。

位控制转移指令任务二可人工干预的彩灯控制系统设计

把外接的输入开关的状态送给单片机的累加器A中,再进行相应位的判断,由于端口所接开关的状态值在ACC中没有变化,判断ACC某位的值就可获得相应开关的状态,根据系统功能再进行相应的控制操作,这样就形成了分支结构的程序设计。参考程序如下。MOVA,P1JNBACC.0,ROTLEETJNBACC.1,ROTRIGHT……本任务分支结构程序设计方法任务二可人工干预的彩灯控制系统设计实训模块一读取开关状态并输出一、设计并搭建输入开关控制的彩灯电路1.彩灯电路的设计思路根据工作内容和要求,搭建具有开关控制的彩灯控制系统。在P1口外接8位拨位开关,开关的一端通过上拉电阻直接接到+5V电源上,另一端并到一起接地。根据经验值此处的上拉电阻采用10kΩ的排阻,不但节省空间而且安装调试方便。实训模块一读取开关状态并输出2.开关控制的彩灯电路的设计搭建图3-10人工干预的循环彩灯控制电路图实训模块一读取开关状态并输出二、读取开关状态并输出的程序设计1.程序设计思路系统软件程序是在硬件的基础上进行设计编写的,由于P1端口为输入口,P0端口为输出口,如果将P1口的状态读入到单片机的累加器A中,再把A中的这一数值直接送到P0口输出,就会在发光二极管上显示开关的闭合情况。实训模块一读取开关状态并输出2.开关状态读取输出程序设计

ORG00HMOVP1,#0FFH

MOVP0,#0FFHLOOP:MOVA,#0FFH

MOVA,P1;读开关状态,可以写成ANA,P1

MOVP0,A;把读入的开关状态直接送到P0口显示

LCALLDEL500msSJMPLOOP实训模块一读取开关状态并输出DEL500ms:;延时500ms子程序MOVR1,#5LOOP3:MOVR2,#200LOOP2:MOVR3,#250LOOP1:DJNZR3,LOOP1DJNZR2,LOOP2DJNZR1,LOOP3RETEND实训模块一读取开关状态并输出三、程序编译下载到单片机并调试1.程序编译与仿真调试利用WAVE6000仿真软件进行如下操作。先进行新文件的建立,输入上述程序,然后保存文件,命名为“LED3.ASM”;再建立项目文件,把前面保存好的“LED3.AS”加入项目文件中并保存;设置仿真器,选择伟福仿真器;然后编译项目得到程序的十六进制文件“LED3.HEX”,为以后写入单片机时用。再打开CPU内部窗口和“外设”中的端口窗口,接着开始单击工具栏中的“单步运行”按钮开始调试程序,观察输出端口的值和相关寄存器的值,看是否与设计相同。如果调试中发现没有实现系统功能,那么现场进行修改,再保存,再编译。经过程序的修改编译和多次调试无误后,得到最终编译好的十六进制文件。实训模块一读取开关状态并输出实训问题

在8个开关中,写出第2个和第7个开关闭合时累加器A中的值,画出端口P0和P1现场调试的仿真情况。实训模块一读取开关状态并输出2.系统软硬件联合调试

当利用仿真软件WAVE6000调试程序无误后,把得到的十六进制文件“LED3.HEX”通过编程器写入到单片机中进行软硬件联合调试,直到最终达到设计要求为止。实训模块二手动控制的循环彩灯系统设计一、输入开关状态的判断根据人工干预的循环彩灯控制电路图(图3-10)可知,如果没有开关按下闭合,则P1口的值就全是高电平“1”,这样读取P1口的值为“0FFH”。当我们把读取P1口的值跟“0FFH”比较时,如果两个数不相等,就说明有开关按下来,根据按键的不同进行不同的操作。如果两个值相等,说明没有键按下,可以返回继续读取P1端口。可以用下面的语句进行开关状态的判断。

LOOP:MOVA,P1CJNEA,#0FFH,XXXSJMPLOOP实训模块二手动控制的循环彩灯系统设计二、分支结构程序的编写分支结构程序的编写如下。ORG00H

MOVP1,#0FFH;读P1口之前,对其进行初始化

MOVP0,#0FFH;对P0初始化LOOP:MOVA,P1;读开关状态JNBACC.0,ROTLEET;第1个开关闭合,转循环左移程序JNBACC.7,ROTRIGHT;第8个开关闭合,转循环右移程序实训模块二手动控制的循环彩灯系统设计MOVP0,A;不是第1和第8个开关闭合,就输出开关当前状态

LCALLDEL500ms;延时500msSJMPLOOPROTLEET:;左循环程序MOVA,#0FEH

RETURN:MOVP0,A;最右侧灯点亮LCALLDEL500msRAL;循环左移JNBP1.0,RETURN;第1个开关还闭合吗?SJMPLOOPROTRIGHT:;循环右移程序MOVA,#7FHRETURN1:MOVP0,A;最左侧灯点亮LCALLDEL500msRRAJNBP1.7,RETURN1;第8个开关还闭合吗?SJMPLOOP实训模块二手动控制的循环彩灯系统设计DEL500ms:;延时500ms子程序

MOVR3,#5LOOP3:MOVR4,#200LOOP2:MOVR5,#250LOOP1:DJNZR5,LOOP1DJNZR4,LOOP2DJNZR3,LOOP3RETEND实训模块二手动控制的循环彩灯系统设计三、系统软硬件联合调试1.软件程序总体仿真(1)打开WAVE仿真软件,选择“新建文件”,输入分支结构系统软件程序。(2)保存新建文件,扩展名必须为“.ASM”或“.asm”。(3)选择“新建项目”,加入刚保存的新建文件。(4)保存新建项目,系统自动添加项目名称的扩展名。(5)仿真器设置中,在“语言”选项里选“伟福汇编器”。(6)在“项目”菜单中选“编译”或按F9键,进行程序编译。(7)根据编译提示信息进行修改,直到编译成功,生成可执行的十六进制文件“.HEX”。(8)打开CPU窗口和外设端口,“单步运行”或设置好断点进行“连续运行”。实训模块二手动控制的循环彩灯系统设计程序仿真窗口如图3-11所示图3-11分支结构彩灯程序仿真图实训模块二手动控制的循环彩灯系统设计实训问题

结合分支结构仿真过程,“JNBP1.0,RETURN”和“JNBP1.7,RETURN1”的作用是什么?把这两条语句去掉,会出现什么样的问题?实训模块二手动控制的循环彩灯系统设计2.手动控制彩灯系统软硬件联合调试(1)把单片机从电路板上取下,放到编程器上。(2)打开

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论