首页 单片机汇编语言程序设计实验报告

单片机汇编语言程序设计实验报告

举报
开通vip

单片机汇编语言程序设计实验报告单片机实验1汇编语言程序设计实验----存储器块赋值一.实验目的1熟悉存储器的读写方法,熟悉51汇编语言结构。2熟悉循环结构程序的编写。3熟悉编程环境和程序的调试。二.实验内容指定存储器中某块的起始地址和长度,要求将其内容赋值。例如将4000H开始的100个字节内容清零或全部赋值为33H(参考程序),要求根据参考程序修改:修改程序,赋值内容为(10,9,8,7,6,5,4,3,2,1。)三.实验仪器微机、VW,WAVE6000编程环境软件,(单片机实验箱)仿真器--仿真器设置-选择仿真器选择仿真头选择CPULab...

单片机汇编语言程序设计实验报告
单片机实验1汇编语言程序设计实验----存储器块赋值一.实验目的1熟悉存储器的读写方法,熟悉51汇编语言结构。2熟悉循环结构程序的编写。3熟悉编程环境和程序的调试。二.实验内容指定存储器中某块的起始地址和长度,要求将其内容赋值。例如将4000H开始的100个字节内容清零或全部赋值为33H(参考程序),要求根据参考程序修改:修改程序,赋值内容为(10,9,8,7,6,5,4,3,2,1。)三.实验仪器微机、VW,WAVE6000编程环境软件,(单片机实验箱)仿真器--仿真器设置-选择仿真器选择仿真头选择CPULab8000/Lab6000通用微控制器MCS51实验8051前3个软件实验勾选√使用伟福软件模拟器四实验步骤注意:1文件不要用中文名称保存时不要用中文路径(目录),不要放在“桌面”上,源文件和工程要放在同一个文件夹下,文件名称和路径名称不要太长。2查看存储器菜单使用:窗口---数据窗口---XDATA观察存储器内容3查看SFR:窗口---CPU窗口查看CPU寄存器SFR4单步执行:执行---单步执行(F8),每执行一步,查看每条语句涉及到的寄存器和存储器内容的变化结果,是否是指令所要得到的结果,如不是,检查错误原因,修改。5利用多种执行方法和观察各种窗口调试程序,直至程序满意为止。编译器默认设置:程序框图参考例程序:Blockequ4000hmovdptr,#Block;起始地址movr0,#10;清10个字节mova,#33h;将33H赋值给aLoop:movx@dptr,a将a写入外部RAMincdptr;指向下一个地址djnzr0,Loop;记数减一ljmp$;$当前程序指针相当于一直执行自己;ljmp$end说明:$:是当前语句的程序指针(地址)相当于一直执行自己:ljmp$,程序死循环要求赋值数据为10,9,8,7,6,5,4,3,2,1则以上程序该如何改动?自己修改程序实现。修改后的程序:Blockequ4000hmovdptr,#Block;起始地址movr0,#10;清10个字节mova,#0ah;将0ah赋值给aLoop:movx@dptr,a;将a写入外部RAMincdptr;指向下一个地址deca;a值减一djnzr0,Loop;记数减一ljmp$;$当前程序指针相当于一直执行自己;ljmp$end单片机实验2存储块移动一.实验目的1熟悉51汇编语言程序结构。2熟悉循环结构程序的编写,进一步熟悉指令系统。3熟悉编程环境和程序的调试。二.实验内容将指定源地址(3000H)和长度(1 0字 个人自传范文3000字为中华之崛起而读书的故事100字新时代好少年事迹1500字绑架的故事5000字个人自传范文2000字 节)的存储块移动到目的地址(3050H)。需要先对3000H开始的源数据块赋值为10,9,8.......1。实验仪器微机、WAVE6000软件,(单片机实验箱)微机、VW,WAVE6000编程环境软件,(单片机实验箱)仿真器--仿真器设置-选择仿真器选择仿真头选择CPULab8000/Lab6000通用微控制器MCS51实验8051注意:在编程环境中,可以通过软件仿真,观察程单片机运行情况。四实验步骤参考程序与流程图参考程序移动3000H-->3050H,10字节由于源地址和目的地址的内容都一样(FF),调试时看不到内容的变化,所以需要给源地址内容赋值。如要求赋值内容为10,9,8,7,6,5,4,3,2,1。有多种赋值方式,如以下两种分别独立完成:1在搬移循环体内赋值一个搬移一个,请在参考程序1的?处补充程序2循环体外赋值,先全部赋值再搬移,请在参考程序2的?处添加赋值程序。参考程序1movr0,#30hmovr1,#00hmovr2,#30hmovr3,#50hmovr7,#10Loop:movdph,r0;将dptr高八位给r0movdpl,r1;将dptr低八位给r1mova,r7;将r7的值赋给amovx@dptr,a;将a写入RAM/IO口movxa,@dptr;读外部RAM/IO口decr7;r7减一movdph,r2;将dptr高八位给r2movdpl,r3;将dptr低八位给r3movx@dptr,a;将a写入RAM/IO口incr1;r1加一incr3;r3加一djnzr7,Loop;计数减一ljmp$;$当前程序指针相当于一直执行自己;ljmp$参考程序2movr0,#30hmovr1,#00hmovr2,#30hmovr3,#50hmovr7,#10Blockequ3000hMovdptr,#Block;起始地址movr4,#10;清10个字节mova,#0ah;将oah赋值给aNext:movx@dptr,a;将a写入RAM/IO口incdptr;指向下一个地址deca;a旳值减一djnzr4,Next;计数减一Loop:movdph,r0;将dptr高八位给r0movdpl,r1;将dptr低八位给r1movxa,@dptr;读外部RAM/IO口movdph,r2;将dptr高八位给r2movdpl,r3;将dptr低八位给r3movx@dptr,a;将a写入RAM/IO口incr1;r1加一incr3;r3加一djnzr7,Loop;计数减一ljmp$;$当前程序指针相当于一直执行自己;ljmp$单片机实验3数据排序一.实验目的1了解数据排序的常用算法,掌握冒泡算法。进一步熟悉编程环境和调试方法。熟悉汇编程序设计。二.实验内容使用冒泡算将法50H开始的10个随机数按从小到大的顺序排列。三.实验仪器微机、WAVE6000编程环境四实验步骤注意:由于上电后数据都一样,所以需要手动修改50H后10个数据(要排序的数)方法是:窗口---数据窗口---DATA找到50H开始的10个2位16进制数,双击,修改其数值如(6,2,9,4,3,7,1,5,8,0)之后编译(下载),单步执行,查看排序执行过程冒泡算法(两层循环,以下是内层循环开始……)。6,2,9,4,3,7,1,5,8,0前大后小交换位置如下:2,6,9,4,3,7,1,5,8,0前小后大不交换位置如下;2,6,9,4,3,7,1,5,8,0前大后小交换位置如下;2,6,4,9,3,7,1,5,8,0…第一次内层循环结束顺序如下:最大的数9先冒出来2,6,4,3,7,1,5,8,0,9接着开始第二次内层循环……参考程序:Sizeequ10;数据个数Arrayequ50h;数据起始地址,需要自己设置10个比较数的值Changeequ0;交换标志Sort:;外层循环movr0,#Arraymovr7,#Size-1clrChange;清零ChangeGoon:;内层循环mova,@r0movr2,aincr0movB,@r0cjnea,B,NotEqual;比较a,B不相等转移sjmpNext;跳转到NextNotEqual:jcNext;前小后大,不交换setbChange;前大后小,置交换标志;排序是否结束标志?xcha,@r0;交换decr0;r0减一xcha,@r0;交换incr0;r0加一Next:djnzr7,Goon;计数减一jbChange,Sort;直接寻址位=1,则转移ljmp$;$:当前程序指针相当于一直执行自己;ljmp$end考虑效率问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,每次从外层循环进入内层循环(Goon),相邻数两两比较的次数可以少一次,理论上提高效率一倍。参考程序如下:Sizeequ10;数据个数Arrayequ50h;数据起始地址Changeequ0;交换标志movr7,#Size-1Sort:;外层循环movr0,#Arraymova,r7movr6,aclrChange;清零ChangeGoon:;内层循环mova,@r0movr2,aincr0movB,@r0cjnea,B,NotEqual;比较a,B不相等转移sjmpNext;跳转到NextNotEqual:jcNext;前小后大,不交换setbChange;前大后小,置交换标志xcha,@r0;交换decr0;r0减一xcha,@r0;交换incr0;r0加一Next:djnzr6,Goon;计数减一decr7;r7减一jbChange,Sort;直接寻址位=1,则转移ljmp$;$当前程序指令指针end单片机实验4P1口输入输出实验一.实验目的1.熟悉P1口的功能。2.熟悉延时子程序或定时中断程序的编写和使用。3.初步熟悉单片机软硬件设计方法。二.实验内容(两内容分开做)1.P1口做输出口接八只发光二极管,编写程序,使发光二极管循环亮灭。注意:实验箱(LAB6000)的发光二级管LED是高电平点亮,低电平灭。2.P1.0,P1.1作输入口接两个拨动开关,P1.2,P1.3作输出口,接两个发光二极管。编写程序读取开关状态,将此状态在发光二极管上显示出来。三.实验仪器微机,WAVE6000/VW编程环境、实验箱硬件实验需要连接硬件仿真器,连接方式如下:实验箱的仿真器/仿真器设置:选择仿真器选择仿真头选择CPULAB6000通用微控制器/LAB8000MCS51实验8031/51注意:当P1口用作输入口时,必须先对它置”1”。编程时应注意P1.0,P1.1作为输入时应先置1,才能正确读入值。四实验步骤流程图:实验程序及注释:参考程序:注:实验箱LED灯1亮0灭内容1参考程序:Loop:mova,#01h(0FEH)将01H赋值给累加器Amovr2,#8将常数8赋值给给R2Output:输出函数子程序movP1,a将A中01H在p1口输出rla将累加器A的值左移一位callDelay调用延时子程序延时djnzr2,Output判断循环是否结束ljmpLoop进行下一次循环Delay:延时子程序movr6,#089C51中使用一次djnzmovr7,#0指令耗时2us,用该原理进DelayLoop:延时程序的设计,可以子djnzr6,DelayLoop程序嵌套来增加延时时间。djnzr7,DelayLoop子程序返回指令retend内容2参考程序KeyLeftequP1.0用KeyLeft代替p1.0KeyRightequP1.1用KeyRight代替p1.1LedLeftequP1.2用LedLeftt代替p1.2LedRightequP1.3用LedRight代替p1.3SETBKeyLeft将KeyLeft置1SETBKeyRight将KeyRight置1Loop:循环程序MOVC,KeyLeft将KeyLeft传送给CMOVLedLeft,C将C传送给LedLeftMOVC,KeyRight将KeyRight传送给CMOVLedright,C将C传送给LedrightLJMPLoop继续循环END(3)调试步骤:程序执(1)行后,可以看到试验台上的LED灯,由左到右依次闪亮。且闪亮的时间可以根据延时程序中的值的改变而改变。调试程序(2)的时候,当打开相对应的开关时,与其对应的LED灯变亮。(4)实验说明:1.P1口是准双向口。它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当P1口用为输入口时,必须先对它置“1”。若不先对它置“1”,读入的数据是不正确的。2延时子程序示例如下:Delay:MOV R6,#OHMOVR7,#OHDelayLoop:DJNZ R6,DelayLoopDJNZR7,DelayLoopRET延时程序可以作为子程序在主程序里面调用,也可以放在程序中间,顺序执行。以上参考延时程序是一个两层循环,修改R6,R7的数值,可以改变延时时间,也就是灯循环的频率。那么,是修改R6的值,还是修改R7的值对延时时间影响大?。改变R7的值对延时时间的影响大,因为R7控制的是延时程序的外层循环。实验五计数器实验一.实验目的1熟悉计数器的使用方法。2熟悉计数器的硬件电路连接。3熟悉计数器的软件设计。二.实验内容8031内部定时计数器0,按计数器模式和工作方式2工作,对外部脉进行计数并输出8位计数结果用LED灯表示的二进制数显示,达到最大计数数值时,给出警告信号。说明:用8031内部定时计数器0按照工作方式2(8位自动重装)对P3.4引脚(计数器0计数脉冲输入端T0)进行计数,将计数结果(按动脉冲的次数)数值输出到P1口驱动LED灯按二进制的方式显示出来,读LED二进制数计算出来,看看是否与TL0数值一致。设定最大计数次数,达到最大次数时候给出警告,(比如参考程序中的记满后LED反转一次输出显示警告)。要求:设定计数的次数(可以自己设定,比如:12),当达到最大计数次数(12)时,将P2.0连接的LED闪烁10次(亮灭各6次)以示警告,自己修改参考程序实现。根据参考程序,参考实验四的延时程序,自己修改计数初值,(根据最大计数次数12次计算修改),计算对应的计数初值(?),修改相应程序(修改REP子程序,使灯亮灭12次做为按动满12次的警告信号。三.实验仪器微机,WAVE6000/VW编程环境、实验箱硬件实验需要连接硬件仿真器,连接方式如下:软件:仿真器/仿真器设置:选择仿真器选择仿真头选择CPULAB8000/LAB6000通用微控制器MCS51实验8031/51注意:P3.4接单次脉冲实验连线如图:TO(P3.4)取反信号:P2.0连接L7实验箱单次脉冲实验箱的单次脉冲(高电平,低电平)四实验步骤1流程图如下:计数初值自动重装是由计数器硬件自己完成参考程序1:mov TMOD,#00000101b;方式1,记数器mov THO,#0;计数初值为0mov TLO,#0setb TR0;开始记数Loop:mov Pl,TLO;将记数结果送P1口ljmp Loop参考程序2:用查询计数溢出标志位方式确定计数达是否到最大次数。初值TL0=256-10=246=F6HMOVTMOD,#06HMOVTH0,#0F6H;计数初值(工作方式2自动重装)MOVTL0,#0F6H;计数初值SETBTR0;开始计数DEL:JBCTF0,REP;计数溢出(TF0=1)后跳到REP,同时TF0清0MOVA,TL0;当前计数数值(8位)-->ASUBBA,#0F6H;计数当前值与初值之差值-->AMOVP1,A;输出当前已经按(按钮)的次数SJMPDEL;无条件跳转到DEL继续查询TF0,是否溢出REP:CPLP2.0;翻转P2.0一次,SJMPDEL;无条件跳转到DEL继续查询TF0,是否溢出调试步骤(1)执行程序,在试验台上按下单脉冲按钮,可以看到LED灯的亮灭情况。随着按下次数的增加,LED灯以二进制进行计数。调试步骤(2)执行程序,在试验台上按下单脉冲按钮,可以看到每按下10次LED灯的亮灭进行翻转。问题:如要求最大计数次数20次自己计算修改计数初值?初值TL0=256–20=236=0ECH要求修改以上参考程序,根据最大计数次数12次计算修改对应的计数初值(?),修改程序,使L7(P2.0)LED灯亮灭12次作为按满12次的警示信号。要求程序能够一直进行检测和输出警告信号。实验六外部中断实验一.实验目的1熟悉外部中断的硬件电路,中断技术的基本使用方法。2熟悉外部中断的软件设计。二.实验内容硬件实验需要连接硬件仿真器,连接方式如下:菜单:仿真器/仿真器设置:选择仿真器选择仿真头LAB8000/LAB6000通用微控制器MCS51实验利用实验箱上的单脉冲按键和发光二极管,蜂鸣器,实现:用单次脉冲申请中断,在中断服务程序中对输出信号进行翻转(每当输出一个单次脉冲时(产生低电平一个脉冲),发光二极管(L0)亮灭变化一次。参考程序2中并使蜂鸣器响一段时间,修改相关参数使蜂鸣器响的时间频率改变。参考程序2蜂鸣器是在哪里关闭的??三.实验仪器微机、VW,WAVE6000编程环境,实验箱连线:P1.0连接L0;蜂鸣器(喇叭)连接P1.1INT0(P3.2)连接低电平单次脉冲。实验箱的单次脉冲(高电平,低电平)接口如下图中间位置:绿色按钮为脉冲产生按钮:注意中断服务程序(ISR)关键:1保护进入中断时的现场,现场是指中断发生时各个寄存器,数据存储区的内容,为了能够继续完成没完成的工作状态,在退出中断之前需恢复现场(还原在中断程序中修改的而在主程序用到的寄存器,存储器的内容)。本例中保护CPU状态寄存器PSW,R0,R1,等的内容。(例程中R2没有被保护,它的值是不是被中断服务程序修改了,可以修改程序看看与保护后的结果的不同)。2中断重入的设置中断相关寄存器的设置:中断寄存器IE,中断触发方式的设置。3中断程序和子程序的区别。中断程序不是程序调用的,中断发生时,开中断情况下,CPU就执行相应中断服务程序,每个中断对应固定的开始地址,每个中断向量8个字节空间。程序流程图:参考程序1:LEDequP1.0;LED=P1.0标号赋值命令LEDBufequ0;LEDBuf=0ljmpStart;长转移到初始程序org3;起始地址为3Interrupt0:pushPSW;保护现场cplLEDBuf;取反LEDmovc,LEDBuf;(LEDBuf)赋值到cmovLED,c;c的内容赋值到LEDpopPSW;恢复现场Reti;中断返回,恢复断点Start:clrLEDBuf;LEDBuf内容清零clrLED;LED内容清零movTCON,#01h;外部中断0下降沿触发movIE,#81h;打开外部中断允许位(EX0)及总中断允许位(EA)ljmp$;原地循环end参考程序2:中断程序(INT0:)采用跳转形式(LJMPINT0)执行。在中断程序中进行寄存器的操作,有的(R0,R1)被保护(进栈出栈),有的没有被保护(R2),从而去观察中断保护的作用。LEDequP1.0;LED=P1.0标号赋值命令SpeakerequP1.1;Speaker=P1.1标号赋值命令LEDBufequ0;LEDBuf=0ljmpStart;跳向初始化程序StartORG0003H;外部中断0入口(向量)地址:0003HLJMPINT0;转外部中断服务程序ORG0064H;程序入口INT0:PUSHPSW;PSW进栈保护现场PUSH1;R1进堆栈,采用直接寻址方式,第0组R1的地址为1PUSH0;R0进堆栈,采用直接寻址方式,第0组R0的地址为0cplLEDBuf;取反LEDmovC,LEDBuf;(LEDBuf)赋值到cmovLED,C;c的内容赋值到LEDMOVR2,#55H;R2没有进堆栈,中断程序会不会改变其值??movR1,#10;将10赋值到R1Loop:clrSpeaker;Speaker内容清零callDelay;调用延迟程序setbSpeaker;SpeakerP1.1内容置一callDelay;调用延迟程序DJNZR1,Loop;出堆栈前,(R1)=0POP0;R0出堆栈,采用直接寻址方式POP1;R1出堆栈,恢复原值(99H),采用直接寻址方式POPPSW;恢复现场retiDelay:movR0,#20H;修改参数,蜂鸣器响时间长短不同movr3,#00H;00H赋值到r3DELAYLOOP:DJNZR0,DELAYLOOP;R1不等于0,未查完,继续查找djnzR3,DELAYLOOP;R3不等于0.未查完,继续查找RETStart:clrLEDBuf;LEDBuf内容清零clrLED;LED内容清零movTCON,#01h;外部中断0下降沿触发movIE,#81h;打开外部中断允许位(EX0)及总中断允许位(EA)MOVR0,#99HMOVR1,#99HMOVR2,#99H;中断程序中R2没有进栈保护,但值在中断程序中OFFspeaker:clrSpeaker;关蜂鸣器ljmpOFFspeaker调试步骤:输入程序并执行,按下单脉冲按钮,观察现象。调试结果:按下单脉冲按钮,每隔10.24ms,蜂鸣器响一次,小灯亮灭一次。如此循环十次。
本文档为【单片机汇编语言程序设计实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
娟娟
暂无简介~
格式:doc
大小:661KB
软件:Word
页数:19
分类:
上传时间:2022-03-02
浏览量:0