、
单片机原理与应用
实验报告
单片机原理与应用第一次实验报告
第一章软件仿真实验
1.1实验1:汇编程序实验1
① 示例程序实验
(1)实验内容
在Keil环境下建立工程,并将以下程序加入工程,构造工程,并运行可执行程序,记录执行结果。分析程序功能。
(2)添加注释后的程序
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV SP,#60H ;堆栈底设置在60H
MOV A,#0H ;A置零
MOV R1,#30H ;起始单元地址为30H
MOV R7,#10H ;R7用于计数,初值为10H
LOOP1: ;将30H开始的16个内存单元置零
MOV @R1,A
INC R1
DJNZ R7,LOOP1
NOP
MOV R1,#30H
MOV R7,#10H ;重新赋计数初值和起始单元地址
LOOP: ;将0到F赋给30H开始的16个单元中;
MOV @R1,A
INC R1 ;地址自增
INC A ;A自增
DJNZ R7,LOOP
SJMP $
END
(3)示例程序的功能
将30H开始的16个内存单元清0,然后将值0到F赋给30H开始的16个单元。
(4)运行结果截图
② 自我完成实验
(1)实验内容
将片内RAM 30H单元中的8位二进制数转换成10进制数。希望转换后的结果保存于31H和32H,31H低4位存放个位,高4位存放十位,32H低4位存放百位,高4位为0。
程序流程图:
(2)程序及其注释
org 0000h
ajmp main
org 0030h
main:
mov 30h,#68h ;待转化的数存于30H单元
mov a,30h ;取数
mov b,#64h ;100赋给B
div ab ;待转化的数除以100
clr 32h ;清32H单元
mov 32h,a ;商为十进制百位,存于32H
mov a,b
mov b,#0ah
div ab ;余数赋给A,余数除以10
swap a ;商为个位,自交换后存于A高四位
add a,b
mov 31h,a ;A,B相加可以将十进制数个位十位存于31H单元
sjmp $
end
(3)实验过程
1、新建工程:二进制十进制转化.uV2;
2、设置工程:二进制十进制转化.uV2属性,将其晶振频率设置为12MHz,选择输出可执行文件,仿真方式为“Use Simulator”;
3、建立源程序,编写程序,程序编写思路:将待转化数存于30H单元,取出待转化的数给A,将待转化的数除以100,商位于A,余数在B。32H单元清零,前一步所得的商为十进制百位,将其存于32H单元,取余数除以10,A中的商为待转化十进制数的十位。A自交换,十位的值存于A高四位,将其和B中的值相加,和存于31H单元,即实现了十进制数个位十位存于31H单元。
4、将源程序保存为:二进制十进制转化.asm,并且添加到工程中;
5、编译源程序,如果输入有误进行修改,直至编译通过,生成可执行程序:二进制十进制转化.hex;
6、运行程序,并用存储器观察窗口,观察内部RAM 30H,31H,32H单元的值。
(4)程序运行结果截图
1.2实验2:汇编程序实验2
① 示例程序实验
(1)实验内容
在Keil环境下建立工程,并将以下程序加入工程,构造工程,并运行可执行程序,记录执行结果。分析程序功能。
(2)程序及其注释
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV 30H, #45H ;待操作数存于30H单元
MOV A, 30H ;30H单元中的数送A
ANL A,#0FH ;高四位清零,保留低四位
MOV 31H,A ;结果存于31H单元
MOV A,30H ;重新取待操作数至A
ANL A, #0F0H ;低四位清零,保留高四位
SWAP A ;自交换实现待操作数的高四位表示的二进制数存于A
MOV B, #10
MUL AB ;待操作数的高四位表示的二进制数乘以10
ADD A,31H ;待操作数的高四位表示的二进制数乘以10后和低四位表示的二进制数相加
MOV 31H,A ;存结果于31H单元
SJMP $
END
(3)示例程序的功能:
实现求得一个八位二进制数高四位表示的二进制数乘以10和低四位表示的二进制数的和。如为两位压缩BCD码,则实现求得相应十进制数值,并以二进制形式存于内存单元中。
(4)运行结果截图
② 自我完成实验
(1)实验内容
将片内RAM 30H开始的32个单元中分布着随机的有符号8位二进制数,请按从小到大的顺序进行排序,排序后的数据仍然保存到30H开始的32个单元中(低地址存放小数据)。
编程思路:
首先,在程序存储器中构建一个表格,该表格具有32个随机产生的8位二进制数,如:
TABLE: DB 1,3,9,2,17,4,11,6
DB 5,20,100,64,21,14,79,35
DB 92,7,91,23,65,16,13,18
DB 18,73,65,101,27,19,62,69
然后利用查表指令“MOVC A,@A+DPTR”将它们读取到30H-4FH单元中,
然后再利用“冒泡法排序法”将它们排序即可。
“冒泡法排序法”的基本原理是:
遍历所有32个数据找出其中的最大者,并记下最大数据所在的存储位置,然后将这个最大的数据放置在最后一个单元,同时,将最后一个单元原来的数据保存到这个最大值原来所处的位置,完成第一轮的排序。
然后,再遍历除了最后一个单元以外的前面31个单元的数据并找出其中最大者,并记下其所在位置,遍历完这一遍后将找到的最大数据保存在倒数第二个单元(对于所有数据来说它是次最大数据,所以保存在倒数第二个单元),并将倒数第二个单元原来的数据保存在刚刚找到的那个最大值原来所在的位置处,完成第二轮的排序。依次类推,用同样的方法把所有的数据排好序即可。
(2)程序及其注释
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV R0,#20H ;R0用于计数,20H=32
MOV R1,#30H ;R1为数据指针
MOV DPTR,#TABLE ;DPTR指向表首
MOV R2,#00H ;偏移量赋值
MOV A,R2
STO:MOVC A,@A+DPTR ;取出表中数据,存入30H开始的内存单元
MOV @R1,A ;取出数据存入R1中存储地址指向的内存单元
INC R1 ;指向下一个单元
INC R2 ;偏移量增一
MOV A,R2
DJNZ R0,STO ;判断表中数据是否全部取出并存入内存
MOV R3,#1FH ;内循环计数(31)
MOV R4,#1FH ;外循环计数(31)
MOV R1,#30H
LOOP1: CLR C ;C清0
MOV A,@R1
INC R1
MOV R5,A
SUBB A,@R1 ;取出两个数相减置C来比较大小
MOV A,R5
JC LOOP2 ;第一个数小于第二个数,跳转LOOP3
XCH A,@R1 ;否则交换两单元中数的位置,小的在前大的在后
DEC R1
MOV @R1,A
INC R1 ;指向下一单元
LOOP2:DJNZ R3,LOOP1 ;判断在一轮中是否比较完了所有的数
DEC R4
MOV A,R4
MOV R3,A ;内外循环计数值分别自减
MOV R1,#30H
ADD A,#1
MOV R4,A
DJNZ R4,LOOP1 ;判断外循环是否进行完毕,即排列完所有的数,否则跳回继续比较
ORG 3000H ;另外开辟空间,建立待排序数的表格
TABLE: DB 1,3,9,2,17,4,11,6
DB 5,20,100,64,21,14,79,35
DB 92,7,91,23,65,16,13,18
DB 18,73,65,101,27,19,62,69
HERE: SJMP HERE
END
(3)实验过程
1、新建工程:冒泡法排序.uV2;
2、设置工程:冒泡法排序.uV2属性,将其晶振频率设置为12MHz,选择输出可执行文件,仿真方式为“Use Simulator”;
3、建立源程序,编写程序,按照冒泡法排序的思路编写程序,大体思路可见源程序注释。
4、将源程序保存为:冒泡法排序.asm,并且添加到工程中;
5、编译源程序,如果输入有误进行修改,直至编译通过,生成可执行程序:冒泡法排序.hex;
6、运行程序,并用存储器观察窗口,观察内部RAM 30H-4FH单元排序前后的数值。
(4)程序运行结果截图
第二篇:山东大学上机实验报告内容
6.1.11.在开始菜单的运行中输入secpol.msc,启动本地安全设置程序.2.把管理员账户名称改成‘哈哈哈’.再新建一个受限的账户,用户名为‘Administrator’.3.看书上的内容,思考提出的问题.6.1.21.新建一个IP安全策略.2.按书上要求编辑IP安全策略属性.3.添加一个阻止135端口的规则.4.在筛选器操作中添加阻止操作.5.应用后回到IP安全策略.6.添加其他IP安全规则,重复以上步骤,建立一个UDP445的阻止策略.7.指派445的阻止策略,发现策略只能指派一个.8.思考书上问题.6.1.31.打开TCP/IP协议属性2.设置TCP/IP筛选,选择只允许TCP端口80.3.确定,系统提示要重启计算机才能完成设置.按了取消,没有重启.4.思考书上问题,百度后知道QQ用的是UDP协议端口,所以我认为通过TCP/IP筛选无法禁止QQ上网聊天.6.1.41.打开防火墙属性,查看基本配置.