单片机实验报告(二)
姓名:赵苑珺
学号:090250129
实验三程序设计(二)
一、实验目的
1、了解汇编语言程序设计与调试的过程;
2、掌握循环程序、查表程序和子程序的特点及设计。
二、实验内容
1、循环程序的设计、输入、调试和运行;
2、查表程序的设计、输入、调试和运行;
3、子程序的设计、输入、调试和运行。
三、实验步骤
1、排序程序:将N 个数从小到大排列起来。
设R0 的内容为数据区的首地址,R7 的内容为数据的字节数。
参考程序为:MOV R0,#30H ;将序列首地址存入R0中
MOV R7,#10 ;将序列长度存入R7中
SS: MOV A,R7
MOV R2,A
MOV 60H,R0 ;将序列首地址存入60H
NN: DEC R2 ;循环程序,控制排序次数
MOV A,R2
MOV R3,A
MOV R0,60H
L1: MOV A,@R0 ;将序列第一个数存入A中
INC R0 ;R0加1,指向第二个位置
CLR C ;清除进位标志位C,为比较两数大小做准备
SUBB A,@R0 ;第一个数减去第二个数
JC MM ;判断C的状态,1(代表数1小于数2)跳至MM,0(代表数
1大于数2)继续执行
MOV A,@R0 ;将第二个数存入累加器A中
DEC R0 ;R0指向第一个位置
XCH A,@R0 ;将A中的数(数1)与R0指向的数(数2)交换
INC R0 ;R0减一,指向位置一
MOV @R0,A ;将A中的数2存到位置一内
SETB F0 ;置位用户标志位,表示有交换
MM: DJNZ R3,L1 ;R3减一不为零则跳至L1,否则继续执行程序
MOV A,R2
CJNE R2,#01H,L2 ;判断R2中的数是否已经减为1,是跳至JJ,否跳至L2
SJMP JJ
L2: JB F0,NN ;判断F0状态,若为1(有交换)则跳至NN,否则继续进行JJ: MOV R0,60H ;将序列首地址存入R0
END
向30H~39H单元中输入数据,运行程序,观察30H~39H 单元中的内容,分析结果是否正确。
2、查表程序
设计一程序,将16 进制数转换为对应的ASCII 码。
设16 进制数放在R6 中,转换结果
放在R7 中。
参考程序如下:
ORG 0000H
MOV A,R6 ;将要转换的16进制数存入A中
ANL A,#0FH ;将A的低位提取出来
MOV DPTR,#0030H ;将DPTR指向转换表的首地址
MOVC A,@A+DPTR ;进行查表,采用基址加变址寻址方法
MOV R7,A ;将转换结果放在R7中
ORG 0030H
TAB: DB ‘012345678’;建立转换表
DB ‘9ABCDEF’
END
输入设计好的程序检查无误后,汇编。
向R6 中输入多个不同的ACSII 码,运行程序,
观察R7 中的内容,分析运行结果是否正确。
3、双字节原码加减法程序
功能:(R2R3)±(R6R7)→(R4R5)
加减和求补过程采用子程序。
参考程序如下:
ORG 0000H
DSUB: MOV A,R6
CPL ACC.7
MOV R6,A
DADD:MOV A,R2
MOV C,ACC.7
MOV F0,C
XRL A,R6
MOV C,ACC.7
MOV A,R2
CLR ACC.7
MOV R2,A
MOV A,R6
CLR ACC.7
MOV R6,A
JC DAB2
ACALL NADD
MOV A,R4
JB ACC.7,C
DAB1:MOV C,F0
MOV ACC.7,C
MOV R4,A
AJMP HERE
DABE:SETB C
AJMP HERE
DAB2:ACALL NSUB1
MOV A,R4
JNB ACC.7,DAB1
ACALL CMPT
CPL F0
SJMP DAB1
HERE:SJMP HERE
ORG 0030H
NADD:MOV A,R3
ADD A,R7
MOV R5,A
MOV A,R2
ADDC A,R6
MOV R4,A
RET
NSUB:MOV A,R3
CLR C
SUBB A,R7
MOV R5,A
MOV A,R2
SUBB A,R6
MOV R4,A
RET
CMPT:MOV A,R5
CPL A
ADD A,#1
MOV R5,A
MOV A,R4
CPL A
ADD A,#00H
MOV R4,A
RET
END
输入设计好的程序检查无误后,汇编。
向R2R3 和R6R7 中输入多个不同的数据,运行
程序,单步运行程序时,观察程序的运行过程。
程序运行结束后,观察R4R5 中的内容,分
析运行结果是否正确。
四、实验设备及仪器
1、单片机实验装置及开发系统一套;
2、PC 机一台。
五、思考题
1、伟福集成开发环境提供了那些运行命令,它们之间的区别是什么?
2、怎样设置和清除断点?
答:将光标移到源程序窗口的左边“Gutter”区域,单击左键设置断点,也可以用F6键将
光标所在行设置为断点。
3、子程序执行过程怎样?在程序设计中采用子程序有什么优点?
答:用子程序调用指令时,先将PC加2的内容入栈,然后将子程序第一条指令的地址给PC,转向子程序开始执行,子程序结束返回时利用RET指令,此时从堆栈中退出PC的高八位和低八位给PC,主程序继续执行。
采用子程序能使整个程序的结构简单,缩短程序的设计时间,减少占用的程序存储空间。
实验四单片机中断实验
一、实验目的
1、了解单片机的中断过程。
2、了解单片机中断的触发方式。
3、了解单片机中断的程序设计。
4、学习中断服务程序的调试方法。
二、实验内容
1、单片机外部中断的低电平触发方式
如图3.4.1,按住开关K,在INT0 端产生一个低电平信号,触发外部中断,将事先送入
寄存器R1 中的值由LED 即发光二极管电路显示出来。
2、单片机外部中断的下降沿触发方式
如图3.4.1,按一下开关K,在INT0 端产生一个下降沿信号,触发外部中断,将事先送
入寄存器R1 中的值由LED 即发光二极管电路显示出来。
注意:开关Kx 可用查询式键盘中的任意一键代替。
三、实验步骤
1、外部中断的低电平触发方式
(i)按图4-3 给出的原理图连好电路,其中Kx 可为‘开关量输入如模块’中的任意一个开
关,用双头线与INT0 引脚(位于单片机扩展资源区(D1 区))连接。
(i)根据实验内容1 要求,设计外部中断的低电平触发方式的主程序和中断服务子程序。
参考程序如下:
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP ITAP
ORG 0030H
MAIN:MOV TCON,#00H ;设置TCON控制寄存器(低电平触发方式)SETB EX0 ;开启外部中断0
SETB EA ;开启总中断
HERE:AJMP HERE ;当无中断发生时,程序在此原地踏步
ORG 0040H ;中断程序
ITAP:MOV A,R1
MOV P1,A ;通过设置R1的值可以控制中断发生时P1口
的状态,进而控制灯的亮灭
RETI
END
(ii)打开计算机和实验装置,进入菊阳单片机集成开发环境,输入、汇编、运行程序。
(iii)R1 置不同的值,将开关Kx 置0 位置,再置回1 位置(相当于按下开关),观察实验
现象。
2、外部中断的下降沿触发方式
(i)根据实验内容2 的要求,设计外部中断的下降沿触发方式的主程序和中断服务子程序。
参考程序如下:
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP ITAP
ORG 0030H
MAIN:MOV TCON,#01H ;设置TCON控制寄存器(下降沿触发方式)MOV IE,#81H ;开启总中断,开启外部中断0
MOV R1,#21H
HERE:AJMP HERE ;原地踏步
ORG 0100H ;中断程序
ITAP:MOV A,R1
SWAP A
MOV P1,A ;中断程序的功能为交换P1高四位低四位
RETI 效果为高四位灯与低四位灯交换闪烁一次
END
(ii)打开计算机和实验装置,进入菊阳单片机集成开发环境,输入、汇编、运行程序,分
析现象。
(iii)R1 置不同的值,按下开关,观察实验现象与自己分析结果是否相符。
四、实验设备及仪器
1、单片机实验装置及开发系统一套;
2、PC 机一台。
五、思考题
1、有关中断的特殊功能寄存器有那些?答:TCON,SCON,IE,IP
2、单片机外部中断的低电平触发方式存在什么问题?怎样解决?
答:响应中断后中断请求标志的撤销是自动的,但是低电平仍然存在,在以后的采样时又有可能重新响应中断。
解决方法为在中断引脚外加一由D锁存器构成的电平方式外部中断请求的撤销电路。