四人抢答器模拟实验报告
一、目的与要求
1. 目的:
(1)培养学生综合利用MCS-51单片机的软硬件知识进行程序设计的能力,解决一些实际问题。
(2)进一步加深对MCS-51单片机内部结构和程序设计方法的理解。
(3)提高学生建立程序文档、归纳总结的能力。
2. 基本要求:
(1)要求用MCS-51单片机知识完成程序的设计;
(2)源代码程序要求必要的注释。
3. 创新要求
在基本要求达到后,可以进行创新设计,如更加完善程序功能。
二、系统总体设计
基于MCS-51单片机的智能抢答器的设计,主要要实现以下几种功能:
(1)当主持人按下他的按键时,抢答开始,LED 显示器开始从0到20的定时记数。
(2)在20秒定时的时间内,如果有竞赛者要回答问题,那么按下自己的按键,此时,与该竞赛者对应的显示灯亮,并且LED 显示器的计时停止。先按键的竞赛者可屏蔽其他人的抢答信号。
(3)如果在20秒定时结束后,即LED 显示器显示20时,仍然没竞赛者按下按键回答问题,那么报警信号灯亮
(4)在20秒内,可以进行累加计时
三、硬件系统设计
该抢答器的设计是基于MCS-51单片机的,使用到的硬件主要有8051的P1口和P3口,LED 显示器,8155芯片及单片机内部的定时器/计数器T/C。
如图示(图1):
图1
1.使用4个开关分别代表4个选手控制号,用P1口中的P1.0,P1.1,P1.2,
P1.3表示四个选手
2.用P1.7(X6)表示红灯,P3口中的P3.2与外来脉冲连接,控制继续计时。
3. 资源分配:在设计过程中,用到了8051的P1口和P3口,主要是/INT0和/INT1,用竞赛者的按键X0、X2、X3、X4控制/INT1。当程序运行时,启动T/C计数,用8155芯片使LED 显示计;当/INT1产生有效信号时,停止T/C计数,LED 计时停止。
四、程序流程图(如图2) :
图2
五:系统软件设计
1. 主程序
主程序功能:完成单片机MCS-51的初始化操作;定时器初始化;等待定时器中断的发生;发生中断,则转入相应的中断服务程序,执行相应功能的子程序。主程序流程图如下(图3) :
图3
2. 子程序
子程序主要包括LED 显示的程序,定时器/计数器T/C程序,抢答的中断服务程序。
2.1 LED 显示程序
LED 计数的启动受到/INT0、/INT1、T/C0、T/C1的控制。
LED 显示程序的功能是:
a. 当/INT0产生有效信号,T/C0和T/C1启动后,LED 开始显示计数(从0到20)。
b. 当/ INT1产生有效信号后,使T/C0和T/C1停止工作,此时LED 停止在当时的计数值。这也就是说一轮抢答结束。
LED 显示程序的流程图如图(图4):
图4
2.2 定时器/计数器T/C程序
首先设置T/C0输出方波,且定时50ms ,再经过反向脉冲后为100ms , T/C1计数为20(工作方式已在主程序设置),这样1秒产生,LED20秒定时可以开始,接着判断LED 是否显示到20。如果到20,则报警。如果没显示到20,LED 继续计数。
T/C程序流程图如图(图5):
图5 2.3 抢答的子程序
抢答的子程序所完成的主要功能是:当主持人宣布抢答开始,并按下按键LED 开始计数后,竞赛者才能抢答。有竞赛者按下按键后,显示与之相对应的选手号,同时LED 计数停止。
抢答程序在抢答开始的20秒内,查询是否有人按键。也就是进入一段查询程序,其流程图如图6所示。
先读P1口,查询P1.0、P1.1、P1.2、P1.3的状态,判断几号竞赛者按下按键,根据查询结果转向各自的中断服务程序:使LED 显示的计数停止,与各按键相对应的号码被显示。
,
图6
六:程序
org 0000h
ajmp main
org 0003h
ajmp start
org 000bh
ajmp time
org 0030h
main: mov tmod,#1 ; 置T/C0为方式1、定时, 置T/C1为方式1、计数
mov th0,#0b1h ; 送T/C0定时初值
mov tl0,#0e0h
mov ie, #83h ; 设置中断
setb tr0 ; 启动T/C0定时
mov r3,#0
mov r4,#0
mov 30h,#0 ; 记时的个位显示
mov 31h,#0 ; 记时的十位显示
mov 32h,#0 ; 选手号
disp: mov sp,5fh
mov a,#03h ; 对8155初始化
mov dptr,#0ff20h
movx @dptr,a
loop: mov r5,#1
mov r0,#30h
mov a,r5
loop1: mov dptr,#0ff21h
movx @dptr,a
mov dptr,#0ff22h
mov a,@r0
add a,#0eh
movc a,@a+pc ; 查地址低字节
movx @dptr,a
acall dlay ; 调用延时子程序
inc r0
mov a,r5
jb acc.2,ld ; 判别a
rl a
mov r5,a
ajmp loop1
ld: sjmp loop
table: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0c8h
dlay: mov r7,#02h
dl1: mov r6,#0ffh
dl2: djnz r6,dl2
djnz r7,dl1
ret
time: mov th0,#0b1h
mov tl0,#0e0h
push psw
push acc
mov a,#0fh
orl p1,a
mov a,p1
anl a,#0fh
cjne a,#0,go_on ; 判断有无人进行抢答
inc r3
cjne r3,#25,back ; 判别时间
mov r3,#0
inc r4
mov a,r4
mov b,#10
div ab ; 到10秒后进位
mov 31h,a
mov 30h,b
cjne r4,#20,back ; 判断是否到20秒
cpl p1.7 ;20秒到,红灯亮
mov 32h,#10
clr tr0 ; 停止T/C0定时
sjmp back
go_on: clr tr0
jnb acc.0,two ; 判断 大于0转two
mov 32h,#01h ;1号选手抢答
sjmp back
two: jnb acc.1,three ; 判断大于0 转three
mov 32h,#02h
sjmp back
three: jnb acc.2,four ; 判断 大于0转four
mov 32h,#03h
sjmp back
four: mov 32h,#04h ;4号选手抢答
back: pop acc ; 出栈,即时间继续
pop psw
reti
start: setb tr0
reti
end
七: 各功能模块的调试
该抢答器系统主要包括定时器/计数器T/C的计数模块、LED 显示的模块、抢答中断服务程序模块。
设置T/C的工作方式、定时或计数初值,就可以使T/C工作了。由于最初对T/C的定时、计数初值的计算不是很理解,所以定时、计数初值计算了多次才得出正确的值。T/C0是定时功能,定时50ms ,T/C1是计数功能,计数到20。 LED 的显示程序为实验书上的原程序,运行一切正常,没遇到什么难题。 抢答中断服务程序模块可以说是该抢答器系统的核心部分。在这个模块遇到的问题是如何使INT1与4个竞赛者的按键(X0、X2、X3、X4)相连,并受这4个
按键的控制;设置/INT1的优先级最高,这样做使竞赛者按键以后,可以中断LED 的计数。
八:问题的不足:
我们所设计的抢答器可实现基本的操作功能, 可是还存在许多不足之处, 如计数器在时间到达20秒时不能自动终止而是继续记时; 还有当抢答时, 如果前一位选手抢答错误而继续抢答时, 前一个选手的号码不能自动被清除等等. 我们曾尝试改进可是没有什么成效.
结论
通过此次单片机设计实习,我学会了观察问题和搜集资料的方法;把自己在学校学到的知识转化为实验成果,积累了一定的经验,提高了分析问题和解决问题的实际能力。我体会到课程设计的各个环节,不是孤立的,每个环节都是必不可少的。在该课程设计的过程中,我深刻体会到了计算机研究工作的艰辛。自己觉得理论上可行的方法,在实验的过程中却不一定行得通。经过了一次又一次地修改程序和检查电路,终于完成了自己的课程设计。虽然它有许多的不完善,可我却有一种无法言表的喜悦与成就感。我明白了课程设计的过程,就是不断地改进与完善的过程。面对设计中遇到的问题,不要轻言放弃。通过自己的努力和虚心地向老师和同学请教和探讨,一定能将问题解决。
在开发设计过程中,由于知识有限,经验不足,课程设计时间短,难免有很多的不足,敬请老师指教,以待日后加以改进。
四人抢答器模拟实验报告
一、目的与要求
1. 目的:
(1)培养学生综合利用MCS-51单片机的软硬件知识进行程序设计的能力,解决一些实际问题。
(2)进一步加深对MCS-51单片机内部结构和程序设计方法的理解。
(3)提高学生建立程序文档、归纳总结的能力。
2. 基本要求:
(1)要求用MCS-51单片机知识完成程序的设计;
(2)源代码程序要求必要的注释。
3. 创新要求
在基本要求达到后,可以进行创新设计,如更加完善程序功能。
二、系统总体设计
基于MCS-51单片机的智能抢答器的设计,主要要实现以下几种功能:
(1)当主持人按下他的按键时,抢答开始,LED 显示器开始从0到20的定时记数。
(2)在20秒定时的时间内,如果有竞赛者要回答问题,那么按下自己的按键,此时,与该竞赛者对应的显示灯亮,并且LED 显示器的计时停止。先按键的竞赛者可屏蔽其他人的抢答信号。
(3)如果在20秒定时结束后,即LED 显示器显示20时,仍然没竞赛者按下按键回答问题,那么报警信号灯亮
(4)在20秒内,可以进行累加计时
三、硬件系统设计
该抢答器的设计是基于MCS-51单片机的,使用到的硬件主要有8051的P1口和P3口,LED 显示器,8155芯片及单片机内部的定时器/计数器T/C。
如图示(图1):
图1
1.使用4个开关分别代表4个选手控制号,用P1口中的P1.0,P1.1,P1.2,
P1.3表示四个选手
2.用P1.7(X6)表示红灯,P3口中的P3.2与外来脉冲连接,控制继续计时。
3. 资源分配:在设计过程中,用到了8051的P1口和P3口,主要是/INT0和/INT1,用竞赛者的按键X0、X2、X3、X4控制/INT1。当程序运行时,启动T/C计数,用8155芯片使LED 显示计;当/INT1产生有效信号时,停止T/C计数,LED 计时停止。
四、程序流程图(如图2) :
图2
五:系统软件设计
1. 主程序
主程序功能:完成单片机MCS-51的初始化操作;定时器初始化;等待定时器中断的发生;发生中断,则转入相应的中断服务程序,执行相应功能的子程序。主程序流程图如下(图3) :
图3
2. 子程序
子程序主要包括LED 显示的程序,定时器/计数器T/C程序,抢答的中断服务程序。
2.1 LED 显示程序
LED 计数的启动受到/INT0、/INT1、T/C0、T/C1的控制。
LED 显示程序的功能是:
a. 当/INT0产生有效信号,T/C0和T/C1启动后,LED 开始显示计数(从0到20)。
b. 当/ INT1产生有效信号后,使T/C0和T/C1停止工作,此时LED 停止在当时的计数值。这也就是说一轮抢答结束。
LED 显示程序的流程图如图(图4):
图4
2.2 定时器/计数器T/C程序
首先设置T/C0输出方波,且定时50ms ,再经过反向脉冲后为100ms , T/C1计数为20(工作方式已在主程序设置),这样1秒产生,LED20秒定时可以开始,接着判断LED 是否显示到20。如果到20,则报警。如果没显示到20,LED 继续计数。
T/C程序流程图如图(图5):
图5 2.3 抢答的子程序
抢答的子程序所完成的主要功能是:当主持人宣布抢答开始,并按下按键LED 开始计数后,竞赛者才能抢答。有竞赛者按下按键后,显示与之相对应的选手号,同时LED 计数停止。
抢答程序在抢答开始的20秒内,查询是否有人按键。也就是进入一段查询程序,其流程图如图6所示。
先读P1口,查询P1.0、P1.1、P1.2、P1.3的状态,判断几号竞赛者按下按键,根据查询结果转向各自的中断服务程序:使LED 显示的计数停止,与各按键相对应的号码被显示。
,
图6
六:程序
org 0000h
ajmp main
org 0003h
ajmp start
org 000bh
ajmp time
org 0030h
main: mov tmod,#1 ; 置T/C0为方式1、定时, 置T/C1为方式1、计数
mov th0,#0b1h ; 送T/C0定时初值
mov tl0,#0e0h
mov ie, #83h ; 设置中断
setb tr0 ; 启动T/C0定时
mov r3,#0
mov r4,#0
mov 30h,#0 ; 记时的个位显示
mov 31h,#0 ; 记时的十位显示
mov 32h,#0 ; 选手号
disp: mov sp,5fh
mov a,#03h ; 对8155初始化
mov dptr,#0ff20h
movx @dptr,a
loop: mov r5,#1
mov r0,#30h
mov a,r5
loop1: mov dptr,#0ff21h
movx @dptr,a
mov dptr,#0ff22h
mov a,@r0
add a,#0eh
movc a,@a+pc ; 查地址低字节
movx @dptr,a
acall dlay ; 调用延时子程序
inc r0
mov a,r5
jb acc.2,ld ; 判别a
rl a
mov r5,a
ajmp loop1
ld: sjmp loop
table: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0c8h
dlay: mov r7,#02h
dl1: mov r6,#0ffh
dl2: djnz r6,dl2
djnz r7,dl1
ret
time: mov th0,#0b1h
mov tl0,#0e0h
push psw
push acc
mov a,#0fh
orl p1,a
mov a,p1
anl a,#0fh
cjne a,#0,go_on ; 判断有无人进行抢答
inc r3
cjne r3,#25,back ; 判别时间
mov r3,#0
inc r4
mov a,r4
mov b,#10
div ab ; 到10秒后进位
mov 31h,a
mov 30h,b
cjne r4,#20,back ; 判断是否到20秒
cpl p1.7 ;20秒到,红灯亮
mov 32h,#10
clr tr0 ; 停止T/C0定时
sjmp back
go_on: clr tr0
jnb acc.0,two ; 判断 大于0转two
mov 32h,#01h ;1号选手抢答
sjmp back
two: jnb acc.1,three ; 判断大于0 转three
mov 32h,#02h
sjmp back
three: jnb acc.2,four ; 判断 大于0转four
mov 32h,#03h
sjmp back
four: mov 32h,#04h ;4号选手抢答
back: pop acc ; 出栈,即时间继续
pop psw
reti
start: setb tr0
reti
end
七: 各功能模块的调试
该抢答器系统主要包括定时器/计数器T/C的计数模块、LED 显示的模块、抢答中断服务程序模块。
设置T/C的工作方式、定时或计数初值,就可以使T/C工作了。由于最初对T/C的定时、计数初值的计算不是很理解,所以定时、计数初值计算了多次才得出正确的值。T/C0是定时功能,定时50ms ,T/C1是计数功能,计数到20。 LED 的显示程序为实验书上的原程序,运行一切正常,没遇到什么难题。 抢答中断服务程序模块可以说是该抢答器系统的核心部分。在这个模块遇到的问题是如何使INT1与4个竞赛者的按键(X0、X2、X3、X4)相连,并受这4个
按键的控制;设置/INT1的优先级最高,这样做使竞赛者按键以后,可以中断LED 的计数。
八:问题的不足:
我们所设计的抢答器可实现基本的操作功能, 可是还存在许多不足之处, 如计数器在时间到达20秒时不能自动终止而是继续记时; 还有当抢答时, 如果前一位选手抢答错误而继续抢答时, 前一个选手的号码不能自动被清除等等. 我们曾尝试改进可是没有什么成效.
结论
通过此次单片机设计实习,我学会了观察问题和搜集资料的方法;把自己在学校学到的知识转化为实验成果,积累了一定的经验,提高了分析问题和解决问题的实际能力。我体会到课程设计的各个环节,不是孤立的,每个环节都是必不可少的。在该课程设计的过程中,我深刻体会到了计算机研究工作的艰辛。自己觉得理论上可行的方法,在实验的过程中却不一定行得通。经过了一次又一次地修改程序和检查电路,终于完成了自己的课程设计。虽然它有许多的不完善,可我却有一种无法言表的喜悦与成就感。我明白了课程设计的过程,就是不断地改进与完善的过程。面对设计中遇到的问题,不要轻言放弃。通过自己的努力和虚心地向老师和同学请教和探讨,一定能将问题解决。
在开发设计过程中,由于知识有限,经验不足,课程设计时间短,难免有很多的不足,敬请老师指教,以待日后加以改进。