《基于8051的前后台系统的设计.docx》由会员分享,可在线阅读,更多相关《基于8051的前后台系统的设计.docx(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基于8051的前后台系统的设计 *大学软件技术基础实践报告 系名称:电子与科学技术 专业:电子科学与技术 班级: 学号: 姓名: 2022年5月29日 实践一基于8051的前后台系统的设计 软件介绍: Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil 提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WIN
2、XP等操作系统。 Proteus软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一
3、的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2022年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。 硬件介绍 AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash 只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash 存储单
4、元,AT89C52单片机在电子行业中有着广泛的应用。 AT89C52为8 位通用微处理器,采用工业标准的C51内核,在内 部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整 时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM及 外部接口等功能部件的初始化,会聚调整,会聚测试图控制,红 外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1 (19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复 位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V 电源的正负
5、端。P0P3 为可编程通用I/O 脚,其功能用途由软件 AT89C52引脚图 定义,在本设计中,P0 端口(3239 脚)被定义为N1 功能控制 端口,分别与N1的相应功能管脚相连接,13 脚定义为IR 输入端,10 脚和11脚定义为I2C 总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12 脚、27 脚及28 脚 定义为握手信号功能端口,连接主板CPU 的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。 74LS138 为 3 线8 线译码器,主要用于控制液晶显示屏八个数码管的亮暗。从而达到动态显示的目的。 图中所用的芯片是AT89C52 ,其P1端口的
6、八个引脚分别与液晶显示板的ABCDEFGDP相连接,分别代表数码二极管的八个发光二极管。用来显示数字。而芯片的P3.0引脚接UP键,P3.1引脚接DOWN键,P3.2接MODE键,P3.3接INT_KEY键,P3.5接BEEP键。而P2.0 P2.1 P2.2分别接74LS138的ABC引脚,然后74LS138的输出接到液晶显示屏的13245678端,用来控制位数码管的亮暗,从而实现动态显示时间的功能。 一、实践目的: 学习8051的C语言程序设计,掌握基于芯片开发应用程序的架构,即:应用程序一般是一个无限循环,循环中调用相应的函数完成相应的操作(后台行为),中断服务程序处理突发事件(前台行为
7、)。 掌握基于芯片的无操作系统的应用程序开发技术。 二、实践过程: 1、安装Keil、Proteus以及vdmagdi软件; 2、用proteus打开source/hardware/clock.dsn,分析电子钟的硬件电路; 图中所用的芯片是AT89C52 ,其P1端口的八个引脚分别与液晶显示板的ABCDEFGDP相连接,分别代表数码二极管的八个发光二极管。用来显示数字。而芯片的P3.0引脚接UP键,P3.1引脚接DOWN键,P3.2接MODE键,P3.3接INT_KEY键,P3.5接BEEP键。而P2.0 P2.1 P2.2分别接74LS138的ABC引脚,然后74LS138的输出接到液晶显
8、示屏的13245678端,用来控制位数码管的亮暗,从而实现动态显示时间的功能。 3、用Keil打开source/hardware/clock.uv2工程,分析clock.c软件代码,编译并运行程序代码,在proteus观察运行结果; 运行结果为时钟正常运行,但是按下MODEKEY键,液晶显示没有出现相应的显示变化。下面对程序进行整改。 4、分析clock.c源代码,完成clock.c所有要求完成的部分; 程序开始运行后,程序处于ClockRun的状态,子程序INT1_ISR( ) interrupt 2处于等待的状态,当检测到有键按下(不考虑按键抖动的影响),程序产生中断,然后判断按下的键是哪
9、个键,通过判断出哪个键被按下,实现哪个具体的功能。如MODEKEY键,改变运行状态。 MODEKEY按键处理 当clockstate = 0 时,按下MODEKEY后,clockstate = 1,系统进入修改走时的分针状态 当clockstate = 1 时,按下MODEKEY后,clockstate = 2,系统进入修改走时的时针状态 当clockstate = 2 时,按下MODEKEY后,clockstate = 3,系统进入修改闹时的分针状态 当clockstate = 3 时,按下MODEKEY后,clockstate = 4,系统进入修改闹时的时针状态 当clockstate =
10、 4 时,按下MODEKEY后,clockstate = 0,系统进入正常的走时状态 由所需的功能可知,clockstate需要5个工作状态,分别人0、1、2、3、4 通过按MODEKEY,可以在这5个状态之间进行循环。每当按下一次MODEKEY键,则clockstate状态加一。当clock state的状态为5时,则自动重置为0。 key = UPKEY处理 state = 1,走时的分针加1 state = 2,走时的时针加1 state = 3,闹时的分针加1 state = 4,闹时的时针加1 这段代码要实现的功能是,按下UPKEY 系统会根据当前所不同的状态,从而实现相应的操作,比
11、如,现在colckstate=1,则时钟的分钟位自动加一,因为分钟是60进制的,所以如果加完后,分钟位等于60。则系统自动将其重置为0 。同理可知,小时位如果等于24,则系统自动将其重置为0 。 key = DOWNKEY处理 state = 1,走时的分针减1 state = 2,走时的时针减1 state = 3,闹时的分针减1 state = 4,闹时的时针减1 这段代码要实现的功能是,按下DOWNKEY 系统会根据当前所不同的状态,从而实现相应的操作,比如,现在colckstate=1,则时钟的分钟位自动减一,因为分钟是60进制的,所以如果分钟位等于0时,减完后,系统自动将其重置为59
12、。同理可知,小时位如果等于0,则系统自动将其重置为23 。 三、实验过程及结果截图: 四、心得体会 这次的实践是基于前后台系统的设计,实验刚开始,有去查下前后台系统是怎么运行的,但是没怎么看懂。通过老师上课的讲解,还有提问,终于知道前后台系统的工作方式。这次实验主要是针对8051的前后台系统的设计。上网查了下前后系统的资料了解到,早期的嵌入式系统中没有操作系统的概念,程序员编写嵌入式程序通常直接面对裸机及裸设备。在这种情况下,通常把嵌入式程序分成两部分,即前台程序和后台程序。 应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为。前台程序通过中断来处理事件;后台
13、程序则掌管整个嵌入式系统软、硬件资源的分配、管理以及任务的调度,是一个系统管理调度程序。这就是通常所说的前后台系统。一般情况下,后台程序也叫任务级程序,前台程序也叫事件处理级程序。在程序运行时,后台程序检查每个任务是否具备运行条件,通过一定的调度算法来完成相应的操作。对于实时性要求特别严格的操作通常由中断来完成,仅在中断服务程序中标记事件的发生,不再做任何工作就退出中断,经过后台程序的调度,转由前台程序完成事件的处理,这样就不会造成在中断服务程序中处理费时的事件而影响后续和其他中断。 实际上,前后台系统的实时性比预计的要差。这是因为前后台系统认为所有的任务具有相同的优先级别,即是平等的,而且任务的执行又是通过FIFO队列排队,因而对那些实时性要求高的任务不可能立刻得到处理。另外,由于后台程序是一个无限循环的结构,一旦在这个循环体中正在处理的任务崩溃,使得整个任务队列中的其他任务得不到机会被处理,从而造成整个系统的崩溃。由于这类系统结构简单,几乎不需要RAM/ROM的额外开销,因而在简单的嵌入式应用被广泛使用。 通过这次实验,我学到了很多。这是一个学习新知识、巩固加深所学课本理论知识的过程,它培养了我们综合运用知识的能力,独立思考和解决问题的能力。它不仅加深了我对C+课程的理解,还让我感受到了设计程序的乐趣。
限制150内