4 系统软件设计
软件是整个控制系统设计的核心,它具有充分的灵活性,可以根据系统的要求而变化。在硬件结构一定的情况下,只要改变软件就能实现一些不同的功能。单片机所具有的智能功能要由软件来完成。在本系统中,软件结构采用模块化设计方法,将遥控接收器所要完成的功能分别编写和调试。所有模块调试成功以后,将各个模块连接构成单片机软件系统。这样的设计有利于程序代码的优化,而且便于设计、调试和维护。对于51系列单片机,现有四种语言支持,即汇编、PL/M,C和BASIC。BASIC通常附在PC机上,是初学编程的第一种语言。一个新变量名定义之后可在程序中作变量使用,非常易学,根据解释的行可以找到错误而不是当程序执行完才能显现出来。BASIC由于逐行解释自然很慢,每一行必须在执行时转换成机器代码,需要花费许多时间不能做到实时性。BASIC为简化使用变量,所有变量都用浮点值。BASIC是用于要求编程简单而对编程效率和运行速度要求不高的场合。当前已经很少用到此语言了。PL/M是Intel从8080微处理器开始为其系列产品开发的编程语言。它很像PASCAL,是一种结构化语言,但它使用关键字去定义结构。PL/M编译器好像汇编器一样可产生紧凑代码。PL/M总的来说是高级汇编语言可详细控制着代码的生成。但对51系列,PL/M不支持复杂的算术运算、浮点变量而无丰富的库函数支持。C语言是一种源于编写UNIX操作系统的语言,它是一种结构化语言,可产生压缩代码。C可以进行许多机器级函数控制而不用汇编语言。与汇编相比,有如下优点:对单片机的指令系统不要求了解,仅要求对51的存储器结构有初步了解,寄存器分配、不同存储器的寻址及数据类型等细节可由编译器管理程序有规范的结构,可分为不同的函数。这种方式可使程序结构化将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性编程及程序调试时间显著缩短,从而提高效率。提供的库包含许多标准子程序,具有较强的数据处理能将己编好程序可容易的植入新程序,因为它具有方便的模块化编程技术C语言作为一种非常方便的语言而得到广泛的支持,C语言程序本身并不依赖于机器硬件系统,基本上不做修改就可根据单片机的不同较快地移植过来。51的汇编语台非常像其他汇编语台,简单实用。指令系统比第一代微处理器要强些。51的不同存储区域使得其复杂一些。但是利用汇编语言指令就可以充分利用片内RAM
22
资源,充分利用单片机内部的一些特殊规定,充分利用单片机的一切资源,因而单片机资源的利用效率高。同时汇编语言是最接近机器语言的,因而代码的执行效率高。在本系统中,由于单片机内部的运算量不大,而汇编语言简单,执行效率高,己经能够满足系统需求,所以选择汇编语来编写相应代码。
4.1 应用软件设计原则
应用系统中的应用软件是根据系统功能要求设计的,应可靠实现系统的各种功能。在本系统中,软件设计要力求做到以下几点:
1) 软件结构清晰,简捷,流程合理。
2) 各功能程序实现模块化,子程序化。这样,即便于调试,链接,又便于移植,修改。
3) 程序存储区,数据存储区要合理规划,既能节约内存容量,又使操作方便。
4) 运行状态实现标志化管理。各个功能程序运行状态,运行结果以及运行要 求都要设置状态标志以便查询,程序的转移,运行,控制都可通过状态标志条件来控制。
5) 经过调试修改后的程序应进行规范化,除去修改的痕迹,以便于交流和借鉴,也为以后的软件模块化,标准化打下基础。
6) 实现全面软件抗干扰设计。软件抗干扰是单片机应用系统提高可靠性的 有利措施。具体的软件抗干扰方法,将在第四章中介绍。
下面几节将详细介绍各个模块要实现的功能以及实现方法。
4.2 遥控接收程序
遥控接收子程序要完成的功能就是不断地扫描解码芯片的地址位,接收解码芯片的数据位和有效传输确认位,判断出遥控器上发射过来的相应键值。由于解码芯片的地址位在默认情况下是接地的,对于遥控器上连接在编码芯片的数据位上的键值,只要置高,那么相应的解码芯片对应的数据位也会为高,遥控接收子程序可以直接接收判断,不需要再对地址位置位。本系统中值为3,6,9,#的键值就是直接接收。对于余下的8个连接在编码芯片地址位的键值,当遥控器上的键按下后,遥控接收子程序就不断地循环置地址位为高,然后通过解码芯片的有效传输确认位来确认是不是相应编码芯片的地址位也为高。有效传输确认位输出高电平则编码芯片的相
23
应地址位为高,记下相应地址位,推出遥控器上的键值。地址位与单片机之间加入三极管PNP8550进行隔离和驱动。有效传输确认位与单片机之间加入三极管NPN8050进行隔离和驱动。所以当单片机的控制脚RA-1,RA-2,??,RA-8为低时,解码芯片相应地址位为高。当到来,所以单片机读取数据位数据可以延迟一定的时间。因而遥控接收子程序中可以先处理地址位然后处理数据位数据,不会出现数据丢失。一位地址位最多需要等待30ms以确定是否有值,8位最多等待8x30ms=240ms,即0.24秒,然后接收数据位数据,不会给用户造成反应迟钝的感觉,符合用户要求。
4.3 I2C通讯子程序
如前说述,本系统中由单片机8051的P3.4和P3.5来分别模拟SCL(串行时钟线)和SDA(串行数据线)来实现与EEPROM 24WC02IT通讯。EEPROM 24WC02的器件地址为AOH。
1.写操作
(1)节写
在字节写模式下,主器件发送起始命令和从器件地址信息(R/W位置零)给从器件,在从器件产生应答信号后,主器件发送AT24WC02的字节地址,主器件在收到从器件的另一个应答信号后,再发送数据到被寻址的存储单元。AT24WC02再次应答。并在主器件产生停止信号后开始内部数据的擦写,在内部擦写过程中,AT24WC02不再应答主器件的任何请求。
(2)页写
用页写AT24WC02可以一次写入16个字节的数据。页写操作的启动和字节写一样。不同在于传送了一字节数据后并不产生停止信号。主器件被允许发送15个额外的字节。每发送一个字节数据后AT24WC02产生一个应答位并将字节地址低位加1,高位保持不变。如果在发送停止信号之前主器件发送超过16个字节,地址计数器将自动翻转,先前写入的数据被覆盖。接收到16字节数据和主器件发送的停止信号后,AT24WC02启动内部写周期将数据写到数据区。所有接收的数据在一个写周期内写入AT24WC02。
(3)应答查询
可以利用内部写周期时禁止数据输入这一特性。一旦主器件发送停止位指示主器件操作结束时,AT24WC02启动内部写周期,应答查询立即启
24
动,包括发送一个起始信号和进行写操作的从器件地址。如果AT24WC02正在进行内部写操作,不会发送应答信号。如果A'T24WC02己经完成了内部自写周期,将发送一个应答信号主器件可以继续进行下一次读写操作。
(4)写保护
写保护操作特性可使用户避免由于不当操作而造成对存储区域内部数据的改写。当WP管脚接高时,整个寄存器区全部被保护起来而变为只可读取。AT24WC02可以接收从器件地址和字节地址。但是装置在接收到第一个数据字节后不发送应答信号从而避免寄存器区域被编程改写。
2.读操作
对AT24WC02读操作的初始化方式和写操作时一样,仅把R/W位置为1,有三种不同的读操作方式:立即地址读,选择读和连续读。
(1)立即地址读
AT24WC02的地址计数器内容为最后操作字节的地址加1。也就是说,如果上次读/写的操作地址为N,则立即读的地址从地址N+1开始。如果N=E(对24WC02E=255)则计数器将翻转到0且继续输出数据AT24WC02接收到从器件地址信号后(R/W位置1),它首先发送一个应答信号,然后发送一个8位字节数据。主器件不需发送一个应答信号,但要产生一个停止信号。
(2)选择性读
选择性读操作允许主器件对寄存器的任意字节进行读操作。主器件首先通过发送起始信号,从器件地址和它想读取的字节数据的地址执行一个伪写操作。在AT24WC02应答之后,主器件重新发送起始信号和从器件地址,此时R/W位置1,AT24WC02响应并发送应答信号,然后输出所要求的一个8位字节数据,主器件不发送应答信号但产生一个停止信号。
(3)连续读操作
连续读操作可通过立即读或选择性读操作启动。在AT24WC02发送完一个8位字节数据后,主器件产生一个应答信号来响应,告知AT24WC02主器件要求更多的数据,对应每个主机产生的应答信号AT24WC02将发送一个8位数据字节。当主器件不发送应答信号而发送停止位时结束此操作。AT24WC02输出的数据按顺序由N到N+l输出。读操作时地址计数器在
25
AT24WC02整个地址内增加。这样整个寄存器区域在可在一个读操作内全部读出。当读取的字节超255,计数器将翻转到零并继续输出数据字节。
4.4 系统程序
系统上电后首先完成初始化工作,然后按照事先设定好的程序执行。本系统程序是基于单任务机制的。这种机制的应用程序是一个无限的循环,在这循环的过程中调用相应的子程序函数来完成相应的操作。这种机制具有简单直观,易于控制的优点。程序中有以下一些设定:设定用户输入的密码一律存于发射缓冲区中。在密码修改时从发射缓冲区取出,写入AT24WC02。密码比对时将AT24WC02中的密码取出来存于接受缓冲区中,然后将发射缓冲区中的密码与接受缓冲区的密码进行比对。固定键盘处理程序的操作,包括:密码的设定和密码的比对。遥控器的操作包括:密码的比对。
4.4.1 遥控密码系统的操作方法
(一) 密码设置
(说明:密码设置必须在固定键盘上操作) A) 第一套密码设置
1) 先按一下门内侧的密码设定按钮,此时黄灯闪亮。
2) 在固定键盘的0-9键上输入你喜欢的密码,每按一键黄灯闪烁一次并发出“哗”的一声。
3) 然后按“*”键,密码设定完成。 B) 第二套密码设置
1) 在固定键盘上按两次“0”键,然后再按一下门内侧的密码设定按钮,此时黄灯闪亮。
2) 在固定键盘的0-9键上输入你喜欢的密码,每按一键黄灯闪烁一次并发出“哗”的一声。
3) 然后按“*”键,密码设定完成。 (二) 开启操作
(说明:开启操作既可以在固定键盘上也可以在遥控器上操作) A) 固定键盘上的开启操作
1) 依次输入你设定的密码,每按一键黄灯闪烁一次并发出“哗”的一声。
26