1 AT89C51 性能简介
ATMEL的AT89C51(以下简称89051)是一种带4K字节可擦除、可编程只读存储器(FPEROM-Falsh Programmableand Erasable ReadOnly MemorY)的低电压、高性能8位CMOS微处理器。该器件采用ATMEL高密度非易失存储器制造技术,与工业标准的MCS-51指令集相兼容。其主要特性是:具有4K字节可编程闪烁存储器、可1000次循环写/擦;数据保留时间为10年;全静态工作为0-24Hz、三级程序存储器锁定、128x8位内部RAM,32个可编程v0线,2-个16位定时器/计数器、5个中断源、可编程串行通道、低功耗的闲置和掉电模式、片内振荡器和时钟电路。由于AT89C51将多功能8位CPU和闪烁存储器组合在一个芯片中,成为一种高效微控制器,能为很多嵌人式控制系统提供灵活性高且廉价的方案。
2 频率测量原理
交流信号的频率测量一般是通过对信号放大限幅,在整形成脉冲后用计数器计脉冲来测量,用1s的时基信号作为计数门的控制信号,在1s内对被测信号脉冲的计数值即是频率值。由于被测信号与启闭计数门的时基信号没有同步关系,因此这种计数方法会产生1Hz的计数误差,这种误差随频率的增高而减小。但是在测量交流信号周期时正相反,频率越低则误差越小,因此,在测量50Hz的工频信号时,采用测量周期的方法,测量周期后再计算出频率值。
3 测量电路的实现原理
如图1所示为测量电路的原理图。交流信号通过普通光电祸合器TEL117进行电气隔离并将单极性转换为脉冲信号,经反相器CD4069整形并转换为负脉冲后送到89C51的INTO端口,使89C51产生INTO中断。然后通过中断处理启动89C51内部16位定时器进行计数,到第二个INTO中断信号时,停止计数,将计数值进行周期一频率转换计算,再将十六进制值计算结果转换成BCD码频率值,并进行个、十、百位调整后,存人显示缓冲区。向P2.0口发送选通信号,输出数据到液晶驱动器ICM7211AM进行显示处理。液晶驱动器ICM7211AM具有BCD码数据输人,输出4位7段码加小数点位,并具有完整的脉冲发生器,150Hz的液晶板背电极BP驱动器,能提供相当于16位1.5英寸字符的背电极的驱动能力。该电路采用+5V单电源供电,具有低功耗的特点。
4 周期测量算法和软件设计
该电路主要完成对50Hz工频的实时测量、显示。50Hz工频信号周期为20ms,89C51的定时器计数周期为1个机器周期(即12个振荡周期=2μts),因此每个测量周期计数值应为100000显示数据转换公式为:显示数据值=106/(2*数值)。由于ICM7211AM具有数据锁存功能,因此显示电路设计和软件设计都很简单,不需要特殊的数据保持电路或循环扫描程序。电路如图1所示,由89C51的P2.0引脚输出地址选择信号,连接到ICM7211AM的一个片选引脚,这里使用CS1。当ICM7211AM的CS1引脚、CS2引脚同时接收到低电平信号后被选通,数据位和地址位同时写人数据锁存器内,在任一片选信号CS1或CS2的上升沿,位地址被译码输出到液晶显示屏进行显示。程序流程图如图2所示。
程序主要部分清单如下:
- ;开始部分
- ORG OOOOH
- AJMP STRT
- ORG 0003H ;为触发输人端口
- CLR EA
- CPL TR0
- AJMP IO
- ;初始化部分
- ORG 00301
- STRT:
- ......
- MOV TMOD,#01H ;TO作为定时
- MOV TH0,#00H
- MOV TL0,#00H
- MOV A,#01H
- MOV P2,A
- LCALL DISP ;调用显示子
- SETB IT0
- SETB EX0 ;起动INT0
- SETB EA
- WAIT:
- AJMP WAIT ;等待中断信号
- ;INTO中断处理程序
- IO:
- JB TR0,CONT
- LCALL DISP
- CONT:
- SETB EX0 ;起动INT0
- SETB EA
- RETI
- DISP:
- ...... ;数据处理部分
- MOV DPTR,#0100H ;ICM7211AM的地址为#0100H
- MOV A,31H ;30H-34H作为显示缓冲区
- ......
- MOV 31H,#00H ;显示完毕,清空显示缓冲区
- ......
- RET
- END
这里省略定时器TO中断处理,而在实际应用中应考虑到TO在程序运行错误或受到干扰等情况时,计数值可能会出现错误并产生TO中断,因此可加人TO中断处理程序并显示错误提示信息。ICM7211AM的输人数据和输出字符对应关系如表1所示,可以采用显示“En--”或-En-”等字样来显示错误信息码,根据“n”表示的错误信息很快就能判断产生错误的原因。
表1 ICM7211AM显示字符表
5 程序设计中的注意事项
(1)在程序设计中,为了减少计数误差,在定时器的起停控制指用转移指令或中断,以减少在起动制时出现程序运行时间误差。
(2)为了提高程序的计数精度的运行周期,在起动定时器和停止由于采用的操作指令不同,会使计因此在计数值中应加上或减去这数值可按程序运行过程中执行的周期或通过实测得到。
(3)电路的设计中需要注意的中均有论述,这里不再赘述。