单片机实验报告
学号:100250212
姓名:
指导教师:
实验二
一、 实验目的
1 、 进一步了解开发系统的功能和使用;
2 、 了解程序设计与调试的基本过程;
3 、 了解简单程序和分支程序程序的特点和设计。
二、 实验内容
1 、 简单程序的设计、输入、调试和运行;
2 、 分支程序的设计、输入、调试和运行;
三、 实验步骤
1、设计、调试双字节乘法程序,功能为:(R2R3)*(R6R7)→R4R5R6R7 输入设计好的程序检查无误后,汇编。向R2R3和R6R7中输入多组不同的数据,运行
程序,观察R4R5R6R7中的内容,分析运行结果是否正确。
2、求符号函数??
???<=>=)0()0()0(1-01X X X Y ,设:X →30H ,Y →31H 输入设计好的程序检查无误后,汇编。向30H 中输入多个不同的数据,运行程序,观
察31H 中的内容,分析运行结果是否正确。
3、将ASCII 码转换十六进制数
设ASCII码放在累加器A中,结果放回到A中,如果A中的内容不是十六进制的数的ASCII码,用户标志位F0置1。输入设计好的程序检查无误后,汇编。向A中输入多个不同的数据,运行程序,观察A中的内容,分析运行结果是否正确。
四、实验程序及分析结果
1、双字节乘法运算程序
程序如下:
ORG 0000H
LJMP MAIN
MAIN: MOV A, R3 ;先计算R7乘R3
MOV B, R7
MUL AB ;A中为积的低八位
MOV R1,A ;将低八位存入R1中
MOV R5,B ;将高八位存入R5中
MOV A, R2 ;计算R7乘R2
MOV B, R7
MUL AB
ADD A, R5 ;R5加至A
MOV R5, A ;将结果存入R5
MOV R4, B ;将高位结果存入R4
MOV A, R1
MOV R7, A ;将低八位存入R7中
JNC NEXT1 ;C为零则跳转
MOV A, R4 ;如果C为1则将R4加一
CLR C
ADD A, #01
MOV R4, A
NEXT1: MOV A, R3
MOV B, R6
MUL AB
ADD A, R5
MOV R5, A
MOV R1,B
MOV A, R4
JNC NEXT2
CLR C
ADD A, #1
NEXT2: ADD A, R1
MOV R4, A
MOV A, R2
MOV B, R6
MUL AB
ADD A, R4
MOV R4, A
MOV A, B
JNC NEXT3
CLR C
ADD A, #1
NEXT3: MOV R1, A
MOV A,R5
MOV R6, A
MOV A, R4
MOV R5, A
MOV A, R1
MOV R4, A
HERE: SJMP HERE
END
总体思想为将该16位乘法拆分为四步8位乘法运算在进行带进位的相加程序中每段分别实现一个八位乘法,然后与上次运算结果相加。
实验结果
该程序正确正确的执行出了结果,输入数据后其输出数据均正确。
2、符号函数程序:
ORG 0000H
START: MOV A,30H
CJNE A,#00H,NZ
AJMP LL
NZ: JB ACC.7,MM
MOV A,#01H
AJMP LL
MM: MOV A,#81H
LL: MOV 31H,A
HERE: SJMP HERE
END
总体思想:将30H中的数与0比较,相等则31H输出为0;不相等判断最高位(符号位),符号位为0,说明是整数,输出为01H;符号位为1,说明为负数,输出为81H。
3、码转换程序
ORG 0000H
CLR C
CLR F0
SUBB A,#30H
JC NASC
CJNE A,#0AH,NE1
NOP
NE1: JC ASC
SUBB A,#07H
CJNE A,#0AH,NE2
NE2: JC NASC
CJNE A,#10H,NE3
NE3: JNC ASC
NASC: SETB F0
ASC: NOP
HERE: SJMP HERE
END
总体思想:16进制包括0~9,A~F,0~9的ASC值为30~39,A~F的ASC 值为65~70,依次按程序判断给出的数是否在这两个区间之内,满足条件则输出对应的16进制数,不满足条件则用户标志位F0置1.
实验三
一、实验目的
1 、了解汇编语言程序设计与调试的过程;
2 、掌握循环程序、查表程序和子程序的特点及设计。
二、实验内容
1 、循环程序的设计、输入、调试和运行;
2 、查表程序的设计、输入、调试和运行;
三、实验步骤
1 、排序程序:将N 个数从小到大排列起来。设R0的内容为数
据区的首地址,R7的内容为数据的字节数。
ORG 0000H
LJMP MAIN
MAIN:
SS:MOV A,R7
MOV R2,A
MOV 60H,R0
NN:DEC R2
MOV A,R2
MOV R3,A
MOV R0,60H
L1:MOV A,@R0
INC R0
CLR C
SUBB A,@R0
JC MM
MOV A,@R0
DEC R0
XCH A,@R0
INC R0
MOV @R0,A
SETB F0
MM:DJNZ R3,L1
MOV A,R2
CJNE R2,#01H,RR
SJMP JJ
RR:JB F0,NN
JJ:MOV R0,60H
HERE: SJMP HERE
END
该程序为经典的冒泡排序算法为效率非常高的算法,其大体
思想如下:
1.比较相邻两个数,如果后一个大于前一个,则将两个数交
换,否则不进行任何动作
2.继续比较下一个数
3.如果本趟比较没有进行交换,则排序完毕
2 、查表程序设计一程序,将16进制数转换为对应的ASCII 码。设
16进制数放在R6中,转换结果放在R7中。
ORG 0000H
LJMP MAIN
MAIN: MOV A,R6
ANL A,#0FH
MOV DPTR, #TAB
MOVC A,@A+DPTR
MOV R7, A
MOV R7, A
HERE: SJMP HERE
ORG 0030H
TAB :DB ‘012345678’
DB ‘9ABCDEF’
END
程序基本思想:将R6输入的数作为地址偏移量,进行查表寻址,采用DPTR指针寻址,基址为表格起始地址
四、实验结果
将数存入相应的内存单元,运行程序,排序结果正确
程序二中装换结果正确。
实验四单片机中断实验
一、实验目的
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区))连接。
参考程序如下:
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP ITAP
ORG 0030H
MAIN:MOV TCON ,#00H
SETB EX0
SETB EA
HERE:AJMP HERE
ORG 0040H
ITAP :MOV A,R1
MOV P1, A
RETI
END
2 、外部中断的下降沿触发方式
参考程序如下:
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP ITAP
ORG 0030H
MAIN: MOV TCON , #01H
MOV IE , #81H
MOV R1, #21H
HERE: AJMP HERE
ORG 0100H
ITAP : MOV A, P1
SWAP A
MOV P1, A
RETI
END
程序一设为低电平触发方式,只要外部存在低电平,则执行中断服务程序,程序二为下降沿触发模式。
四、实验结果
程序一在低电平持续期间,不停执行中断服务程序,程序二只在下降沿是执终端服务程序。
实验五单片机定时/计数器实验
一、实验目的
1 、了解单片机定时/ 计数器原理、工作方式选择;
2 、了解单片机定时与计数器的工作过程;
3 、了解单片机定时/ 计数器的程序设计方法。
二、实验内容
1 、用定时、计数器控制图4-4 中的发光二极管,使其亮两秒,灭两秒,周而复始,设计该
程序。
三、实验步骤
1 、设T0定时间隔为50ms(方式),当定时时间到后,将P1.7 的输
出加到T1端作计数脉冲,需要定时两次才构成一个完整的计数脉冲,因此T1需计数20 次,才能完成2 秒的定时,
2 、计算定时/ 计数器的初值T0为定时方式,
设其初值为4C00H
T1为计数方式初值为256-10=246=ECH
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP T0_INT
ORG 0100H
MAIN: MOV TMOD, #61H
MOV TL1, #0ECH
MOV TH1, #0ECH
MOV TH0, #4CH
MOV TL0, #00H
MOV IE, #82H
SETB TR0
SETB TR1
LOOP1: JBC TF1, LOOP2
SJMP LOOP1
LOOP2: CPL P1.0
SJMP LOOP1
T0_INT: MOV TH0, #4CH
MOV TL0, #00H
CPL P1.7
RETI
END
每次经过50ms定时器一产生一个中断,将p1.7的电平翻转,产生100ms的脉冲,将其作为T1的计数输入端,则可产生一个周期两秒的脉冲
四、实验结果
P1.7的小灯按100ms的周期闪烁,P1.0的小灯按2s的周期闪烁。