单片机课程设计电压报警器.docx
《单片机课程设计电压报警器.docx》由会员分享,可在线阅读,更多相关《单片机课程设计电压报警器.docx(9页珍藏版)》请在冰豆网上搜索。
单片机课程设计电压报警器
河北工业大学
计算机硬件技术基础
MCS-51单片机原理及应用)
课程设计报告书
、设计题目:
电压报警器的单片机模拟
、总体设计
(1)所实现的功能描述:
为防止电压波动会导致电器工作异常并烧毁,用ADC模拟电压波动的过程,程序检测并通过八段显示器显示出当前电压值,当电压过低或者过高以后使用闪动的灯光加蜂鸣报警。
(2)设计方案的描述:
本试验采用实验板自带的ADC转换来模拟电压检测,通过多次采集取平均值的方法得到比较时效且较准确的电压值,然后计算出所测的值对应的实际值,并通过八段显示器显示出当前电压值,电压在1-4V范围(可以在不同情况下方便的设置你需要的电压范围值)内属于正常,否则报警,报警灯光使用的是闪动的LED发光二极管来模拟,报警鸣笛使用的是蜂鸣器来模拟,
通过一个定时器0的中断模式并采用软件延时使二极管和蜂鸣器得到两个各自适用的不同频率,通过INTO外部中断来启动静音模式,并且用户可操作电压旋转按钮来改变电压模拟波动的过程,如果报警过程中电压恢复正常,则报警结束,而当报警超过一定时间后可以自动切断电源,矢闭系统。
三、硬件系统设计,包括所需设备,接线方式,以及资源分配。
1设备:
IBMPC机一台
DP・51PROC单片机综合仿真实验仪一台
2接线方式:
单通道采集接线
⑴使用2X10的排线连接D7区的J28接到A7区的J84;
(2)将D2区10K电位器的左端金属孔通过导线连接到该区的GND金属孔,而右端金属孔
通过导线连接到该区的VCC金属孔;
(3)D2区10K电位器的中间金属孔连接到A7区的P2JO2金属孔(IN0);
(4)将A7区的P2JO3-P2JO5分别连接到A2区的A2~A0;
(5)将A7区的P2_CS连接到A2区的A15;
(6)将D1区LED1连接到A2区的P10
(7)将D1区SW1连接到A2区的INTO
(8)将A2区的P16与B5区的BUZZ相连
P1.0
P1.6
P2_IO3
P2_IO4
P2JO5
P2_CS
INTO
3、资源分配:
通过一个定时器0的中断模式并采用软件延时使二极管和蜂鸣器得到两个各自适用的不冋频率,通过INTO外部中断来启动静音模式,通过八段显示器显示出当前电压的实际数值。
四、软件系统的设计
选择电压工作范围功能模块
数据采集功能模块
数据运算转换模块
数据判断功能模块
1、功能模块
定时器0中断功能模块
外部中断0功能模块/外部中断1功能模块
显示功能模块
系统自动矢闭功能模块
2、各个功能模块实现的功能
1、选择电压工作范围功能模块:
根据输入电压的实际范围转换成条件所需要的数值范围
2、数据采集功能模块:
多次采集电压求取平均值
3、数据运算转换功能模块:
计算出所测的值对应的实际值
4、数据判断功能模块:
判断电压处于什么工作范围并相应的响应什么状态
5、定时器0中断功能模块:
通过一个定时器0的中断模式并采用软件延时使二极
管和蜂鸣器得到两个各自适用的不同频率,达到二极管闪烁和蜂鸣器蜂鸣的效
果
6、夕卜部中断功能模块:
通过INTO外部中断来启动静音模式
7、显示功能模块:
通过八段显示器显示出当前电压值
8、系统自动矢闭功能模块:
当报警超过一定时间后可以自动切断电源,矢闭系统。
3、程序流程图
4、ADC08091勺内部逻辑结
INO
►
8
IN1
►
路
nn
模
M3
拟
IN4
■
INJ
►
开
IN6
►
IN7
1
A
■
地
址
IF
锁
存
与
译
ALE
桜
码器
五、程序清单:
EOC
VREFX+)
VREFTA)
OE
ORG8000H
LJMPMAIN
;转入主程序转入
外部中断程序转
入定时程序
MOVR0,#00H
ORG8003HLJMP
INTVSORG800BH
LJMPTCOSORG
81OOHMAIN:
MOV
SP,#70H;MOV20H,#00HMOV给堆栈指针赋初值;给
TMOD,#01HMOV判断定时器的位清零;
TH0,#0FFHMOV确定定时器工作方式;
TL0,#60HMOV给定时器赋初值
R2,#00H
MOVIE,#1000001OB;开中断
SETBETO
SETBEA
SETBEXO
SETBPXO;将外部中断0设置成高级中断
CLRIT0
MAIN1:
MOV32H,#1;输入电压报警实际范围
MOV33H,#4
MOVA,#033H;转换成判断需要的数值
MOVB,32H
MULAB
MOV34H,A
MOVA,#033H
MOVB,33H
MULAB
MOV35H,A
MOVA,#00H
MOVB,#03H
CLRC
MOVR1,#30H
MOVDPTR,#7FF8H
MOVX@DPTR,A;A/D转换,进行三次测量求取平均值
CALLDELAY
MOVXA,@DPTR
DIVAB
MOV@R1,A
MOVB,#03H
MOVX@DPTR,A
CALLDELAY
MOVXA,@DPTR
DIVAB
ADDA,@R1
MOV@R1,A
MOVB,#03H
NEQ1:
L1:
L4:
L3:
L2:
NEQ2:
TCOS:
MOVX@DPTR,A
CALLDELAY
MOVXA,@DPTR
DIVAB
ADDA,@R1
MOV@R1,A
CJNEA,35H,NEQ1;与报警范围的最大值进行
LJMPL1
JNCL1
LJMPL2;在安全范围时转到L2继续判断
JB20H.1丄4
CLRP1.6
;开启定时器进行报警
CLRP1.0
JB20H.0,L3;判断定时器是否已经开启
SETBTR0;开启定时器
MOVTH0,#0FFH;给定时器重新赋初值
MOVTL0,#60H
MOVR2,#00H
SETB20H.0;将定时器开启标志位置高
MOVA,OOH
SJMPMAIN1
;与报警范围的最小值进行比较
CJNEA,34H,NEQ2
LJMPL1
JCL1
CLRTRO;电压范围正常尖闭定时器
CLR20H.0;清空定时器开启标志位
SETBP1.6;矢闭报警
SETBP1.0
MOVA,OOH
LJMPMAIN1;返回主程序继续判断
MOVTH0,#0FFH;给定时器重新赋初值
MOVTL0,#60H
JB20H.1丄5;判断是否通过中断启动静音模式
CPLP1.6;控制蜂鸣器蜂鸣
L5:
INCR2;软件记数获得灯闪烁需要的频率
CJNER2,#99,NEXT
CPLP1.0;控制二极管闪烁
MOVR2,#00H
INCRO
CJNER0,#0FFH,NEXT;判断是否长时间没有反应
LJMPCUTOFF;转入尖闭系统
NEXT:
RETI
DELAY:
:
软件延时
MOVR6,#00H
DELAY1:
MOVR5,#0FFH
DJNZR5,$
DJNZR6,DELAY1
RET
INTVS:
;启动静音模式矢闭蜂鸣器
CPL20H.1
RETI
CUTOFF:
:
矢闭系统
SETBP1.0
SETBP1.6
SJMP$
END
六、调试程序的方法在采集数据之后设置断点,然后将电压旋扭分别旋到最大值、中间值和最小值,并且改变开尖的状态,观察存储器里的内容及其二极管和蜂鸣器的工作状态的变化,看中断系统和定时器是否按预期效果响应,并以此不断的进行修改和调试,以达到最佳效果。
七、设计问题的不足和改进方案设计问题的不足:
八段显示器显示的是实际电压的十六进制数
改进方案:
通过十六进制数与BCD码的转换使八段显示器显示十进制数
八、自评分和收获体会收获体会:
这次开放性实验的设计使我,掌握通过堆栈保护现场和恢复现场的应用,明白了双定时同时使用时避免相互影响的方法,熟悉了对外部中断的使用和定时器的分时操作及计数,学会了把基本算法运用到实际过程中。
通过这次开放性实验的设计,清楚的让我明白书本上的总结和老师所授予知识点是解决一切问题的支柱,落实与消化是矢键;在设计过程中,感觉不仅锻炼了自己的动手能力,更是加强了自己对发现问题、分析问题以及解决问题的综合能力;强烈的感受到团体合作的重要性和必要性;这些与这次能取得如此好的成绩是直接相矢联的。
至此,我真诚的期待着能走更远。
这次开放性实验的设计同时使我对外部中断的使用和定时器的分时操作及计数有了更进一步的认识,掌握和明白了双定时同时使用时避免相互影响的方法和通过堆栈保护现场和恢复现场的应用,发现了通过位操作控制定时器开启以避免原状态影响的方法,熟悉了各种运算方法和自己分析发觉算法的能力,复习了多字节与单字节和多字节的乘法,逐渐学会学习和运用新程序发现新算法的方法。
发觉在实际应用中,知识并不是最重要的,可以通过查阅资料来完成设计,重要的是要注意设计中的每一个细节,尽量避免由于某一处应用的错误而导致整个程序不能运行。