华东交通大学毕业设计
主程序流程框图
上电启动 整机初始化 N 按单价键 Y 输 入 单 价 N 按数字键 Y 显示单价 N 有无重量 Y 显示重量
单价 * 重量 显示总价 图3-1 主程序流程图
15
3.1.3
严正长:电子秤设计
3.2系统初始化
系统上电后,对系统进行初始化。初始化程序[7]主要完成对单片机内专用寄存器的设定,单片机工作方式及端口的工作状态的规定、RAM自检、各标志位的设置、设置栈指针、分配内存空间、设定计数器/定时器的工作方式。
3.2.1 AT89C52的初始化
1. AT89C52作为系统中央控制单元,是系统[8]程序中断,数据处理中心,也是其它各模块纽带,对其初始化意义非常大。 (1)程序存储器的初始化
程序存储器用于存放程序、常数和表格,在执行程序时,从程序存储器中按地址依次取指令执行。AT89C52片内含有8K字节闪速可编程/擦除只读存储器。编址范围0000H~1FFFH;
(2)数据存储器的初始化
AT89C52的数据存储器有256字节,编址为00H~FFH,内部分工作寄存器区(00H~1FH)、位寻址区(20H~2FH)、数据缓冲器区(30H~FFH)。
表2 RAM地址分布 30H~4FH 50H~5FH 采样值存储单元 重量存储单元 60H~6FH 70H~7FH 价格存储单元 显示缓冲单元 (3)堆栈指针在系统初始化时指向07H单元,我们根据需要让其在RAM区开辟堆栈区MOV SP,#2FH;从30H开始 堆栈,拟议存放数据采样值与各中间参数。 2. 定时器/计数器初始化
(1) 定时器/计数器T0初始化
在程序的开始处,我们设置0.5S定时来处理采样值。所以根据实际情况,我们设T0为定时器并且定时为50ms。因定时时间够大,所以采用16位定时/计数方式工作。所以T0设定为工作方式1,非门控方式,TMOD.2=0,M1=0,M0=1,GATE=0; 方式寄存器TM TH0、TL0初值计算 由于T=(65536-X)×1=50000
得 X=15536=3CB0H
即 TH0=3CH, TL=0B0H
(2)定时器/计数器T1初始化
我们设T1为计数器,也用16位定时/计数方式工作。所以TMOD.6=1, TMOD.5=0, TMOD.4=1,非门控制方式。 TMOD=01010001B=51H (3)定时器/计数器T2初始化
T2作为键盘中断延时定时器。定时13ms,其初始化根据中断实际应用来设置。 3. 中断初始化
(1) 系统中中断请求源包括外部INT0和INT1中断请求,中断的允许或禁止是由 内可进行位寻址的8位中断允许寄存器IE来控制的。
其中EA是总开关,如果它等于0,则所有中断都不允许,本系统中SETB EA 让它总开。ET0,ET1分别为定时0,1的中断允许,ET0、ET1为外部中断允许,它们根据实际程序应用来设置,利用位操作指令SETB 来实现。 (2)中断响应过程
CPU响应中断时,首先把当前指令的下一条指令(就是中断返回后将要执行的指令)的地址送入堆栈,然后根据中断标记,将相应的中断入口地址送入PC,执行PC
16
华东交通大学毕业设计
指向所指地址程序。中断完成后,一定要执行一条RETI指令,执行这条后,CPU将会把堆栈中保存着的地址取出,送回PC,那么程序就会从主程序的中断处继续往下执行。
3.2.2 8279的初始化
1. 8279的 初始化
本课题中8279是连接键盘与显示的接口芯片,在系统上电复位后,8279的命令/状态口地址为7FFFH,数据口地址为7FFEH,清除8279FIFO堆栈和显示RAM,设置编码扫描、输入方式、扫描频率,开外部中断。电子秤的显示是8位显示,外部译码,驱动显示。
(1) 键盘/显示器方式设置命令字
扫描计数器设定为编码方式,将键盘设置为双键互锁,显示器选取右入口显示方式,则命令字为10H。
(2)AT89C52的晶振频率f=12MHZ,则ALE线的输出频率为f/12=1MHZ,8279内部时钟频率要求100KHZ,则分频系数应取20,命令字为34H。 (3)写显示RAM命令字
设命令给出了显示RAM的地址信息,AI取1,写显示RAM地址自动加1,则命令字为90H,另外显示屏蔽消隐命令字为A0和,清除命令字取D1H.
3.2.3 ICL7109的初始化
本课题中让7109工作于直接输出方式,P1.0口控制转换。见原理图所示,RUN/HOLD接+5V,以使7109连续转换。由于采用了3.58MHZ的晶振并经58分频,转换速率为7.5次/秒。根据图可知数据口地址为FEFFH。
3.3 A/D转换结果处理程序
在智能电子秤控制系统中,除了控制单元和执行单元外,还必须有反馈环节。在反馈环节中,最重要的就是对数据的采集。本文以AT89C52单片机为核心,设计一个基于单片机的数据采集系统,通过模拟电压形式输入系统,经双积分A/D转换器ICL7109可以采集12路模拟量,精度为12位,并经多次采样,通过滤波,取得更精确的重量值。
3.3.1 A/D转换过程
智能电子秤作为称重工具,其对数据的精度要求非常高,A/D转换器位数的确定与整个测量控制系统所需测量的范围和精度有关,本设计选择双计分型A/D转ICL7109,它模拟量采集精度达到12位,在实际应用中,可以对电压信号进行直接采集,为了使所采样值更精确,我们要将采样值进行数字滤波。STATUS作为中断请求信号与单片机的中断输入端相连。由于采用了3.58MHz的晶振并经58分频,故7109完成一次转换所需的时间为T=8192(脉冲周期)×58/3.58=132.72ms,即转换速率为7.5次/秒。7109输出的12位数据及极性、过量程标志分别由HBEN和LBEN控制,分两次送入单片机。
17
严正长:电子秤设计
3.3.2采样数据处理
(1)采样取值
我们在单片机内开辟30H~45H单元存放采样值,工作寄存器0组存放中间参数,R0为地址指针,指向拟以采样值的片内RAM地址;R7存采样次数。 (2)数据滤波
本课题中,利用算术平均值法滤波可以抑制智能电子秤采样时随机干扰。其原理是将8次采样值相加,然后求其平均值作为有效采样值。将8次采样值累加和放在R3、R4、R5中,求的平均值在R4、R5中。
3.4 键盘与显示处理程序
我们知道键盘和显示是人与微机系统打交道的主要设备。在本系统中我们采用8279可编程键盘/显示管理接口。利用8279可实现对键盘/显示器的自动扫描,以减轻CPU负担,并具有显示稳定、程序简单、不会出现误动作等特点。 3.4.1 程序原理
(1)8279键盘、显示程序可分为四个部分
1.主程序:首先将8279初始化,对8279写入相应的命令字,使其按要求工作,然后开始 不断扫描键盘,判断是否有键按下,当没有键盘按下时则继续扫描键盘;当有键盘有键按下时就取出键值,并判断是功能键还是数字键,且转到相应的子程序处理。
2.键扫描子程序:主要判断有无键按下,利用8279的状态字节可判断FIFO RAM中已键入数据的个数或没有输入字符。当状态字节的低四位全为0时,便可判断无键按下。
3.当判断有键按下后,就转向取键值子程序。首先取出行、列号进行拼装,得到所需的键号。然后与数OAH相比较,从而判断出是功能键还是数字键。若是功能键就转到功能键处理子程序;若是数字键就调用显示子程序进行显示。
4.显示子程序。首先置显示缓冲区首址和计数长度,然后取显示数据转换为段选码,送到LED上显示。 3.4.2 键盘模块
当发现有键按下时,首先判断是命令键还是数字键。若是数字键,则把按键读数存入存储器,并显示;若是命令键,则根据按键读数查阅转移表;以获得处理子程序的入口。子程序执行完后继续扫描键盘。
本系统中键盘控制采用中断方式实现,利用外部中断1端口来实现。采用4*4的16键,分为数字键:0~9、00和5个命令键:置零、小数点、删除、确定、单价。数字键和小数点键:用于输入单价; 删除:用于输入的单价错误的时候,重新输入;置零:清楚显示界面;单价:输入单价前使用;确定:称重时输入单价完毕后确定,即可显示总价。
当输入为字符时,执行相应的子程序。
18
华东交通大学毕业设计
开始 中断入口 按8279键值 置零键 Y 小数点? Y 数字键? 清单价 建标志F=1 F不为1 存入单价整数部分 返回 存入单价小数部分 图3-3键盘中断服务流程图 3.4.3 显示模块
操作者是从显示设备上获取微机系统的信息,因此,操作者每操作一下,显示设备上都应该有一定的反应。这说明,显示模块与操作有关,即监控程序需要调用显示模块。显示模块可以由命令键来驱动或者自动执行模块来驱动 。通常,自动执行模块调用时,只让一处调用显示模块,其他各处不得直接调用显示模块,此时要设置一个显示申请标志,当某模块需要显示时,将申请标志置位,同时设定有关显示内容,将显示模块安排在一个重复执行的循环中。
19