单片机.docx
《单片机.docx》由会员分享,可在线阅读,更多相关《单片机.docx(15页珍藏版)》请在冰豆网上搜索。
![单片机.docx](https://file1.bdocx.com/fileroot1/2023-4/18/eac63e02-e688-4885-a34f-91a68161724d/eac63e02-e688-4885-a34f-91a68161724d1.gif)
单片机
单片机实验1汇编语言程序设计实验
----存储器块清零或赋值
专业:
_自动化_班级:
自动1405姓名:
毛倩
学号:
201423020526完成日期:
2016-11-6成绩评定:
一.实验目的
1熟悉存储器的读写方法,熟悉51汇编语言结构。
2熟悉循环结构程序的编写。
3熟悉编程环境和程序的调试。
二.实验内容
指定存储器中某块的起始地址和长度,要求将其内容清零或赋值。
例如将
4000H开始的100个字节内容清零或全部赋值为33H。
三.实验仪器
微机、VW,WAVE600编0程环境软件,(单片机实验箱)
仿真器--仿真器设置-Lab6000/Lab6000通用微控制器MCS5实验伟福
软件模拟器
四.实验步骤
1文件不要用中文名称保存时不要用中文路径(目录),不要放在“桌面”上,
源文件和工程要放在同一个文件夹下,文件名称和路径名称不要太长。
2查看存储器菜单使用:
窗口---数据窗口---XDATA观察存储器内容
3查看SFR:
窗口---CPU窗口查看CPU寄存器SFR
4单步执行:
执行---单步执行(F8),每执行一步,查看每条语句涉及到的寄存
器和存储器内容的变化结果,是否是指令所要得到的结果,如不是,检查错
误原因,修改。
5利用多种执行方法和观察各种窗口调试程序,直至程序满意为止。
编译器默认设置:
程序框图
参考程序:
Blockequ4000h
movdptr,#Block;起始地址
movr0,#10;清10个字节mova,#33h;
Loop:
movx@dptr,a
incdptr;指向下一个地址
djnzr0,Loop;记数减一
ljmp$
end
五.实验结果(截图)
单步运行
SFR窗口
最终结果
单片机实验2存储块移动
专业:
_自动化_班级:
自动1405姓名:
毛倩
学号:
201423020526完成日期:
2016-11-6成绩评定:
一.实验目的
1熟悉51汇编语言程序结构。
2熟悉循环结构程序的编写,进一步熟悉指令系统。
3熟悉编程环境和程序的调试。
二.实验内容
将指定源地址(3000H)和长度(10字节)的存储块移动到目的地址(3050H)。
三.实验仪器
微机、VW&WAVE60软00件,(单片机实验箱)
注意:
在编程环境中,可以通过软件仿真,观察程单片机运行情况。
程序流程图
源程序
org1000h
movr6,#10;首位字节内容
movr0,#30h;r0r1用于存放源地址3000h
movr1,#00h
movr2,#30h;r2r3用于存放目的地址3050h
movr3,#50h
movr7,#10;定义字节长度
Loop:
movdph,r0;使DPTR指向源地址
movdpl,r1
mova,r6;;将R6单元中的值转移到dptr指向的单元
movx@dptr,a
movr6,a;数据保护
movxa,@dptr;数据转移
movdph,r2
movdpl,r3
movx@dptr,a;
incr1;源地址增1
incr3;目的地址增1
djnzr7,Loop;字节长度减1,不等于0,跳转到Loop
ljmp$;单步循环
end
四.实验结果(截图)
单片机实验3数据排序
专业:
_自动化_班级:
自动1405姓名:
毛倩
学号:
201423020526完成日期:
2016-11-6成绩评定:
一.实验目的
1了解数据排序的常用算法,掌握冒泡算法。
2进一步熟悉编程环境和调试方法。
3熟悉汇编程序设计。
二.实验内容
将50H开始的10个随机数按从小到大的顺序排列。
三.实验仪器微机、WAVE6000编程环境
四.实验步骤
由于上电后数据都一样,所以需要手动修改50H后10个数据(要排序的数)
如(6,2,4,9,3,7,1,5,8,0)
方法是:
窗口---数据窗口---DATA找到50H开始的10个2位16进制数,双
击,修改其数值,之后编译(下载),单步执行,查看排序执行过程
源程序:
org1000h
Sizeequ10;数据个数
Arrayequ50h;数据起始地址
Changeequ0;交换标志
Sort:
movr0,#Array
movr7,#Size-1
clrChange;清除交换标志
Goon:
mova,@r0
movr2,a
incr0
movB,@r0
cjnea,B,NotEqual;比较累加器A、B,不相等跳转到NotEqual
sjmpNext
NotEqual:
jcNext;前小后大,不交换
setbChange;前大后小,置交换标志;排序是否结束标志?
xcha,@r0;交换
decr0;地址减1
xcha,@r0
incr0;地址加1
Next:
djnzr7,Goon;数据个数减1不等于0,跳转Goon
jbChange,Sort;交换标志为1,跳转Sort
ljmp$;单步循环
end
五.实验结果(截图)
排序前
单步运行
排序后
单片机实验4P1口输入输出实验
专业:
_自动化_班级:
自动1405姓名:
毛倩
学号:
201423020526完成日期:
2016-11-6成绩评定:
一.实验目的
1.熟悉P1口的功能。
2.熟悉延时子程序或定时中断程序的编写和使用。
3.初步熟悉单片机软硬件设计方法。
二.实验内容(两内容分开做)
硬件实验需要连接硬件仿真器,连接方式如下:
菜单:
仿真器/仿真器设置:
选择仿真器/选择仿真头/LAB8000/LAB6000通用微控制器/MCS51实验
1.P1口做输出口接八只发光二极管,编写程序,使发光二极管循环亮灭。
实验箱的发光二级管LED是高电平点亮,低电平灭。
2.P1.0,P1.1作输入口接两个拨动开关,P1.2,P1.3作输出口,接两个发光二
极管。
编写程序读取开关状态,将此状态在发光二极管上显示出来。
三.实验仪器
微机,WAVE800编0程环境、实验箱
注意:
当P1口用作输入口时,必须先对它置”1”。
编程时应注意P1.0,P1.1作为输入时应先置1,才能正确读入值。
流程图:
实验
(1)
源程序:
org1000h
Loop:
mova,#01h;P1口初值
movr2,#8;I/O口循环个数
output:
movP1,a;P1口输出
rla;累加器A左移一位
callDelay;调用延时子程序
djnzr2,Output;R2减1,不等于0跳转到Output
ljmpLoop;循环点亮P1口
Delay:
;延时子程序
movr6,#200;2*125*200*12/12000000=50ms
DelayLoop1:
movr7,#125
DelayLoop2:
djnzr7,delayLoop2
djnzr6,delayLoop1
ret
end
实验
(2)
源程序:
org1000h
key0equP1.0;位定义
key1equP1.1
led0equP1.2
led1equP1.3
SETBkey0;读引脚,向对应位写1
SETBkey1
LOOP:
movC,key0;cpu读key0状态
movled0,C;key0状态写入led0
movC,key1
movled1,C
LJMPLOOP;跳回LOOP
end
四.实验现象
实验一:
与P1口连接的八个LED灯一次循环点亮,即为八位流水灯;
实验二:
当开关处于闭合状态时,对应的LED灯被点亮,开关断开,LED灯
熄灭。
实验五计数器实验
专业:
_自动化_班级:
自动1405姓名:
毛倩
学号:
201423020526完成日期:
2016-11-6成绩评定:
一.实验目的
1熟悉计数器的使用方法。
2熟悉计数器的硬件电路连接。
3熟悉计数器的软件设计。
二.实验内容
硬件实验需要连接硬件仿真器,连接方式如下:
菜单:
仿真器/仿真器设置:
选择仿真器选择仿真头
LAB8000/LAB6000通用微控制器MCS51实验
8031内部定时计数器0,按计数器模式和工作方式1工作,对P3.4(计数
器0计数脉冲输入T0)引脚进行计数。
将其计数数值按二进制数用P1口驱动
LED灯显示出来。
本程序显示的数值为计数器的第2~8位。
说明:
本实验中,内部计数器起计数器作用。
外部事件计数脉冲有P3.4引入定
时器T0。
单片机在每个机器周期采样一次输入脉冲,因此单片机至少需要两
个机器周期才能检测到一次跳变。
这就要求被采样电平至少保持一个完整的机
器周期,以保证在变化之前就被采样。
同时,这就决定了输入波形的频率不能
超过机器周期频率。
三.实验仪器
微机、WAVE600编0程环境,伟福6000实验箱
注意:
P3.4接单次脉冲
实验箱的单次脉冲(高电平,低电平)接口如下图中间位置:
绿色按钮为脉冲产生按钮:
程序流程图:
源程序:
ORG0000H
LJMPMAIN
ORG1000H
MAIN:
MOVR7,#7;TH0左移7位
MOVTMOD,#05H;定时器0,方式1
MOVTH0,#0;初值0000h
MOVTL0,#0
MOVP1,#0;P1复位
SETBTR0;开启计数器0
LOOP:
MOVR1,#0FEH
MOVR2,#01H
MOVA,R1;TL0&FEH,获得TL0高七位,存放在R1
ANLA,TL0
RRCA;
MOVR1,A
MOVA,R2;TL0&01H,获得TH0最低位,加上R1存放在R3
ANLA,TH0
LOOP1:
RLA;左移七次
DJNZR7,LOOP1
ADDA,R1
MOVR3,A
MOVP1,R3;P1口显示TH0.0+TL0.7_0.1共八位
LJMPLOOP
END
四.实验现象
本实验程序设计的显示16位DPTR数据中的2~8位,并用LED显示其
二进制数值。
当外部按键按下两次后,LED状态改变一次,即按键次数每增加
2,LED对应的二进制数值加1,故本实验最多能记录512次按键,此时LED
全亮。
实验六外部中断实验
专业:
_自动化_班级:
自动1405姓名:
毛倩
学号:
201423020526完成日期:
2016-11-6成绩评定:
一.实验目的
1熟悉外部中断的硬件电路,中断技术的基本使用方法。
2熟悉外部中断的软件设计。
二.实验内容
硬件实验需要连接硬件仿真器,连接方式如下:
菜单:
仿真器/仿真器设置:
选择仿真器选择仿真头
LAB8000/LAB6000通用微控制器MCS51实验
利用实验箱上的单脉冲按键和发光二极管,蜂鸣器,实现:
用单次脉冲申
请中断,在中断服务程序中对输出信号进行翻转(每当输出一个单次脉冲时(产
生低电平一个脉冲),发光二极管(L0)亮灭变化一次),并使蜂鸣器响一段时
间,修改相关参数使蜂鸣器响的时间改变。
蜂鸣器是在哪里关闭的?
?
三.实验仪器
微机、VW,WAVE600编0程环境,实验箱
连线:
P1.0连接L0;
喇叭连接P1.1
INT0(P3.2)连接低电平单次脉冲。
实验箱的单次脉冲(高电平,低电平)接口如下图中间位置:
绿色按钮为脉冲产生按钮:
注意
中断服务程序(ISR)关键:
1保护进入中断时的现场,现场是指中断发生时各个寄存器,数据存储区的内
容,为了能够继续完成没完成的工作状态,在退出中断之前需恢复现场(还原
在中断程序中修改的而在主程序用到的寄存器,存储器的内容)。
本例中保护
CPU状态寄存器PSW,R0,R1,等的内容。
(例程中R2没有被保护,它的值是
不是被中断服务程序修改了,可以修改程序看看与保护后的结果的不同)。
2中断重入的设置中断相关寄存器的设置:
中断寄存器IE,中断触发方式的设
置。
4中断程序和子程序的区别。
中断程序不是程序调用的,中断发生时,CPU
就执行相应中断服务程序,每个中断对应固定的开始地址,每个中断向量8
个字节空间。
程序流程图:
源程序:
LEDequP1.0;宏定义
SpeakerequP1.1
LEDBufequ0
ljmpStart
ORG0003H;外部中断0入口地址0003H
LJMPINT0;跳转外部中断0处理程序
ORG1000h
INT0:
pushPSW;保护现场
PUSH1;R1进堆栈,采用直接寻址方式,第0组R1的地址为1
PUSH0;R0进堆栈,采用直接寻址方式,第0组R0的地址为0
cplLEDBuf;取反LED
movc,LEDBuf
movLED,c
MOVR2,#55H;R2没有进堆栈,中断程序中会改变其值
movR1,#250;蜂鸣器开通时间(脉冲数)
Loop:
;调制蜂鸣器脉冲
clrSpeaker;关闭蜂鸣器
callDelay;延时
setbSpeaker;开通蜂鸣器
callDelay;延时
DJNZR1,Loop;R1不等于0,跳转LOOP
POP0;R0出堆栈,采用直接寻址方式
POP1;R1出堆栈,采用直接寻址方式
POPPSW;恢复现场
Reti;中断返回
Delay:
movr0,#250;修改参数,蜂鸣器响时间长短不同
djnzr0,$;$程序计数器PC当前值
RET
Start:
clrLEDBuf;LEDBuf清零
clrLED;熄灭LED灯
movTCON,#01h;外部中断0下降沿触发(IT0=1)
movIE,#81h;打开外部中断允许位(EX0)及总中断允许位(EA)
MOVR0,#99H;R0赋值
MOVR1,#99H;R0赋值
MOVR2,#99H;中断程序中R2没有进栈保护,但值在中断程中
被修改为55H,执行一次中断程序后完其值被
改变
OFFSpeaker:
clrSpeaker;关蜂鸣器在中断里面打开了,没有关闭
ljmpOFFSpeaker
四.实验现象
现象描述:
当绿色按钮按下后,产生一个单脉冲,LED状态改变,蜂鸣器响一次。