AT89C智能时钟设计Word文档下载推荐.docx
《AT89C智能时钟设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《AT89C智能时钟设计Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
-23-
四、使用说明书:
五、结论:
-24-
六、附录:
-25-
(元件清单)-25-
参考文献-25-
单片机是20世纪70年代中期发展起来的一种将CPU、RAM、ROM、I/O接口和中断系统集成于一块硅片上的大规模集成电路芯片,又称微控制器。
单片机的开发应用已经成为高科技领域的一项重要技术。
“单片机原理及应用”是电子信息、机电专业课程之一。
学生应通过学习、熟悉单片机应用系统的设计与调试,掌握单片机在工业、经济和日常生活中的应用,为将来踏上工作岗位后进行电子产品的设计、生产、检测和维护奠定坚实的基础。
本报告对以ATC2051-24PC为核心的单片机展开研究。
以汇编语言为基础,制作了“六位数字时钟”。
学习了集排线、安装、焊接和编程为一体的课程设计
在本次实习中参考了授课老师及同学们的建议,针对现代企业选用人才特点,培养学生在掌握必须、够用的基础知识的前提下,加入了自己对本次实习的见解。
本报告由王革老师策划,硬件部分由郑庄编写,软件部分由于天龙编写,由李海涛整合而成。
在本报告编写的过程中王革老师提出了很多宝贵意见和建议,在此表示衷心感谢。
同时编者参考了很多文献资料,在此向各位文献资料作者表示感谢。
鉴于编者水平有限,书中难免有不妥之处,敬请批阅本报告的老师和同学们批评和指正。
(一)、设计目的
通过学习基于ATC2051-24PC单片机设计6位电子数字时钟:
可以实现时间的精确显示和进位,以及手动调时。
继而学习单片机的中端系统,定时/计数器,以及基本的汇编语言。
(二)、设计设备
PC机、ATC2051烧录器、6位数字电子时钟套件、KeilμVision2集成开发环境
(三)、设计原理
显示部分主要器件为2位共阳红色数码管,驱动采用PNP型三极管驱动,各端口配有限流电阻,驱动方式为扫描,占用P1.0~P1.6端口。
冒号部分采用4个Φ3.0的红色发光,驱动方式为独立端口驱动,占用P1.7端口。
2、键盘原理:
按键S1采用独立式按键。
其工作方式为,在P3.7端口输入低电平时读取按键的状态并由单片机赋予相应的键值。
采用P1口输出P3口控制
4、单片机系统:
本产品采用AT89C2051为核心器件,并配合所有的必须的电路,只具有上电复位的功能,无手动复位功能。
(一)、电路原理及特点
89C2051数字钟套件,控制芯片采用AT89C2051,数码管采用3只两位红色的共阳型LED数码管,显示清晰亮度高,因为是扫描的显示方式,所以各个数码管的abcdefg各脚采用了总线并联,改动R1-R7的电阻值可以改变显示亮度。
S1按纽用于校准时间,按住2秒以上进入校准时间状态及换档和退出,快速点触用于调节时间数值。
本电路又增加了一个3V的备用电池,停电时AT89C2051采用备用电池供电,时钟不会停止,但数码管不显示,来电后备用电池失去作用,AT89C2051采用外部电源供电,数码管正常显示。
注意:
数码管如显示不正常,请断开电源,拿掉备用电池,再重新装上后,通电即恢复正常。
AT89C2051芯片介绍
AT89C2051是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,片内含2kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C2051单片机在电子类产品中有广泛的应用。
内部结构
AT89C2051是一带有2K字节闪速可编程可擦除只读存储器(EEPROM)的低电压,高性能8位CMOS微处理器。
它采用ATMEL的高密非易失存储技术制造并和工业标准MCS-51指令集和引脚结构兼容。
通过在单块芯片上组合通用的CPLI和闪速存储器,ATMEL的AT89C2051是一强劲的微型处理器,它对许多嵌入式控制应用提供一定高度灵活和成本低的解决办法。
AT89C2051提供以下标准功能:
2K字节闪速存储器,128字节RAM,15根I/O口,两个16位定时器,一个五向量两级中断结构,一个全双工串行口,一个精密模拟比较器以及两种可选的软件节电工作方式。
空闲方停止CPU工作但允许RAM、定时器/计数器、串行工作口和中断系统继续工作。
掉电方式保存RAM内容但振荡器停止工作并禁止有其它部件的工作到下一个硬件复位。
程序保密
AT89C2051设计有2个程序保密位,保密位1被编程之后,程序存储器不能再被编程除非做一次擦除,保密位2被编程之后,程序不能被读出。
软硬件的开发
AT89C2051可以采用下面两种方法开发应用系统。
1、由于89C2051内部程序存贮器为Flash,所以修改它内部的程序十分方便快捷,只要配备一个可以编程89C2051的编程器即可。
调试人员可以采用程序编辑-编译-固化-插到电路板中试验这样反复循环的方法,对于熟练的MCS-51程序员来说,这种调试方法并不十分困难。
但是做这种调试不能够了解片内RAM的内容和程序的走向等有关信息。
2、将普通8031/80C31仿真器的仿真插头中P1.0~P1.7和P3.0~P3.6引出来仿真2051,这种方法可以运用单步、断点的调试方法,但是仿真不够真实,比如,2051的内部模拟比较器功能,P1口、P3口的增强下拉能力等等。
引脚说明
1、VCC:
电源电压。
2、GND:
地。
3、P1口:
P1口是一个8位双向I/O口。
口引脚P1.2~P1.7提供内部上拉电阻,P1.0和P1.1要求外部上拉电阻。
P1.0和P1.1还分别作为片内精密模拟比较器的同相输入(ANI0)和反相输入(AIN1)。
P1口输出缓冲器可吸收20mA电流并能直接驱动LED显示。
当P1口引脚写入“1”时,其可用作输入端,当引脚P1.2~P1.7用作输入并被外部拉低时,它们将因内部的写入“1”时,其可用作输入端。
当引脚P1.2-P1.7用作输入并被外部拉低时,它们将因内部的上拉电阻而流出电流。
4、P3口:
P3口的P3.0~P3.5、P3.7是带有内部上拉电阻的七个双向I/O口引脚。
P3.6用于固定输入片内比较器的输出信号并且它作为一通用I/O引脚而不可访问。
P3口缓冲器可吸收20mA电流。
当P3口写入“1”时,它们被内部上拉电阻拉高并可用作输入端。
用作输入时,被外部拉低的P3口脚将用上拉电阻而流出电流。
P3口还用于实现AT89C2051的各种第二功能,如下表所列:
引脚口
功能
P3.0
RXD串行输入端口
P3.1
TXD串行输出端口
P3.2
INT0 外中断0
P3.3
INT1 外中断1
P3.4
T0定时器0外部输入
P3.5
T1定时器1外部输入
P3口还接收一些用于闪速存储器编程和程序校验的控制信号。
5、RST:
复位输入。
RST一旦变成高电平所有的I/O引脚就复位到“1”。
当振荡器正在运行时,持续给出RST引脚两个机器周期的高电平便可完成复位。
每一个机器周期需12个振荡器或时钟周期。
6、XTAL1:
作为振荡器反相器的输入和内部时钟发生器的输入。
7、XTAL2:
作为振荡器反相放大器的输出。
主要性能
1、和MCS-51产品兼容;
2、2KB可重编程FLASH存储器(10000次);
3、2.7-6V电压范围;
4、全静态工作:
0Hz-24MHz;
5、2级程序存储器保密锁定;
6、128*8位内部RAM;
7、15条可编程I/O线;
8、两个16位定时器/计数器;
9、6个中断源;
10、可编程串行通道;
11、高精度电压比较器(P1.0,P1.1,P3.6);
12、直接驱动LED的输出端口
电路原理图
Pcb图
软件设计
程序清单
;
AT89C2051时钟程序;
定时器T0、T1溢出周期为50MS,T0为秒计数用,T1为调整时闪烁用,
P3.7为调整按钮,P1口为字符输出口,采用共阳显示管。
;
中断入口程序;
ORG0000H;
程序执行开始地址
LJMPSTART;
跳到标号START执行
ORG0003H;
外中断0中断程序入口
RETI;
外中断0中断返回
ORG000BH;
定时器T0中断程序入口
LJMPINTT0;
跳至INTTO执行
ORG0013H;
外中断1中断程序入口
外中断1中断返回
ORG001BH;
定时器T1中断程序入口
LJMPINTT1;
跳至INTT1执行
ORG0023H;
串行中断程序入口地址
串行中断程序返回
主程序;
START:
MOVR0,#70H;
清70H-7AH共11个内存单元
MOVR7,#0BH;
CLEARDISP:
MOV@R0,#00H;
INCR0;
DJNZR7,CLEARDISP;
MOV20H,#00H;
清20H(标志用)
MOV7AH,#0AH;
放入"
熄灭符"
数据
MOVTMOD,#11H;
设T0、T1为16位定时器
MOVTL0,#0B0H;
50MS定时初值(T0计时用)
MOVTH0,#3CH;
50MS定时初值
MOVTL1,#0B0H;
50MS定时初值(T1闪烁定时用)
MOVTH1,#3CH;
SETBEA;
总中断开放
SETBET0;
允许T0中断
SETBTR0;
开启T0定时器
MOVR4,#5H;
1秒定时用初值(50MS×
20)
START1:
LCALLDISPLAY;
调用显示子程序
JNBP3.7,SETMM1;
P3.7口为0时转时间调整程序
SJMPSTART1;
P3.7口为1时跳回START1
SETMM1:
LJMPSETMM;
转到时间调整程序SETMM
1秒计时程序;
T0中断服务程序
INTT0:
PUSHACC;
累加器入栈保护
PUSHPSW;
状态字入栈保护
CLRET0;
关T0中断允许
CLRTR0;
关闭定时器T0
MOVA,#0B7H;
中断响应时间同步修正
ADDA,TL0;
低8位初值修正
MOVTL0,A;
重装初值(低8位修正值)
MOVA,#3CH;
高8位初值修正
ADDCA,TH0;
MOVTH0,A;
重装初值(高8位修正值)
开启定时器T0
DJNZR4,OUTT0;
20次中断未到中断退出
ADDSS:
20次中断到(1秒)重赋初值
MOVR0,#71H;
指向秒计时单元(71H-72H)
ACALLADD1;
调用加1程序(加1秒操作)
MOVA,R3;
秒数据放入A(R3为2位十进制数组合)
CLRC;
清进位标志
CJNEA,#30H,ADDMM;
ADDMM:
JCOUTT0;
小于60秒时中断退出
ACALLCLR0;
大于或等于60秒时对秒计时单元清0
MOVR0,#77H;
指向分计时单元(76H-77H)
分计时单元加1分钟
分数据放入A
CJNEA,#60H,ADDHH;
ADDHH:
小于60分时中断退出
大于或等于60分时分计时单元清0
MOVR0,#79H;
指向小时计时单元(78H-79H)
小时计时单元加1小时
时数据放入A
CJNEA,#12H,HOUR;
HOUR:
小于24小时中断退出
大于或等于24小时小时计时单元清0
OUTT0:
MOV72H,76H;
中断退出时将分、时计时单元数据移
MOV73H,77H;
入对应显示单元
MOV74H,78H;
MOV75H,79H;
POPPSW;
恢复状态字(出栈)
POPACC;
恢复累加器
开放T0中断
RETI;
中断返回
闪动调时程序;
T1中断服务程序,用作时间调整时调整单元闪烁指示
INTT1:
中断现场保护
MOVTL1,#0B0H;
装定时器T1定时初值
MOVTH1,#3CH;
DJNZR2,INTT1OUT;
0.3秒未到退出中断(50MS中断6次)
MOVR2,#06H;
重装0.3秒定时用初值
CPL02H;
0.3秒定时到对闪烁标志取反
JB02H,FLASH1;
02H位为1时显示单元"
熄灭"
02H位为0时正常显示
INTT1OUT:
恢复现场
中断退出
FLASH1:
JB01H,FLASH2;
01H位为1时,转小时熄灭控制
MOV72H,7AH;
01H位为0时,"
数据放入分
MOV73H,7AH;
显示单元(72H-73H),将不显示分数据
AJMPINTT1OUT;
转中断退出
FLASH2:
01H位为1时,"
数据放入小时
显示单元(74H-75H),小时数据将不显示
MOV74H,7AH;
MOV75H,7AH;
加1子程序;
ADD1:
MOVA,@R0;
取当前计时单元数据到A
DECR0;
指向前一地址
SWAPA;
A中数据高四位与低四位交换
ORLA,@R0;
前一地址中数据放入A中低四位
ADDA,#05H;
A加1操作
DAA;
十进制调整
MOVR3,A;
移入R3寄存器
ANLA,#0FH;
高四位变0
MOV@R0,A;
放回前一地址单元
取回R3中暂存数据
指向当前地址单元
数据放入当削地址单元中
RET;
子程序返回
清零程序;
对计时单元复零用
CLR0:
CLRA;
清累加器
清当前地址单元
前一地址单元清0
时钟调整程序;
当调时按键按下时进入此程序
SETMM:
cLRET0;
关定时器T0中断
LCALLDL1S;
调用1秒延时程序
JBP3.7,CLOSEDIS;
键按下时间小于1秒,关闭显示(省电)
进入调时状态,赋闪烁定时初值
SETBET1;
允许T1中断
SETBTR1;
开启定时器T1
SET2:
JNBP3.7,SET1;
P3.7口为0(键未释放),等待
SETB00H;
键释放,分调整闪烁标志置1
SET4:
JBP3.7,SET3;
等待键按下
LCALLDL05S;
有键按下,延时0.5秒
JNBP3.7,SETHH;
按下时间大于0.5秒转调小时状态
按下时间小于0.5秒加1分钟操作
LCALLADD1;
调用加1子程序
取调整单元数据
CJNEA,#30H,HHH;
调整单元数据与60比较
HHH:
JCSET4;
调整单元数据小于60转SET4循环
LCALLCLR0;
调整单元数据大于或等于60时清0
AJMPSET4;
跳转到SET4循环
CLOSEDIS:
省电(LED不显示)状态。
开T0中断
开启T0定时器(开时钟)
CLOSE:
JBP3.7,CLOSE;
无按键按下,等待。
有键按下,调显示子程序延时削抖
是干扰返回CLOSE等待
WAITH:
JNBP3.7,WAITH;
等待键释放
LJMPSTART1;
返回主程序(LED数据显示亮)
SETHH:
CLR00H;
分闪烁标志清除(进入调小时状态)
SETHH1:
JNBP3.7,SET5;
SETB01H;
小时调整标志置1
SET6:
JBP3.7,SET7;
等待按键按下
有键按下延时0.5秒
JNBP3.7,SETOUT;
按下时间大于0.5秒退出时间调整
按下时间小于0.5秒加1小时操作
调加1子程序
CJNEA,#12H,HOUU;
计时单元数据与24比较
HOUU:
JCSET6;
小于24转SET6循环
大于或等于24时清0操作
AJMPSET6;
跳转到SET6循环
SETOUT:
JNBP3.7,SETOUT1;
调时退出程序。
延时削抖
是抖动,返回SETOUT再等待
CLR01H;
清调小时标志
清调分标志
CLR02H;
清闪烁标志
CLRTR1;
关闭定时器T1
CLRET1;
关定时器T1中断
开定时器T0中断(计时开始)
跳回主程序
SET1:
键释放等待时调用显示程序(调分)
AJMPSET2;
防止键按下时无时钟显示
SET3:
等待调分按键时时钟显示用
AJMPSET4
SET5:
键释放等待时调用显示程序(调小时)
AJMPSETHH1;
SET7:
等待调小时按键时时钟显示用
AJMPSET6
SETOUT1:
退出时钟调整时键释放等待
AJMPSETOUT;
显示程序;
显示数据在70H-75H单元内,用六位LED共阳数码管显示,P1口输出段码数据,P3口作
扫描控制,每个LED数码管亮1MS时间再逐位循环。
DISPLAY:
MOVR1,#70H;
指向显示数据首址
MOVR5,#0FEH;
扫描控制字初值
PLAY:
MOVA,R5;
扫描字放入A