单片机及其接口技术实验报告.docx
- 文档编号:17862220
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:36
- 大小:584.96KB
单片机及其接口技术实验报告.docx
《单片机及其接口技术实验报告.docx》由会员分享,可在线阅读,更多相关《单片机及其接口技术实验报告.docx(36页珍藏版)》请在冰点文库上搜索。
单片机及其接口技术实验报告
单片机及接口技术实验报告
实验一数据传送程序
一、实验目的
1、掌握汇编语言设计和调试方法。
2、掌握DVCC实验系统的操作步骤。
二、实验内容
1、编程实现,把7000H~70FFH单元的内容清零。
2、编程实现,把源地址为6000H开始的单元内容,传送到目的地址7000H开始的单元中,传送个数为0FFFH个。
三、DVCC实验系统操作说明
1、接通DVCC实验系统电源,在DVCC实验箱上应显示闪动的“P”,否则按Reset键。
2、
运行DVCC软件。
(程序 DVCC598H实验系统 DVCC实验系统)
3、单击工具栏上“新建”或“打开”按钮,编写源程序。
单击“编译”按钮,使其形成可执行文件。
4、单击工具栏上“联接”按钮,同时按下DVCC实验箱上PCDBG键(键盘上最右边第2个),实现PC机和实验箱的联接。
联机成功,屏幕上出现:
.反汇编窗口、寄存器标示位窗口。
5、在成功联机后,单击工具栏上“调试”按钮,把最终目标文件装载到实验系统RAM区;或者通过单击菜单栏中的“动态调试”,选择“传送(.EXE)文件”来实现。
6、单击工具栏上“运行”或“单步”按钮,运行实验程序。
7、单击工具栏上“窗口”,选择“显示内部数据窗口”或“显示外部数据窗口”可显示数据窗口。
鼠标右击数据窗口的数据,可设置数据块新地址;鼠标左键单击数据,可修改数据数值。
8、运行完毕,先按实验箱上的复位按钮Reset键,再按PCDBG键,并且点击屏幕上OK,即可退出运行状态。
四、实验程序代码
1、把7000H~70FFH单元的内容清零。
程序代码:
ORG0000H
AJMPSTART
ORG70H
START:
MOVP2,#70H;送地址高8位到P2端口
MOVR0,#00H;R0=00H,表地址低8位
CLRA;将累加器A清0
LOOP:
MOVX@R0,A;将A送入以R0内容为地址的外部RAM.
INCR0;R0+1-->R0
CJNER0,#00H,LOOP;比较条件转移指令,若R0不等于0,则跳转到LOOP
AJMP$;暂停
END
2、编程实现,将源地址为6000H开始的单元,传送到目的地址7000H开始的单元,传送个数为0FFFH个。
程序代码:
ORG0000H
AJMPSTART
ORG50H
START:
MOVDPTR,#6000H
MOVP2,#70H
MOVR0,#00H
LOOP:
MOVXA,@DPTR
MOVX@R0,A
INCDPTR
INCR0
CJNER0,#00H,LOOP;比较条件转移,若R0不等于0,则程序循环,执行loop.
INCP2
MOVR1,P2
CJNER1,#80H,LOOP;若R1不等与80h,则程序循环执行loop.
AJMP$
END
五、实验结果
1、把7000H~70FFH单元的内容清零。
2、编程实现,将源地址为6000H开始的单元,传送到目的地址7000H开始的单元,传送个数为0FFFH个。
上图是左下角的窗口显示的是存储器源地址为6000H开始的单元里的内容。
上图是程序运行后,存储器源地址为7000H开始的单元里的内容。
经比较可以看出传送成功。
六、问题与讨论
在做实验内容1时编译现在第10行出错,后来将第9和第10行后的注释都删除就编译通过了。
实验二并行口实验
一、实验目的
1、掌握P3口、P1口简单使用。
2、学习延时程序的编写和使用。
二、实验内容
1、编写程序用P1.0输出1kHz和500Hz的音频信号,以驱动扬声器作为报警信号。
要求1kHz信号响100ms,500Hz信号响200ms,交替进行。
P1.7接一开关,进行控制。
当开关合上,报警信号响;当开关断开,报警信号停止。
(教材《单片机原理、接口及应用——嵌入式系统技术基础》P75例4-3)
2、P3口做输入口,P1口做输出口。
P3.3外接一脉冲,P1.0~P1.7接的8个发光二极管L1—L8。
编写程序,使P3.3每输入一个脉冲,P1口按16进制加一方式逐次点亮发光二极管。
三、实验接线图(实验内容二接线图)
四、实验步骤
1、编写程序用P1.0输出1kHz和500Hz的音频信号,以驱动扬声器作为报警信号。
要求1kHz信号响100ms,500Hz信号响200ms,交替进行。
P1.7接一开关,进行控制。
当开关合上,报警信号响;当开关断开,报警信号停止。
由于实验箱单片机P1.0是坏的,编程P1.1为输出,其他不变。
程序代码:
ORG00h
START:
SETBP1.7;P1.7置1
JBP1.7,$;若P1.7为高电平,则循环检测,否则向下执行
MOVR1,#200;
LOOP:
ACALLD500;
CPLP1.1;产生1KHz的频率,P1.1取反输出
DJNZR1,LOOP;R1减1,不为0时转移到LOOP,响100ms
MOVR2,#200
LOOP1:
ACALLD500;
ACALLD500;
CPLP1.1;产生500Hz的频率,P1.1取反输出
DJNZR2,LOOP1;R2减1,不为0时转移到LOOP,响200ms
SJMPSTART;跳转至START
D500:
MOVR6,#125;延迟500us
DJNZR6,$
RET
END
2、P3口做输入口,P1口做输出口。
P3.3外接一脉冲,P1.0~P1.7接的8个发光二极管L1—L8。
编写程序,使P3.3每输入一个脉冲,P1口按16进制加一方式逐次点亮发光二极管。
实验2接了4个口,从P1.1到P1.4,两次脉冲,灯变化
程序代码:
ORG00H
CLRA
SETBP3.3;将P3.3置1
BEG:
JBP3.3,$
ACALLD500;
JNBP3.3,$
ACALLD500
INCA
MOVP1,A;P1口输出
SJMPBEG
D500:
MOVR7,#125;延时500us(6Mhz)
DJNZR7,$
RET
END
五.问题与讨论
1、做实验内容1时,刚开始用P1.0口输出,铃总是不响,接示波器也不输出波形。
经测试铃是好的,怀疑程序有问题,就将程序改成一直只输出1KHz的频率,还是不出波形。
最后换成P1.1口输出,调试程序运行铃就响了。
2、实验内容2要求P1口输出接8个LED管,为节省时间,接4个输出观察实验结果就行了。
我们实验箱接的是P1.1—P1.4,实验结果有所不同,P3.3每输入两个脉冲,P1口按4进制加一方式逐次点亮发光二极管。
实验三中断实验
一、实验目的
1)掌握中断程序的编程方法。
2)进一步掌握P1、P3口的双功能使用方法。
二、实验内容
正常情况下,仅绿灯亮。
有故障发生时,绿灯灭,同时红灯闪烁;故障排除后,拨上总开关,恢复正常,绿灯亮,红灯灭。
可由P1.0控制绿灯的亮灭;P3.3接外部中断源,模拟故障发生;P1.1控制红灯的亮灭;P1.2读取总开头的状态。
编写程序实现以上功能。
(P3.3复用为外部中断1输入,即为INT1。
其中断向量地址为0013H,使用下降沿触发中断。
)
三、实验程序框图
主程序:
中断服务程序:
四、实验步骤
1、由P1.1控制绿灯的亮灭;P3.3接外部中断源,模拟故障发生;P1.2控制红灯的亮灭;P1.3读取总开头的状态。
P3.3复用为外部中断1输入,即为INT1。
其中断向量地址为0013H,使用下降沿触发中断。
程序代码:
ORG0000h
AJMPMAIN;主程序
ORG0013H;中断矢量表p211
AJMPIRPRO;中断服务程序入口
ORG0050H;主程序
MAIN:
CLRP1.2;红灯灭
SETBP1.1;绿灯亮
SETBIT1;设置INT1负边缘触发p206(定时器控制寄存器TCON)
SETBEX1;外部中断1有效p208(中断容许控制器IE)
SETBEA;开中断p208(中断容许控制器IE)
LOOP1:
JBP1.1,LOOP1
LOOP2:
JNBP1.3,LOOP2
SETBP1.1
SJMPLOOP1
AL1:
AJMPAL1
;中断服务程序
IRPRO:
PUSHPSW
PUSHACC
CLRP1.1;灭绿灯
LOOP3:
SETBP1.2;亮红灯
ACALLD500
CPLP1.2
ACALLD500
JNBP1.3,LOOP3;这里用P1.2进行监视,若开关没有闭合,则红灯一直闪烁。
POPACC
POPPSW
RETI
D500:
MOVR6,#255;延时子程序
DELAY:
MOVR7,#0FFH
DJNZR7,$
DJNZR6,DELAY
RET
END
实验接线:
P1.1接绿灯;P1.2接红灯;P1.3开关K1;P3.3接点触开关SP
2、将实验内容1中的外部中断源换成INT0,其中断向量地址为0003H,使用下降沿触发中断。
程序代码:
ORG0000h
AJMPMAIN;主程序
ORG0003H;中断矢量表p211
AJMPIRPRO;中断服务程序入口
ORG0050H;主程序
MAIN:
CLRP1.2;红灯灭
SETBP1.1;绿灯亮
SETBIT0;设置INT0负边缘触发p206(定时器控制寄存器TCON)
SETBEX0;外部中断0有效p208(中断容许控制器IE)
SETBEA;开中断p208(中断容许控制器IE)
LOOP1:
JBP1.1,LOOP1
LOOP2:
JNBP1.3,LOOP2
SETBP1.1
SJMPLOOP1
AL1:
AJMPAL1
;中断服务程序
IRPRO:
PUSHPSW
PUSHACC
CLRP1.1;灭绿灯
LOOP3:
SETBP1.2;亮红灯
ACALLD500
CPLP1.2
ACALLD500
JNBP1.3,LOOP3;这里用P1.3进行监视,若开关没有闭合,则红灯一直闪烁。
POPACC
POPPSW
RETI;中断返回
D500:
MOVR6,#255;延时子程序
DELAY:
MOVR7,#0FFH
DJNZR7,$
DJNZR6,DELAY
RET
END
实验接线:
P1.1接绿灯;P1.2接红灯;P1.3开关K1;P3.2接点触开关SP
3、在实验内容1的实现功能中加上有故障发生时,绿灯灭,红灯闪烁同时报警;
程序代码:
ORG0000h
AJMPMAIN;主程序
ORG0013H;中断矢量表p211
AJMPIRPRO;中断服务程序入口
ORG0050H;主程序
MAIN:
CLRP1.2;红灯灭
SETBP1.1;绿灯亮
SETBIT1;设置INT1负边缘触发p206(定时器控制寄存器TCON)
SETBEX1;外部中断1有效p208(中断容许控制器IE)
SETBEA;开中断p208(中断容许控制器IE)
LOOP1:
JBP1.1,LOOP1
LOOP2:
JNBP1.3,LOOP2
SETBP1.1
SJMPLOOP1
AL1:
AJMPAL1
;中断服务程序
IRPRO:
PUSHPSW
PUSHACC
CLRP1.1;灭绿灯
LOOP3:
SETBP1.2;亮红灯
ACALLD500
CPLP1.2
MOVR1,#200;
LOOP:
ACALLD500U;
CPLP1.4;P1.4取反输出
DJNZR1,LOOP;R1减1,不为0时转移到LOOP
JNBP1.3,LOOP3;这里用P1.2进行监视,若开关没有闭合,则红灯一直闪烁。
POPACC
POPPSW
RETI
D500:
MOVR6,#255;延时子程序
DELAY:
MOVR7,#0FFH
DJNZR7,$
DJNZR6,DELAY
RET
D500U:
MOVR5,#125;延迟500us
DJNZR5,$
RET
END
实验接线:
P1.1接绿灯;P1.2接红灯;P1.3开关K1;P1.4接响铃;P3.3接点触开关SP
五、问题与讨论
1、实验内容1要注意P3.3复用为外部中断1输入,即为INT1。
其中断向量地址为0013H,使用下降沿触发中断将IT1置1,开总中断将EA置1,开外部中断1将EX1置1.
2、实验内容2要注意P3.2复用为外部中断0输入,即为INT0。
其中断向量地址为0003H,使用下降沿触发中断将IT0置1,开总中断将EA置1,开外部中断1将EX0置1.
3、实验内容3要加上一个输出接响铃,加上的响铃代码必须加在中断服务程序中红灯闪烁的那一段。
响铃的声音要大一点,输出频率就要变大,最简单的方法就是加上一个延时子程序,响铃时调用。
因为原有的延时子程序是使红灯闪烁,频率很低。
实验四定时/计数实验
一、实验目的
1、熟悉8031定时/计数功能。
2、掌握定时/计数初始化编程方法。
二、实验内容
1、选择T1工作于模式0定时,在P1.0脚上输出周期为4ms的方波,单片机采用6MHZ晶振。
分析:
输出周期为4ms的方波,即高低电平的持续时间均为2ms,那么只要使P1.0脚上的电平每隔2ms取反一次,就可得到周期为4ms的方波。
将T1设为定时方式0:
GATE=0,C/T=0,M1M0=00;T0不用,可为任意,只要不使其进入方式3(此时,定时器1对外停止计数),一般取0即可。
计数初值的计算:
单片机系统默认的定时/计数器的工作时钟是晶振经12分频的,即T=12/(6*106),所以计数初值为
X=(213-2ms/T)=213-(2*10-3*6*106)/12=8192-1000=7192=1110000011000B
因为是13位计数器,所以X的高8位装入TH1,X的低5位装入TL1的低5位,即TH1=0E0H,TL1=18H。
思考:
T1计数结束采用中断工作方式,程序应如何编写?
2、在P1.7端接一个发光二极管LED,要求利用定时器控制,使LED亮1秒、灭1秒,周而复始,设
=6MHZ。
三、实验内容一参考程序框图:
四、实验步骤
1、选择T1工作于模式0定时,在P1.0脚上输出周期为4ms的方波,单片机采用6MHZ晶振。
(查询方式)
程序代码:
ORG0000H
MOVTMOD,#00H;设定Timer1工作在模式0下
LOOP2:
MOVTH1,#0E0H;向Timer1中载入计数的初始值
MOVTL1,#18H
SETBTR1;启动
AGAIN:
JBCTF1,LOOP1;定时时间到否?
没有则继续查询,到了则输出,并清TF1位等。
SJMPAGAIN
LOOP1:
CPLP1.0
SJMPLOOP2
END
思考:
T1计数结束采用中断工作方式
程序代码:
ORG0000H;中断方式:
选择T1工作,方式0
AJMPMAIN
ORG001BH
AJMPTIMER_1
ORG0030H
MAIN:
SETBP1.0;P1.0输出为高电平
MOVTMOD,#00H;设置定时器1,工作在定时方式0
MOVTH1,#0E0H;输入时间初始常数
MOVTL1,#18H
SETBTR1;启动Timer1
SETBEA;开中断
SETBET1;容许Timer1中断
WAIT:
SJMPWAIT
TIMER_1:
CPLP1.0
MOVTH1,#0FCH
MOVTL1,#18H
RETI
END
2、在P1.7端接一个发光二极管LED,要求利用定时器控制,使LED亮1秒、灭1秒,周而复始,设
=6MHZ。
程序代码:
ORG00H;查询方式
AJMPMAIN
MAIN:
MOVTMOD,#10H;选择T1工作,方式1
SETBP1.0
SETBTR1;启动定时器
LOOP1:
MOVR2,#20;设置调用延时的次数为20次
LOOP2:
CALLDELAY;调用50ms的延时
DJNZR2,LOOP2;若调用延时次数不到,则继续调用延时程序
CPLP1.0;取反,输出
AJMPLOOP1
DELAY:
MOVTH1,#9EH;50ms的延时子程序
MOVTL1,#58H
LOOP:
JBCTF1,NEXT
SJMPLOOP
NEXT:
RET
END
用中断方式实现:
ORG0000H;中断方式:
选择T1工作,方式1,TEST4_4
AJMPMAIN
ORG001BH
AJMPTIMER_1
ORG0030H
MAIN:
SETBP1.0;主程序
MOVTMOD,#10H
MOVTH1,#09eH
MOVTL1,#58H
SETBTR1
SETBEA
SETBET1
MOVR2,#20;设置循环次数
WAIT:
SJMPWAIT
TIMER_1:
DJNZR2,LOOP;中断服务程序
MOVR2,#20
CPLP1.0
LOOP:
MOVTH1,#9EH
MOVTL1,#58H
RETI
END
实验五串行口应用实验
一、实验目的
掌握串行口工作方式的程序设计,掌握单片机通信程序编制方法。
二、实验内容
1、重复发送同一个数据,观察TXD端输出的波形。
将8031串口设为工作方式1,即10位异步收发,发送时钟由计数器控制;计数器T1设为定时工作,工作方式2,即自动重装8位计数器;波特率取1200bps,不加倍;单片机采用6MHZ晶振。
计数初值的计算:
TH1=256-[(1+0)*fosc]/(12*32*BPS)
P3.1复用为串行发送端TXD,将其接至示波器,观察输出波形。
注意观察8位数据位前后的起始位和停止位。
2、自发自收。
将代码段中定义的10个数据0~9,通过串口发送和接收,存放在外部存储器7000H开始的单元中。
实验内容一参考程序框图:
三、实验步骤及结果
1、重复发送同一个数据,观察TXD端输出的波形。
程序代码:
ORG00H
START:
MOVSCON,#50H;设置串口工作在模式1,接收使能
MOVTMOD,#20H;使用T1工作在模式2下
MOVTH1,#0F3H;波特率1200bps
MOVTL1,#0F3H;
SETBTR1;
MOVA,#0DH;将数据赋给ACC
MOVSBUF,A;发送数据送缓冲区
WAIT:
JNBTI,$;等待发送
CLRTI;若发送完,则清TI
MOVSBUF,A;未发完,则继续发送
AJMPWAIT;循环发送
END
结果:
将P3.1口接到示波器观察会有二进制010*******的波形。
2、自发自收。
将代码段中定义的10个数据0~9,通过串口发送和接收,存放在外部存储器7000H开始的单元中。
程序代码:
ORG00H
START:
MOVSCON,#50H;设置串口工作在模式1,接收使能
MOVTMOD,#20H;使用T1工作在模式2下
MOVDPTR,#7000H;将外部存储器初始地址赋给DPTR
MOVR0,#00H;将0赋给R0
MOVTH1,#0F3H;波特率1200bps
MOVTL1,#0F3H;
SETBTR1;
CLRA;清ACC
LOOP:
MOVA,R0;将待发数据赋给A
INCR0;R0+1→R0
CJNER0,#0BH,WAIT;判断是否发送完
SJMP$;停机
WAIT:
MOVSBUF,A;数据发送到缓冲区
JNBTI,$;等待发送
CLRTI;数据发送完,则清TI
MOVSBUF,A;未发完,则继续发送
MOVA,SBUF;接收数据
JNBRI,$;等待接收
CLRRI;接收完,则清RI
MOVA,SBUF;未接收完,则继续接收
MOVX@DPTR,A;将接收的数据送到指定位置
INCDPTR;DPTR自增1
JMPLOOP;跳回到LOOP,向串行口载入新数据。
END
结果:
程序运行前
运行后
很明显看出完成能实验要求,将0-9通过串行通信存到外部存储器7000H开始的单元。
四、问题与讨论
做串口自发自收的实验时,一定要将P3.0口与P3.1口用导线连起来,还有数据发送和接收都用查询方式。
刚开始用查表的方式将待发数据送A,这样就多次应用了DPTR寄存器,效率不高也很麻烦,后来用寄存器R0每次发送完后加1来实现将数据0-9赋给A。
还有接收程序部分开始作为子程序调用,后来不用,直接放在发送程序后面就行了,整段程序变得很简单明了。
附:
实验六装药生产线仿真
一、实验目的
1)掌握仿真软件Proteus的应用。
2)掌握系统设计的方法。
3)掌握程序编写与调试。
4)学会对系统进行改进。
二、实验内容
生产过程:
制药厂有一条装药丸的生产线,单片机的P3.4脚,即Timer0的外部事件输入端T0与生产线上的药丸漏斗上的红外传感器相连,每一颗药丸通过漏斗颈时,红外传感器都会检测到,并会向单片机的T0口输入一个脉冲信号。
单片机的P1.0口控制阀门打开
(1),或关闭(0),以控制药丸掉落到药瓶中的个数。
每个药瓶装满20粒药丸后,单片机的P1.1口输出一个高电平,使得履带电机转动,履带则运送下一个空瓶到漏斗下,准备装药。
P0口驱动一个2位的七段数码管,显示已经装好药丸的瓶数。
设计完整系统模拟上述生产过程,并运用Proteus软件进行仿真。
三、实验程序框图
四、实验步骤
1、用LED模拟阀门和履带,用脉冲开关模拟药丸装入,数码管显示包装的瓶数。
每输入20个脉冲,瓶数加1。
程序代码:
;装药丸出产线的程序,使用Timer做计数器。
ORG
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 及其 接口 技术 实验 报告