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

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

    • 资源ID:9411265       资源大小:297.94KB        全文页数:25页
    • 资源格式: DOCX        下载积分:1金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要1金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写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编程环境软件,(单片机实验箱)仿真器-仿真器设置- 选择仿真器 选择仿真头 选择CPU Lab8000/Lab6000通用微控制器 MCS5

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

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

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

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

    6、赋值方式,如以下两种分别独立完成:1 在搬移循环体内赋值一个搬移一个,请在参考程序1的?处补充程序2 循环体外赋值,先全部赋值再搬移,请在参考程序2 的 ?处添加赋值程序。 参考程序1 mov r0, #30h mov r1, #00h mov r2, #30h mov r3, #50h mov r7, #10Loop: mov dph, r0 ;将dptr高八位给r0 mov dpl, r1 ;将dptr低八位给r1 mov a, r7 ;将r7的值赋给a movx dptr, a ;将a写入RAM/IO口movx a, dptr ;读外部RAM/IO口dec r7 ;r7减一 mov dp

    7、h, r2 ;将dptr高八位给r2mov dpl, r3 ;将dptr低八位给r3 movx dptr, a ;将a写入RAM/IO口 inc r1 ;r1加一 inc r3 ;r3加一 djnz r7, Loop ;计数减一 ljmp $ ; $当前程序指针 相当于一直执行自己;ljmp $参考程序2mov r0, #30h mov r1, #00h mov r2, #30h mov r3, #50h mov r7, #10Block equ 3000h Mov dptr,#Block ;起始地址mov r4, #10 ;清10个字节mov a, #0ah ;将oah赋值给aNext: m

    8、ovx dptr, a ;将a写入RAM/IO口 inc dptr ;指向下一个地址dec a ;a旳值减一djnz r4, Next ;计数减一 Loop: mov dph, r0 ;将dptr高八位给r0 mov dpl, r1 ;将dptr低八位给r1 movx a, dptr ;读外部RAM/IO口 mov dph, r2 ;将dptr高八位给r2 mov dpl, r3 ;将dptr低八位给r3 movx dptr, a ;将a写入RAM/IO口 inc r1 ;r1加一 inc r3 ;r3加一 djnz r7, Loop ;计数减一 ljmp $ ; $当前程序指针 相当于一直执

    9、行自己;ljmp $单片机实验3 数据排序 一实验目的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,7,1,5

    10、,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 接着开始第二次内层循环参考程序:Size equ 10 ; 数据个数Array equ 50h ; 数据起始地址,需要自己设置10个比较数的值Change equ 0 ; 交换标志Sort: ; 外层循环 mov r0, #Array mov r7, #Size-1 clr Change ;清零Chan

    11、geGoon: ; 内层循环 mov a, r0 mov r2, a inc r0 mov B, r0 cjne a, B, NotEqual ;比较a,B不相等转移 sjmp Next ;跳转到NextNotEqual: jc Next ; 前小后大, 不交换 setb Change ; 前大后小, 置交换标志;排序是否结束标志 ? xch a, r0 ; 交换 dec r0 ;r0减一 xch a, r0 ; 交换 inc r0 ;r0加一Next: djnz r7, Goon ;计数减一 jb Change, Sort ;直接寻址位=1,则转移 ljmp $ ; $:当前程序指针 相当于

    12、一直执行自己;ljmp $ end考虑效率问题,每次从外层循环进入内层循环(Goon),相邻数两两比较的次数可以少一次,理论上提高效率一倍。参考程序如下:Size equ 10 ; 数据个数Array equ 50h ; 数据起始地址Change equ 0 ; 交换标志 mov r7, #Size-1Sort: ; 外层循环 mov r0, #Array mov a, r7 mov r6, a clr Change ;清零Change Goon: ; 内层循环 mov a, r0 mov r2, a inc r0 mov B, r0 cjne a, B, NotEqual ;比较a,B不相等

    13、转移 sjmp Next ;跳转到NextNotEqual: jc Next ; 前小后大, 不交换 setb Change ; 前大后小, 置交换标志 xch a, r0 ; 交换 dec r0 ;r0减一 xch a, r0 ; 交换 inc r0 ;r0加一Next: djnz r6, Goon ;计数减一 dec r7 ;r7减一 jb Change, Sort ;直接寻址位=1,则转移 ljmp $ ;$当前程序指令指针 end单片机实验4 P1口输入输出实验 一实验目的1熟悉P1 口的功能。2熟悉延时子程序或定时中断程序的编写和使用。3初步熟悉单片机软硬件设计方法。二实验内容(两内

    14、容分开做)1P1口做输出口接八只发光二极管,编写程序,使发光二极管循环亮灭。注意:实验箱(LAB6000)的发光二级管LED是高电平点亮,低电平灭。2P1.0,P1.1作输入口接两个拨动开关,P1.2,P1.3作输出口,接两个发光二极管。编写程序读取开关状态,将此状态在发光二极管上显示出来。三实验仪器微机,WAVE6000/VW编程环境、实验箱硬件实验需要连接硬件仿真器,连接方式如下:实验箱的 仿真器/仿真器设置:选择仿真器 选择仿真头 选择CPULAB6000通用微控制器/LAB8000 MCS51实验 8031/51注意:当P1口用作输入口时,必须先对它置”1”。编程时应注意P1.0,P1

    15、.1作为输入时应先置1,才能正确读入值。四 实验步骤(1) 流程图:(2) 实验程序及注释:参考程序:注:实验箱 LED灯 1 亮 0 灭内容1参考程序: Loop: mov a, #01h (0FEH) 将01H赋值给累加器A mov r2, #8 将常数8赋值给给R2Output: 输出函数子程序 mov P1, a 将A中01H在p1口输出 rl a 将累加器A的值左移一位 call Delay 调用延时子程序延时 djnz r2, Output 判断循环是否结束 ljmp Loop 进行下一次循环Delay: 延时子程序 mov r6, #0 89C51中使用一次djnz mov r7

    16、, #0 指令耗时2us,用该原理进DelayLoop: 延时程序的设计,可以子 djnz r6, DelayLoop 程序嵌套来增加延时时间。 djnz r7, DelayLoop 子程序返回指令 retend内容2参考程序KeyLeft equ P1.0 用KeyLeft代替p1.0KeyRight equ P1.1 用KeyRight代替p1.1LedLeft equ P1.2 用LedLeft t代替p1.2LedRight equ P1.3 用LedRight代替p1.3SETB KeyLeft 将KeyLeft置1SETB KeyRight 将KeyRight 置1Loop: 循环

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

    18、对它置“1”,读入的数据是不正确的。2延时子程序示例如下:Delay:MOVR6,#OHMOVR7,#OHDelayLoop:DJNZR6,DelayLoopDJNZR7,DelayLoopRET延时程序可以作为子程序在主程序里面调用,也可以放在程序中间,顺序执行。以上参考延时程序是一个两层循环,修改R6,R7的数值,可以改变延时时间,也就是灯循环的频率。那么,是修改R6的值,还是修改R7的值对延时时间影响大?。改变R7的值对延时时间的影响大,因为R7控制的是延时程序的外层循环。 实验五 计数器实验 一实验目的1 熟悉计数器的使用方法。2 熟悉计数器的硬件电路连接。3 熟悉计数器的软件设计。二

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

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

    21、箱的单次脉冲(高电平,低电平)四 实验步骤1流程图如下:计数初值自动重装是由计数器硬件自己完成参考程序1:movTMOD,#00000101b;方式1,记数器movTHO,#0; 计数初值为0movTLO,#0setbTR0;开始记数Loop:movPl,TLO;将记数结果送P1口ljmpLoop参考程序2:用查询计数溢出标志位方式确定计数达是否到最大次数 。初值TL0 = 256 - 10 = 246 = F6H MOV TMOD, #06H MOV TH0, #0F6H ;计数初值(工作方式2自动重装) MOV TL0, #0F6H ;计数初值 SETB TR0 ;开始计数 DEL: JB

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

    23、可以看到每按下10次LED灯的亮灭进行翻转。问题:如要求最大计数次数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)连接低电平单次脉冲。 实验箱的单次脉冲(高电平,低电平)接口如下图中间位置:绿色按钮为脉冲产生按钮:注意中断服务程序(ISR)关键:1 保护进入中断时的现场,

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

    26、1.0 ;LED=P1.0 标号赋值命令LEDBuf equ 0 ;LEDBuf=0 ljmp Start ;长转移到初始程序 org 3 ;起始地址为3Interrupt0: push PSW ; 保护现场 cpl LEDBuf ; 取反LED mov c, LEDBuf ;(LEDBuf)赋值到c mov LED, c ;c的内容赋值到LED pop PSW ; 恢复现场 Reti ;中断返回,恢复断点Start: clr LEDBuf ;LEDBuf 内容清零 clr LED ;LED内容清零 mov TCON, #01h ; 外部中断0下降沿触发 mov IE, #81h ; 打开外部

    27、中断允许位(EX0)及总中断允许位(EA) ljmp $ ;原地循环 end 参考程序2:中断程序(INT0:)采用跳转形式(LJMP INT0 )执行。在中断程序中进行寄存器的操作,有的(R0,R1)被保护(进栈出栈),有的没有被保护(R2),从而去观察中断保护的作用。LED equ P1.0 ;LED=P1.0 标号赋值命令Speaker equ P1.1 ;Speaker=P1.1 标号赋值命令LEDBuf equ 0 ;LEDBuf=0 ljmp Start ;跳向初始化程序Start ORG 0003H ;外部中断0入口(向量)地址:0003H LJMP INT0 ;转外部中断服务程

    28、序ORG 0064H ;程序入口INT0: PUSH PSW ; PSW进栈 保护现场 PUSH 1 ; R1进堆栈,采用直接寻址方式,第0组R1的地址为 1 PUSH 0 ; R0进堆栈,采用直接寻址方式,第0组R0的地址为 0 cpl LEDBuf ; 取反LED mov C, LEDBuf ;(LEDBuf)赋值到c mov LED,C ;c的内容赋值到LED MOV R2,#55H ;R2没有进堆栈,中断程序会不会改变其值? mov R1, #10 ;将10赋值到R1 Loop: clr Speaker ;Speaker内容清零 call Delay ;调用延迟程序 setb Spea

    29、ker ;Speaker P1.1内容置一 call Delay ;调用延迟程序 DJNZ R1, Loop ;出堆栈前,(R1)=0 POP 0 ; R0出堆栈,采用直接寻址方式 POP 1 ; R1出堆栈,恢复原值(99H),采用直接寻址方式 POP PSW ; 恢复现场 retiDelay: mov R0, #20H ;修改参数,蜂鸣器响时间长短不同 mov r3,#00H ;00H赋值到r3DELAYLOOP:DJNZ R0,DELAYLOOP ;R1不等于0,未查完,继续查找djnz R3,DELAYLOOP ;R3不等于0.未查完,继续查找 RETStart: clr LEDBuf ;LEDBuf 内容清零 clr LED ;LED内容清零 mov TCON, #01h ; 外部中断0下降沿触发 mov IE, #81h ; 打开外部中断允许位(EX0)及总中断允许位(EA) MOV R0,#99H MOV R1,#99HMOV R2,#99H ; 中断程序中R2没有进栈保护,但值在中断程序中 OFFspeaker: clr Speaker ; 关蜂鸣器 ljmp OFFspeaker 调试步骤:输入程序并执行,按下单脉冲按钮,观察现象。调试结果:按下单脉冲按钮,每隔10.24ms,蜂鸣器响一次,小灯亮


    注意事项

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

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




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

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

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


    收起
    展开