民航大学单片机课程实验程序及报告.docx
- 文档编号:12145658
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:12
- 大小:189.72KB
民航大学单片机课程实验程序及报告.docx
《民航大学单片机课程实验程序及报告.docx》由会员分享,可在线阅读,更多相关《民航大学单片机课程实验程序及报告.docx(12页珍藏版)》请在冰点文库上搜索。
民航大学单片机课程实验程序及报告
单片机原理与接口技术
实验报告
指导教师:
负责人:
组员:
目录
实验电路板使用部分电路图:
2
实验一3
实验二6
实验三8
实验四10
实验环境:
实验中心502,WindowsXP系统,89C52单片机。
实验时间:
2011年12月10日。
连接方式:
通过电脑串口将编译完成的程序下载到89C52单片机中。
单片机由USB2.0线提供5V的工作电压。
实验电路板使用部分电路图:
89C52芯片部分
LED显示及片选芯片部分
实验一
跑马灯程序设计
实验目的:
设计一个程序,使某一排LED灯管实现循环轮流发光。
在程序开始运行之前使用中断控制,使得当手动按下开关S13之后,跑马灯才开始运行。
否则处于等待中断状态。
实验要求:
发光时间相同可控。
用定时器和延时两种方法实现。
电路连接:
89C52芯片端P1.0至P1.7共8个端口与J21芯片的17至24端口相连,P2.0与P2.1分别与13,14端口相连。
实验源程序及相关注释:
1.延时方式:
org0000h;开始
ajmpmain
org0003h;外部中断0入口地址
ajmploop
org0030h;到0030h处避开00-30的敏感地址
main:
setbex0;开外部中断0
setbit0;外部中断0低电平有效
setbea;CPU中断打开
here:
sjmphere
org0200h
loop:
setbp2.1;片选,选择上面的LED阵列
clrp2.0
movA,#0feh;置8LED的初始状态,最右边LED亮
next:
movp1,#0ffh;关闭所有灯
movp1,A;;载入LED初始状态
lcalldelay;保持状态一段时间
rlA;左移A,使之前亮的LED左边的灯变亮自己熄灭。
当道最左边后由rl定义得最右边的LED又开始亮。
完成循环。
ajmpnext
delay:
movr5,#20;延时,保持状态时间的子程序。
d1:
movr6,#40
d2:
movr7,#248
djnzr7,$
djnzr6,d2
djnzr5,d1
ret
end
程序说明:
延时程序延时时间的计算:
由于晶振频率为f=12MHz,因此机器周期为12*f=1μS,又因为DJNZ指令为两个机器周期,且延时子程序为3个DJNZ的嵌套,因此DJNZ共执行20*40*248次,总延时时常为1μS*2*20*40*248=0.4s。
2.定时器方式:
定时器方式的主程序部分与延时方式相同,只需略微修改主程序和dalay子程序。
在主程序main:
之后添加如下语句:
movtmod,#10h;启动定时器模式1
setbtr1;启动定时器T1
延时子程序修改为
delay:
movr5,#064h;延时,保持状态时间的子程序。
loop1:
movth1,#0d8h;将d8f0H放入t中,T1计时10ms
movtl1,#0f0H
jnbtf1,$
clrtf1
djnzr5,loop1;再将T1计时循环100(64H)次,共延时1s
ret
程序说明:
定时器时长设定详见实验2。
本程序实验经验及心得总结:
由于这是本次单片机得第一个实验项目,内容牵扯到CPU中断,主程序子程序设计,定时器的使用,及89C52实验电路板的熟悉过程,因此设计难度相当大。
在程序设计之初,主要参考了另一篇89C51的跑马灯程序,结合本实验电路完成了最初始的跑马灯程序。
经过老师指点,逐步将原程序中,使用重复语段完成跑马灯控制的部分简化为又rl循环右移A来实现8LED控制,从而大大简化了程序结构。
然后,在程序前加上了CPU中断的部分,使得程序能够在复位后,由按下开关S13这一动作实现控制程序开始运行。
经过修改后,程序完全达到了实验要求的性能,并且经过实测完成了中断控制的跑马灯程序运行。
实验中,我也发现了自身的不足,就是对于课本上的知识掌握的还不够透彻与熟练,在答辩的过程中,屡屡被老师的问题问住。
从此我懂得了不能只知其一不知其二,要完全掌握书本的内容,才能熟练地完成各项试验,并且更好的理解知识之间的相关性。
实验二
周期为2S的方波发生器设计
实验目的:
设计一个程序,89C52产生一个高度精确地方波信号,并且信号的周期可调。
实验要求:
方波周期可调,并通过LED显示结果
电路连接:
89C52芯片端P1.0至P1.7共8个端口与J21芯片的17至24端口相连,P2.0与P2.1分别与13,14端口相连。
实验源程序及相关注释:
org0000h
ajmpNEXT
org0030h;到0030h处避开00-30的敏感地址
NEXT:
setbp2.1;片选设置,选择上面的LED
clrp2.0
movtmod,#10h;定时器设置,选择模式1
setbtr1;启动定时器T1
NEXTB:
movp1,#0ffh;将d8f0H放入th中,T1计时10ms
movr5,#064h;设置循环次数
clrp1.0;LED1亮,并延迟一段时间
loop1:
movth1,#0d8h
movtl1,#0f0H
jnbtf1,$
clrtf1
djnzr5,loop1;再将T1计时循环100(64H)次,共延时1s
movp1,#0ffh;灯全熄灭一次
movr5,#064h
clrp1.1;再次设置LED2亮1s,具体与LED1相同
loop2:
movth1,#0d8h
movtl1,#0f0H
jnbtf1,$
clrtf1
djnzr5,loop2
sjmpNEXTB;循环,产生了T=2S的周期方波
end
程序说明:
关于定时器定时时长初值X的设定,通过如下公式
t=
求出当t=10ms时的X初值,既D8F0H。
将其装入定时器后即可。
之所以定时器只能定时10ms是因为模式1最长只能定时131.072ms,因此为方便计算采用了定时10ms循环100次的结构来定时1s。
本程序实验经验及心得总结:
在这次实验中,由于有了跑马灯实验的经验级教训,加之实验本身要求与程序比较简单,实验完成的相当快。
不过在实验中依然暴露了如下问题:
1.课本知识储备的不足,在实验中1依然是常常在翻课本,边做边学。
2.程序的简化级模块化设计欠佳。
程序中分别控制LED1与LED2的循环结构Loop1与Loop2明显可以合并,但当时没有想到。
3.不勤于计算。
模式1可以设定131ms的定时时长。
本程序最应该采用定时100MS循环10次的结构,但由于需要计算X值,于是直接照抄了书上的定时10MS的X值结果。
实验三
单片机内存数据转移
实验目的:
设计一个程序,先给80H至90H的内存分别赋值0~9,再将80H至90H的内容复制到90H~100H。
实验要求:
需要最后使用LED显示来验证储存结果。
电路连接:
89C52芯片端P1.0至P1.7共8个端口与J21芯片的17至24端口相连,P2.0与P2.1分别与13,14端口相连。
实验源程序及相关注释:
org0000h
ajmpNEXT
org0030h
NEXT:
movr4,#0Ah;设置存放数据时的循环次数10次
movA,#00h;设置要存放的数据的初值,0
movr0,#80h;设置要存放数据的起始地址,80H
loop1:
;80h到90h赋值1到9
mov@r0,A
incr0
incA
djnzr4,loop1;完成一个地址的数据存放后,循环10次后,完成
movr4,#0Ah;第二部分,把80h的值转移到90h。
初始设置
movr1,#80h
movr0,#90h
loop2:
movA,@r1
mov@r0,A
incr0
incr1
djnzr4,loop2;80H到90H的内容转移完成
movp2,#0ffh;传送完毕,选择显示的LED显示结果
clrp2.0
movr4,#0Ah
movr0,#80h
loop5:
movA,@r0
movp1,#0ffh;关闭所有灯
cplA;由于显示需要低电平,因此给A取反
movp1,A;显示当前地址A的值
lcalldelay
cplA
movp1,#0ffh;关闭所有灯一段时间
lcalldelay
incr0
djnzr4,loop5;循环10次
movp1,#0ffh;关闭所有灯
delay:
movr5,#20;延时子程序,设定请参照实验1
d1:
movr6,#40
d2:
movr7,#248
djnzr7,$
djnzr6,d2
djnzr5,d1
ret
end
程序说明:
程序只显示了90H到100H之间的值,因为其是由80H到90H中的数据传送来的,可以反映其内容正确性。
本程序实验经验及心得总结:
本次实验并未遇到太大问题就得以顺利解决,难点在于数据传送指令的精确掌握,才能实现内存,寄存器之前相互的数据传送。
实验四
单片机内存数据的ASCII码转换
实验目的:
设计一个程序,将90H~100H的内容转换为其ASCII码后,再储存到源地址中。
实验要求:
需要转换的内容要求为数字,最后使用LED显示来验证储存结果。
电路连接:
89C52芯片端P1.0至P1.7共8个端口与J21芯片的17至24端口相连,P2.0与P2.1分别与13,14端口相连。
实验源程序及相关注释:
org0000h
ajmpNEXT
org0030h
NEXT:
movr0,#90h;设置初始地址值90H
movr4,#0Ah;设置转换时的循环次数10次
loop3:
;实现数字转换为该数字的ASCII码
movA,@r0
addA,#30h;ASCII码转换,在数字的基础上加30H
mov@r0,A
incr0
djnzr4,loop3;循环10次后,转换完成
movp2,#0ffh;转换完毕,选择显示的LED。
以下显示部分的内容与实验3基本相同,故不赘述
clrp2.0
movr4,#0Ah
movr0,#90h
loop4:
movA,@r0
movp1,#0ffh;关闭所有灯
cplA
movp1,A
lcalldelay
cplA
movp1,#0ffh;关闭所有灯
lcalldelay
incr0
djnzr4,loop4
delay:
movr5,#20;延时。
d1:
movr6,#40
d2:
movr7,#248
djnzr7,$
djnzr6,d2
djnzr5,d1
ret
end
程序说明:
程序假设在90H至100H的内存中,已经存储了值为1~9的内容。
(可以先运行实验3中的程序)。
通过给数字加30H完成转换。
本程序实验经验及心得总结:
程序主体内容与实验三基本相同,因此在编写过程中没有遇到太大困难。
但是在最后实际运行中,出现了如下问题:
由于程序中使用了比较多的寄存器r,因此在编写时,将控制地址的r与延时程序中的r以外的使用了相同的r,故运行一直出不了结果,但编译可以通过。
最后在仔细检查了程序后才发现问题,修改后程序直接运行成功。
从此我懂得了在编程与实验过程中的严谨精神的重要性,很可能因为一个很小的问题而影响到整个实验的成功。
最后感谢老师的批评与指导!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 民航 大学 单片机 课程 实验 程序 报告