实验流水灯程序.doc
上传人:王子****青蛙 上传时间:2024-09-10 格式:DOC 页数:5 大小:1.5MB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

实验流水灯程序.doc

实验流水灯程序.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实验二“流水灯”一、实验目的:1.初步了解汇编语言2.通过实验了解单片机最小系统3.了解单片机的I/O口通信。4.学习延时子程序的编写和使用.二、实验内容:1.流水灯(跑马灯)流水表步骤P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7十六进制1011111117FH2101111110BFH3110111110DFH4111011110EFH5111101110F7H6111110110FBH7111111010FDH8111111100FFH(1)……MOVP1,#7FHACALLDELAYMOVP1,#0BFHACALLDELAYMOVP1,#0DFHACALLDELAY……MOVP1,#0FDHACALLDELAYMOVP1,#0FFHACALLDELAY……不科学(2)指令指令类别功能说明ORG伪指令用于设计程序计数器PC的初始值,一般出现在程序开始处MAIN标号程序中使用一个便于理解的字符串来指向程序存储器中的地址MOVP0,#00H数据装载将立即数00H装载到P0寄存器,即从P0口输出CALLDELAY调用指令调用程序存储器范围内的子程序JMPSTART跳转指令控制程序的走向和实现循环执行特定程序段RRC逻辑操作指令经过进位位的累加器循环右移RLC逻辑操作指令经过进位位的累加器循环左移DJNZR5,$循环指令将一段程序重复执行一定次数(R5的值决定了重复的次数)。寄存器减一,不为零则转移。RET返回指令在子程序末尾,提示子程序结束,返回主程序END伪指令告诉汇编器程序的结束点,END以后的程序被视为是无效的ORG00H;起始地址START:;程序一开始,初始一些所需要变量,如进位C的清0等MOVA,#0FFH;累加器A的8位全置1(0FFH),发光二极管全熄灭CLRC;进位C被清0,C=0MOVR1,#8;R1=8,循环8次(右移8次),用R1作计数器RIGHT:;这是发光二极管向右“流动”的循环体RRCA;把进位C在累加器A中从左向右轮换一位MOVP1,A;输出至P1口ACALLDELAY;调延时子程序,延时200msDJNZR1,RIGHT;R1减1,如果不为0跳回RIGHT循环执行JMPSTART;跳回一开始,重复执行该流水灯程序DELAY:;延时200ms的子程序MOVR3,#20D1:MOVR4,#20D2:MOVR5,#248;2+248×2=498=498μsDJNZR5,$;R5减1,如果不为0,就执行本行DJNZR4,D2;2+20×(498+2)=10002μs≈10msDJNZR3,D1RET;子程序结束标志,返回主程序END;程序结束点(3)取表法要显示的数据之间不存在简单的运算关系,不能使用ADD和SUBB等指令根据上一状态计算出下一状态的显示值。但显示的数据存在依次取用的特点,这时一般就会用到取表的方法。取表法是单片机程序中很常用的一种编程思想。在汇编程序末尾附加一个数据表,这个数据表可以是可以是字节型,也可是英文字母等数据。数据表与汇编程序一起可以被汇编,之后数据表就成为数据的一部分包含在生成的.HEX文件中。通过下载之后,数据表和程序代码就固化在单片机的程序存储器中。ORG00HSTART:;装表,即DPTR指向表TABLE的表MOVDPTR,#TABLE;数据指针寄存器DPTR指向表TABLE头LOADTABLE:;取表程序段,表中的数据载入累加器ACC中,并判断是否已经完成CLRA;累加器ACC清零MOVCA,@A+DPTR;基址加变址寻址,将表中数据载入ACCCJNEA,#88H,DISPLAY;CJNEA,#datarel比较立即数和A不相等则转移。如果取到88H说明表已经取完,否则显示JMPSTART;如果取完,跳回START,重新开始DISPLAY:;显示程序段,累加器ACC的数据输出到P1MOVP1,A;将ACC的数据输出到P1口ACALLDELAY;调延时子程序INCDPTR;DPTR加1,准备取表中的下一个数据JMPLOADTABLE;跳回取表程序段DELAY:;延时200ms的子程序MOVR3,#