火凤凰之一统全球八零:求救,单片机的实验报告,51单片机。

来源:百度文库 编辑:中科新闻网 时间:2024/03/29 08:34:13
最好是自己亲自做过的。

一、实验目的:
通过设计电子时钟的综合实验掌握单片机编程的基本思想,以及中断、定时程序的基本编写方法。

二、实验内容:
利用定时计数器,设计一个电子时钟,从左到右依次显示时分秒。有两种方法实现,一种是在中断程序中计数,产生时分秒计数,送到显示缓冲区。另一种是中断程序每一秒清除一个位变量,而主程序通过监视位变量的变化来知道每秒的时间。
提高要求:
1、 可以加入时间调整程序,使用两个或三个按钮,调节当前的时间。类似平常使用的电子表。可以让正在调整的位闪烁显示。
2、 可以加入一个闹钟设置,当所定的时间到时,产生断续的蜂鸣声。

三、实验过程:
编程基本思路:在主程序里负责读取存储区的时分秒的值,然后送到显示缓冲区,并且查询秒的存储区,当为0时说明满一分,调用报时子程序;在中断程序中计数,产生时分秒计数,定时器采用方式一,每100ms中断一次,中断10次 为一秒。
程序如下:
org 0000h
ljmp main ;转主程序
org 000bh
ajmp it0p ;转定时器T0中断
org 0100h
main:
mov tmod,#01h ;T0工作在方式1
mov 20h,#0ah
clr a
mov 50h,a
mov 51h,a
mov 52h,a ;清0存放秒分时值的单元
setb et0 ;允许T0中断
setb ea ;允许中断
mov th0,#3ch
mov tl0,#0b0h ;计数器赋初值
setb tr0 ;启动计数器T0
first:
clr p1.0
lcall bell
mov a,52h
anl a,#0fh
mov 78h,a
mov a,52h
anl a,#0f0h
swap a
mov 79h,a ;秒的高低位送79H,78H
mov a,51h
anl a,#0fh
mov 7ah,a
mov a,51h
anl a,#0f0h
swap a
mov 7bh,a ;分的高低位送7BH,7AH
mov a,50h
anl a,#0fh
mov 7ch,a
mov a,50h
anl a,0f0h
swap a
mov 7dh,a ;时的高低位送7DH,7CH
dir: ;显示子程序
mov r0,78h ;置缓冲器指针初值
mov r3,01h ;位选码初值送R3
mov a,3
ld0:
mov dptr,8002h
movx @dptr,
mov dptr,8004h
mov a,r0 ;显示数据送A
add a,0fh ;加偏移量
movc a,a+pc ;查表取段码
dir1:
movx @dptr,a
acall delay ;调用延时1m秒的程序
inc r0 ;指下一个显示数据单元
mov a,3 ;位选码送A
jb acc.5,d1 ;看是否扫描到最右
rl a ;让下一个LED亮
mov r3,a
ajmp ld0
ld1:
ljmp first
table:
db 3fh, 06h, 5bh, 4fh, 66h, 6dh
db 7dh, 07h, 7fh, 6fh ;段码表数字 0到9
delay: ;延时1m秒的子程序
mov r7,02h
dl:
mov r6,0ffh
dl1:
djnz r6,l1
djnz r7,dl
ret

it0p: ;T0中断服务子程序
push psw
push a
mov th0,#3ch
mov tl0,#0b0h ;定时器赋初值
djnz 20h,return ;看10次计数是否到,未到恢复现场
mov 20h,0ah ;到了则重新设置下次10次计数值
mov a,01h
add a,52h ;秒值加1
da a
mov 52h,a
cjne a,#60h,return ;看是否到60秒,未到就恢复现场
mov 52h,#00h
mov a,#01h
add a,51h ;到了60秒就分钟加1,秒位清0
da a
mov 51h,a
cjne a,#60h,return ;看是否到60分,未到就恢复现场
mov 51h,#00h
mov a,#01h
add a,50h ;到了60分就分钟加1,分位清0
da a
mov 50h,a
cjne a,#24,return
mov 50h,#00h ;到了24小时就把小时清0
return:
pop a
pop psw
reti
bell: ;报时子程序
push a
mov a,42h
cjne a,#00h,back
setb p1.0
back:
pop a
ret
end
实验结果:
执行程序后从0开始计时,满60秒进一分,并且报时一次,与预想的结果一样。开始的时候显示时会出乱码,不知道是怎么回事,后来问了老师才知道是数的进制问题,加了一条 DA A的指令就可以了。还有刚开始的时候根本进不了中断定时的程序,仔细检查之后发现自己在开关中断时设置错了。
报时部分是做了,但是键盘部分没有做出来,那部分掌握的不太好,没有很仔细的看书,一个小小的遗憾。
四、实验总结:
这是这个学期的最后一次实验,是一个综合实验。开始还以为特别难,后来慢慢也就做下来了,虽然做的不是特别好。通过一个学期的学习发现《单片机》的确是一门很有用的课程,对今后的学习工作有很大的帮助,因为单片机目前在社会中有在和极其广泛的用途,各个地方都离不开它的。但是我觉得就我们在课堂上学到的这点知识还是极其有限的,更多的东西还靠我们自己去课下学习。老师只起到一个引导我们学习的作用,关键还是在于我们自己,这就是所谓的“师傅领进门,修行在个人”吧。冰冻三尺非一日之寒,滴水穿石非一时之功,谨以此自勉!