图4.3.4.1 读写程序流程图
在对DS1302进行读操作时,读出的数据为BCD码,同样在写操作时,写入的数据一也必须为BCD码,这就需要在数据写入之前、读出之后进行必要的数据进制之间的转换,以便与系统其它数据在比较时相对应。在本系统中,因设定的时间参数一般都为二进制或十六进制数,为了便于同DS1302的时钟数据进行比较,故在程序中需进行二进制与BCD码之间的转换,其相互间的转换程序如下;
;---------------------------------------------------------------- ;二进制转换为BCD码 ;Function: DisTimeBCD ;DisTimeBCD: Mov A, @R0 An 1 A, #0FH Mov Rl,AInc Rl
Mov A, @R0 Swap A Anl A, #0FH Mov @R1,A Inc Rl Inc R0 Ret
;------------------------------------------------------------- ;BCD码转换为二进制
;Function: DisTimeHex DisTimeHex: Mov A,@R0 Mov B, #10 Div AB Mov @R1,B Inc R1 Mov @R1,A
31
Inc R1 Inc R0 Ret
4.4显示驱动模块
系统运行过程中的数据显示是人机交互对话的一个重要通道。通过系统数据的显示,我们才可以更好的了解系统运行的状态,从而便于对整个系统进行必要的操作。本系统中采用共阳极的数码管,其中采用ULN2803作为驱动数码管的段选的芯片,采用简单又便宜的9012三极管来驱动数码管的位选,节约成本,程序编写简单。
4.4.1 ULN2803驱动器的应用
考虑到数码管驱动信号要求的驱动电流较大,采用功率驱动器件ULN2803,芯片外形如图4. 4. 1所示。此芯片是八组NPN型达林顿功放三极管集成芯片,典型的输入电压是5V,集电极输出功率可达50VX600mA。因此采用ULN2803作为共阳数码管的段信号驱动器,而共阳数码管的位信号驱动则采用8个晶体管9012来实现。又由于ULN2803为低电平驱动,所以数据送到单片机端口之前,应在程序中先将数据取反,然后将数据送到与ULN2803输入端口相连接单片机的PO端口即可,简化软件程序。
4. 4. 2显示程序设计
其显示子程序如下:
;----------------------------------------------------------- Display: Mov R0 , DisBufptr
Mov A, @R0
32
DisPlayl: Mov Dptr, #DisTab
Movc A, @A+Dptr
Cpl a
Mov DisModPort, A
Mov A, DisCSPtr
Mov DisCSPort, A RL A
Mov DisCSPtr, A
Inc DisBufPtr
Jb Acc. 0, DisQuit
InitDisO: Mov DisCSPtr, #11111110B
Mov DisBufPtr, #DisBuf
DisQuit: R
;------------------------------------------------------------ 每次先送一位要显示的数据字节,然后再送该位LED的位地址字节,直到8位显示完全。本系统在运行过程中需要显示察看的数据有时钟及遥控器键盘显示数值。正常工作中8位显示器显示实时时钟,时间显示小时、分钟和秒钟,其中有两位用来显示“----”,用以分隔小时、分钟和秒钟,这样显示更加清晰。当然,在测试期间,数码管用来显示遥控器的键值。
4.5系统键功能
4.5.1键功能处理程序
在执行完键盘采集工作后,如果有键按下,程序转入键处理功能程序。系统根据键采集过程中得到的键号,散转到相应的键处理子程序,通过键盘设置修改系统工作参数。其程序如下:
;---------------------------------------------------------- DoKey: Mov a, KeyGet
Rl a
Mov dptr, #KeySub
33
Jmp @a+dptr
KeySub: Ajmp Key0 ;0
Ajmp Keyl ;1 Ajmp Key2 ;2 Ajmp Key3 ;3 Ajmp Key4 ;4 Ajmp Key5 ;5 Ajmp Key6 ;6 Ajmp Key6 ;7 Ajmp Key6 ;8 Ajmp Key6 ;9
5系统调试运行及问题分析
整个系统设计完成后,要进行运行调试,排除软件和硬件的故障,同时验证系统的可靠性及稳定性,使系统符合设计要求。本系统的调试主要分两个步骤:单片机系统调试(硬件调试和软件调试)及整个控制系统试运行调试。
5.1单片机系统调试方法及步骤
单片机系统的调试应包括硬件及软件两部分,主要是通过调试发现硬件及软件中存在的问题,查看其运行结果是否符合设计要求。
系统硬件和软件的研制可以相互独立的平行进行,软件调试可以在硬件完成之前,硬件也可以在无完整应用软件的情况下进行调试,但它们需要借助另外的工具提供调试环境。硬件和软件分调完成之后,还要再进行软件和硬件的联调,在调试中找出问题,判断故障源,修改软硬件。
在对系统进行实际调试时,首先应对硬件进行静态调试,同时对系统软件进行初步调试,此后再对软件和硬件进行动态调试,最后才能使系统进入正常工作。
1.静态调试:静态调试主要是排除明显的硬件故障。在电路搭建好后,对其进行仔细检查,查看端口是否正确连接,连接是否可靠。同时还应当用万用表检查电路,看应当开路的地方是否开路,应当短路的地方是否短路,电源地线连接
34
是否可靠。在焊接后,查看焊接是否牢固,有无虚焊或短路等。在将芯片、传感器等元件插到电路板上时,要保证各处电源极性、电压正确,以防止因电源极性接反或电压过高损坏芯片或传感器。此外,插入芯片必须在断电的情况下进行,特别注意芯片的方向不要插反。
2.软件调试:系统软件程序在编制好以后,可通过汇编软件对源程序进行汇编,变为可执行的目标代码,在汇编过程中出现的错误,要及时纠正。在软件调试时采用软件模拟开发系统对程序进行调试,这种模拟开发系统是在计算机上利用模拟软件实现对单片机的硬件模拟、指令模拟及运行状态模拟,从而完成应用软件开发的全过程。调试过程中的运行状态、各寄存器状态、端口状态等都可以在指定的窗口区域显示出来,通过这些显示结果随时跟踪程序运行状态,以确定程序运行无错误。
3.动态调试:控制系统的软件和硬件是密切相关的,软件模拟开发系统不能对硬件部分进行诊断,同时也不能实时在线仿真,所以用户程序还需跟硬件连接起来进行联调,同时对软件和硬件进行检查和诊断。整个单片机系统进行在线调试时,需借助仿真开发工具来对用户软件及硬件电路进行诊断、调试。在应用系统各电路板调试成功后,将用户程序加载到在线仿真器上,这时就能单步、多步或连续地执行目标程序,同时也可以根据需要分段设置断点执行用户程序。系统中的硬件故障(如各个部件内部存在的故障和部件之间连接的逻辑错误)主要是靠联机仿真来排除的。对于与硬件无联系的用户程序,例如定时标志等,虽然已经没有语法错误,但可能存在逻辑错误,这时,就借助于动态在线调试手段发现逻辑错误,直至逻辑错误纠正为止。而对于一些与硬件相关的用户程序,如接口驱动程序等,则需要配合硬件,进行在线调试,如果有逻辑错误,也要及时纠正修改。程序调试完毕后,利用在线编程器将程序固化到单片机中,使整个系统运行起来。
5.2出现的主要问题及分析解决
系统调试一般来讲是一种复杂,而仔细的工作,所以在调试过程中需要有耐心,仔细检查、解决出现的一切问题。只有所有问题都得到解决后,才能保证整个系统的正常运行。在本系统的调试过程中遇到的主要问题及分析解决: 问题
35