欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:14080975       资源大小:206.47KB        全文页数:46页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

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

    2、CS51 实验选择8051CPU前 3 个软件实验勾选 使用伟福软件模拟器四 实验步骤注意:1 文件不要用中文名称保存时不要用中文路径(目录) ,不要放在“桌面”上,源文件和工程要放在同一个文件夹下,文件名称和路径名称不要太长。2 查看存储器菜单使用:窗口 -数据窗口 -XDATA 观察存储器内容3 查看 SFR:窗口 -CPU 窗口 查看 CPU 寄存器 SFR4 单步执行:执行 -单步执行 (F8),每执行一步,查看每条语句涉及到的寄存器和存储器内容的变化结果,是否是指令所要得到的结果,如不是,检查错误原因,修改。5 利用多种执行方法和观察各种窗口调试程序,直至程序满意为止。编译器默认设置

    3、:程序框图参考例程序:Block equ 4000hmov dptr, #Block ;mov r0, #10 ;mov a, #33h ;Loop:movx dptr, ainc dptr ;djnz r0, Loop ;ljmp $ ;end起始地址清 10 个字节将 33H赋值给 a将 a 写入外部 RAM指向下一个地址记数减一$当前程序指针 相当于一直执行自己;ljmp$说明:$:是当前语句的程序指针(地址)相当于一直执行自己:ljmp$,程序死循环要求赋值数据为 10,9,8,7,6,5,4,3,2,1则以上程序该如何改动修改后的程序:? 自己修改程序实现。Block equ 400

    4、0hmov dptr, #Block ;mov r0, #10 ;mov a, #0ah ;起始地址清 10 个字节将 0ah 赋值给 aLoop:movx dptr, ainc dptr ;dec a ;adjnz r0, Loop ;ljmp $ ;end;将 a 写入外部 RAM指向下一个地址值减一记数减一$当前程序指针 相当于一直执行自己;ljmp$单片机实验 2 存储块移动一实验目的1 熟悉 51 汇编语言程序结构。2 熟悉循环结构程序的编写,进一步熟悉指令系统。3 熟悉编程环境和程序的调试。二实验内容将指定源地址(3000H)和长度(10 字节)的存储块移动到目的地址 ( 3050

    5、H)。需要先对 3000H 开始的源数据块赋值为10, 9 , 8.1。三实验仪器 微机、 WAVE6000软件,(单片机实验箱)微机、 VW,WAVE6000编程环境软件,(单片机实验箱)仿真器 - 仿真器设置 -选择仿真器Lab8000/Lab6000 通用微控制器选择仿真头MCS51 实验选择8051CPU注意:在编程环境中,可以通过软件仿真,观察程单片机运行情况。四 实验步骤参考程序与流程图参考程序移动 3000H - 3050H, 10 字节由于源地址和目的地址的内容都一样( FF),调试时看不到内容的变化,所以需要给源地址内容赋值。如要求赋值内容为 10,9,8,7,6,5,4,3

    6、,2,1。有多种赋值方式,如以下两种分别独立完成:1 在搬移循环体内赋值一个搬移一个,请在参考程序 1 的?处补充程序2 循环体外赋值,先全部赋值再搬移, 请在参考程序 2 的 ?处添加赋值程序。参考程序 1mov r0, #30hmovr1, #00hmovr2, #30hmovr3, #50hmovr7, #10Loop:movdph, r0;将 dptr 高八位给 r0movdpl, r1;将 dptr 低八位给 r1mova, r7;将 r7 的值赋给 amovxdptr, a;将 a 写入 RAM/IO 口movxa, dptr;读外部 RAM/IO 口decr7;r7 减一movd

    7、ph, r2;将 dptr 高八位给 r2movdpl, r3;将 dptr 低八位给 r3movxdptr, a;将 a 写入 RAM/IO 口incr1; r1 加一incr3; r3 加一djnzr7, Loop;计数减一ljmp$; $当前程序指针 相当于一直执行自己 ;ljmp $参考程序 2movr0, #30hmovr1, #00hmovr2, #30hmovr3, #50hmovr7, #10Block equ 3000hMov dptr,#Block;起始地址movr4, #10; 清 10 个字节mova, #0ah;将 oah 赋值给 aNext:movx dptr, a

    8、;将 a 写入 RAM/IO 口inc dptr;指向下一个地址deca;a 旳值减一djnzr4, Next;计数减一Loop:movdph, r0;将 dptr 高八位给 r0movdpl, r1;将 dptr 低八位给 r1movxa, dptr;读外部 RAM/IO 口movdph, r2;将 dptr 高八位给 r2movdpl, r3;将 dptr 低八位给 r3movxdptr, a;将 a 写入 RAM/IO 口incr1;r1 加一incr3;r3 加一djnzr7, Loop; 计数减一ljmp$; $当前程序指针 相当于一直执行自己 ;ljmp $单片机实验 3 数据排序

    9、一实验目的1 了解数据排序的常用算法,掌握冒泡算法。2 进一步熟悉编程环境和调试方法。3 熟悉汇编程序设计。二实验内容使用冒泡算将法 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,

    10、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 个比较数的值Change equ0; 交换标志Sort:; 外层循环movr0, #Arraymovr7, #Size-1clr Change;清零 ChangeGoon:

    11、; 内层循环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

    12、),相邻数两两比较的次数可以少一次,理论上提高效率一倍。参考程序如下:Sizeequ10;数据个数Arrayequ50h;数据起始地址Change equ0; 交换标志movr7, #Size-1Sort:; 外层循环movr0, #Arraymova, r7movr6, aclrChange;清零 ChangeGoon:; 内层循环mova, r0movr2, aincr0movB, r0cjnea, B, NotEqual;比较 a,B 不相等转移sjmpNext;跳转到 NextNotEqual:jcNext; 前小后大 , 不交换setbChange; 前大后小 , 置交换标志xcha

    13、, r0; 交换decr0;r0 减一xcha, r0; 交换incr0;r0 加一Next:djnzr6, Goon;计数减一decr7;r7 减一jbChange, Sort;直接寻址位 =1,则转移ljmp$;$当前程序指令指针end单片机实验 4 P1 口输入输出实验一实验目的1熟悉 P1 口的功能。2熟悉延时子程序或定时中断程序的编写和使用。3初步熟悉单片机软硬件设计方法。二实验内容(两内容分开做)1P1 口做输出口接八只发光二极管,编写程序,使发光二极管循环亮灭。注意:实验箱( LAB6000)的发光二级管 LED 是高电平点亮,低电平灭。2P1.0,P1.1 作输入口接两个拨动开

    14、关, P1.2,P1.3 作输出口,接两个发光二极管。编写程序读取开关状态,将此状态在发光二极管上显示出来。三实验仪器微机, WAVE6000/VW编程环境、实验箱硬件实验需要连接硬件仿真器,连接方式如下:实验箱的 仿真器 / 仿真器设置:选择仿真器LAB6000通用微控制器/LAB8000选择仿真头MCS51 实验选择8031/51CPU注意:当 P1 口用作输入口时,必须先对它置 ”1”。编程时应注意 P1.0,P1.1 作为输入时应先置 1,才能正确读入值。四 实验步骤( 1) 流程图:( 2) 实验程序及注释:参考程序:注:实验箱LED 灯 1亮0 灭内容 1 参考程序:Loop:mo

    15、va, #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

    16、内容 2 参考程序KeyLeftequ P1.0用 KeyLeft 代替 p1.0KeyRightequ P1.1用 KeyRight 代替 p1.1LedLeftequ P1.2用 LedLeft t 代替 p1.2LedRightequ P1.3用 LedRight 代替 p1.3SETBKeyLeft将 KeyLeft 置 1SETBKeyRight将 KeyRight 置 1Loop:循环程序MOVC, KeyLeft将 KeyLeft 传送给 CMOVLedLeft, C将 C 传送给 LedLeftMOVC,KeyRight将 KeyRight 传送给 CMOVLedright,C

    17、将 C 传送给 LedrightLJMPLoop继续循环END( 3)调试步骤:程序执( 1)行后,可以看到试验台上的 LED灯,由左到右依次闪亮。且闪亮的时间可以根据延时程序中的值的改变而改变。调试程序( 2)的时候,当打开相对应的开关时,与其对应的 LED灯变亮。( 4)实验说明:1.P1 口是准双向口。 它作为输出口时与一般的双向口使用方法相同。 由准双向口结构可知当 P1 口用为输入口时,必须先对它置“ 1”。若不先对它置“ 1”,读入的数据是不正确的。2 延时子程序示例如下:Delay :MOV R6,#OHMOVR7,#OHDelayLoop:DJNZ R6,DelayLoopDJ

    18、NZR7, DelayLoopRET延时程序可以作为子程序在主程序里面调用, 也可以放在程序中间, 顺序执行。以上参考延时程序是一个两层循环,修改 R6,R7的数值,可以改变延时时间,也就是灯循环的频率。那么,是修改 R6的值,还是修改 R7的值对延时时间影响大?。改变 R7 的值对延时时间的影响大,因为 R7控制的是延时程序的外层循环。实验五 计数器实验一实验目的1 熟悉计数器的使用方法。2 熟悉计数器的硬件电路连接。3 熟悉计数器的软件设计。二实验内容8031 内部定时计数器 0,按计数器模式和工作方式 2 工作,对外部脉进行计数并输出 8 位计数结果用 LED 灯表示的二进制数显示,达到

    19、最大计数数值时,给出警告信号。说明:用 8031 内部定时计数器 0 按照工作方式 2(8 位自动重装)对 P3.4 引脚(计数器 0 计数脉冲输入端 T0)进行计数,将计数结果(按动 脉冲的次数)数值输出到 P1 口驱动 LED 灯 按二进制的方式显示出来, 读 LED 二进制数计算出来,看看是否与 TL0 数值一致。设定最大计数次数,达到最大次数时候给出警告, (比如参考程序中的记满后 LED 反转一次输出显示警告) 。要求:设定计数的次数 (可以自己设定, 比如:12),当达到最大计数次数 ( 12)时,将 P2.0 连接的 LED 闪烁 10 次(亮灭各 6 次)以示警告,自己修改参考

    20、程序实现。根据参考程序,参考实验四的延时程序,自己修改计数初值, (根据最大计数次数 12 次计算修改),计算对应的计数初值( ? ),修改相应程序(修改 REP 子程序,使灯亮灭 12 次做为按动满 12 次的警告信号。三实验仪器微机, WAVE6000/VW编程环境、实验箱硬件实验需要连接硬件仿真器,连接方式如下:软件: 仿真器 / 仿真器设置:选择仿真器 选择仿真头 选择 CPULAB8000/ LAB6000 通用微控制器 MCS51 实验 8031/51注意: P3.4 接单次脉冲实验连线如图:TO(P3.4)取反信号: P2.0 连接 L7实验箱单次脉冲实 验 箱 的 单 次 脉冲

    21、 (高电平,低电平)四 实验步骤1 流程图如下:计数初值自动重装是由计数器硬件自己完成参考程序 1:mov TMOD,#00000101b;方式 1,记数器mov THO,#0; 计数初值为 0mov TLO,#0setb TR0;开始记数Loop:mov Pl,TLO ;将记数结果送 P1 口ljmp Loop参考程序 2:用查询计数溢出标志位方式确定计数达是否到最大次数。初值DEL:TL0 = 256 - 10 = 246 =MOV TMOD, #06HMOV TH0, #0F6HMOV TL0, #0F6HSETB TR0JBC TF0, REPF6H;计数初值(工作方式 2 自动重装)

    22、;计数初值;开始计数;计数溢出( TF0=1)后跳到 REP,同时TF0 清 0MOVSUBBMOVSJMPA, TL0A, #0F6HP1, ADEL; 当前计数数值( 8 位) -A;计数当前值与初值之 差值 -A; 输出当前已经按(按钮)的次数; 无条件跳转到 DEL 继续查询 TF0,是否溢出REP:CPLP2.0; 翻转P2.0 一次,SJMP DEL ; 无条件跳转到 DEL 继续查询 TF0,是否溢出调试步骤( 1)执行程序,在试验台上按下单脉冲按钮,可以看到 LED情况。随着按下次数的增加, LED 灯以二进制进行计数。调试步骤( 2)执行程序,在试验台上按下单脉冲按钮,可以看

    23、到每按下LED 灯的亮灭进行翻转。灯的亮灭10 次问题:如要求最大计数次数20 次自己计算修改计数初值?初值 TL0 = 256 20=236 = 0ECH要求修改以上参考程序,根据最大计数次数12次计算修改对应的计数初值( ? ),修改程序,使 L7( P2.0 ) LED 灯亮灭 12 次作为按满 12 次的警示信号。要求程序能够一直进行检测和输出警告信号。实验六 外部中断实验一实验目的1 熟悉外部中断的硬件电路,中断技术的基本使用方法。2 熟悉外部中断的软件设计。二实验内容硬件实验需要连接硬件仿真器 ,连接方式如下:菜单:仿真器 / 仿真器设置:选择仿真器LAB8000/ LAB6000

    24、 通用微控制器选择仿真头MCS51 实验利用实验箱上的单脉冲按键和发光二极管,蜂鸣器,实现:用单次脉冲申请中断,在中断服务程序中对输出信号进行翻转 (每当输出一个单次脉冲时 (产生低电平一个脉冲),发光二极管( L0)亮灭变化一次。参考程序 2 中并使蜂鸣器响一段时间, 修改相关参数使蜂鸣器响的时间频率改变。参考程序 2 蜂鸣器是在哪里关闭的?三实验仪器微机、 VW, WAVE6000编程环境,实验箱连线:P1.0 连接 L0;蜂鸣器(喇叭)连接 P1.1INT0 (P3.2)连接低电平单次脉冲。实验箱的单次脉冲(高电平,低电平)接口如下图中间位置:绿色按钮为脉冲产生按钮:注意中断服务程序(

    25、ISR)关键:1 保护进入中断时的现场,现场是指中断发生时各个寄存器,数据存储区的内容,为了能够继续完成没完成的工作状态,在退出中断之前需恢复现场(还原在中断程序中修改的而在主程序用到的寄存器,存储器的内容) 。本例中保护CPU状态寄存器 PSW,R0, R1,等的内容。(例程中 R2没有被保护,它的值是不是被中断服务程序修改了,可以修改程序看看与保护后的结果的不同) 。2 中断重入的设置中断相关寄存器的设置:中断寄存器 IE, 中断触发方式的设置。3 中断程序和子程序的区别。中断程序不是程序调用的,中断发生时,开中断情况下, CPU就执行相应中断服务程序,每个中断对应固定的开始地址,每个中断向量 8 个字节空间。程序流程图:参考程序 1:LED equ P1.0LEDBuf equ 0ljmp Start ;org 3 ;Interrupt0:push PSWcpl LEDBufmov c, LEDBufmov LED, cpop PSWReti ;Start:;LED=P1.0 标号赋值命令;LEDBuf=0长转移到


    注意事项

    本文(单片机汇编语言程序设计实验报告.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开