民航大学单片机课程实验程序及报告.docx

上传人:b****6 文档编号:12145658 上传时间:2023-06-04 格式:DOCX 页数:12 大小:189.72KB
下载 相关 举报
民航大学单片机课程实验程序及报告.docx_第1页
第1页 / 共12页
民航大学单片机课程实验程序及报告.docx_第2页
第2页 / 共12页
民航大学单片机课程实验程序及报告.docx_第3页
第3页 / 共12页
民航大学单片机课程实验程序及报告.docx_第4页
第4页 / 共12页
民航大学单片机课程实验程序及报告.docx_第5页
第5页 / 共12页
民航大学单片机课程实验程序及报告.docx_第6页
第6页 / 共12页
民航大学单片机课程实验程序及报告.docx_第7页
第7页 / 共12页
民航大学单片机课程实验程序及报告.docx_第8页
第8页 / 共12页
民航大学单片机课程实验程序及报告.docx_第9页
第9页 / 共12页
民航大学单片机课程实验程序及报告.docx_第10页
第10页 / 共12页
民航大学单片机课程实验程序及报告.docx_第11页
第11页 / 共12页
民航大学单片机课程实验程序及报告.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

民航大学单片机课程实验程序及报告.docx

《民航大学单片机课程实验程序及报告.docx》由会员分享,可在线阅读,更多相关《民航大学单片机课程实验程序及报告.docx(12页珍藏版)》请在冰点文库上搜索。

民航大学单片机课程实验程序及报告.docx

民航大学单片机课程实验程序及报告

单片机原理与接口技术

实验报告

 

指导教师:

负责人:

组员:

 

目录

实验电路板使用部分电路图:

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,故运行一直出不了结果,但编译可以通过。

最后在仔细检查了程序后才发现问题,修改后程序直接运行成功。

从此我懂得了在编程与实验过程中的严谨精神的重要性,很可能因为一个很小的问题而影响到整个实验的成功。

最后感谢老师的批评与指导!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2