导航:首页 > 操作系统 > 单片机实现模拟乘法器

单片机实现模拟乘法器

发布时间:2023-02-26 22:33:37

A. 单片机乘法的实现

org 0000h
jmp start
start:
MOV SP,#60H
mov r2,#20h
mov r3,#34h
mov a,#99h
lcall bhd
lcall hbd
NOP
NOP

;三字节除以单字节子程序
;入口条件:被除数在R3、R4、R5中,除数在R7中。
;出口信息:OV=0 时,双字节商在R4、R5中,OV=1 时溢出。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
DV31:
CLR C
MOV A,R3
SUBB A,R7
JC DV30
SETB OV ;商溢出
RET
DV30:
MOV R2,#10H;求R3R4R5/R7-→R4R5
DM23:
CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DM24
MOV R3,A
INC R5
DM24:
DJNZ R2,DM23
MOV A,R3 ;四舍五入
ADD A,R3
JC DM25
SUBB A,R7
JC DM26
DM25:
INC R5
MOV A,R5
JNZ DM26
INC R4
DM26:
CLR OV
RET ;商在R4R5中

;两字节除以单字节子程序
;入口条件:被除数在R4、R5中,除数在R7中。
;出口信息:OV=0 时,单字节商在R3中,OV=1 时溢出。
; 余数在r4中
;影响资源:PSW、A、R3~R7 堆栈需求: 2字节
D457:
CLR C
MOV A,R4
SUBB A,R7
JC DV50
SETB OV;商溢出
RET
DV50:
MOV R6,#8 ;求平均值(R4R5/R7-→R3)
DV51:
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DV52
MOV R4,A
DV52:
CPL C
MOV A,R3
RLC A
MOV R3,A
DJNZ R6,DV51
MOV A,R4 ;四舍五入
ADD A,R4
JC DV53
SUBB A,R7
JC DV54
DV53:
INC R3
DV54:
CLR OV
RET

;四字节除以单字节子程序
;入口条件:被除数在R2、R3、R4、R5中,除数在R7中。
;出口信息:a<ff 时三字节商在R3、r4、r5中,a=ff 时溢出。
; 余数在r2中
;影响资源:PSW、A、R2~R7 堆栈需求:2字节
;input dat1,dat2,dat3,r5 ;r0(h),:divisor dat2(h) dat3() r5(l):quotient
;dat1(h)dat2(l):resie
F_DIV:
clr c
mov a,r7
jz fd_over
fd_begin:
mov a,r2
subb a,r7
jc no_overflow
mov a,#0ffh
ret
no_overflow:
clr a
mov r6,#18h
fdiv0:
lcall rlc4
jc goushang
mov a,r2
subb a,r7
jc fdnext
inc r5
mov r2,a
fdnext:
djnz r6,fdiv0
jmp fdone
goushang:
mov a,r2
subb a,r7
inc a
inc r5
mov r2,a
jmp fdnext
fdone:
clr a
clr ov
ret
fd_over:
mov a,#0ffh
ret
rlc4:
clr c
mov a,r5
rlc a
mov r5,a
mov a,r4
rlc a
mov r4,a
mov a,r3
rlc a
mov r3,a
mov a,r2
rlc a
mov r2,a
ret
;DIVD功能:双字节二进制无符号数除法
;入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。
;出口信息:OV=0 时,双字节商在R4、R5中,OV=1 时溢出。
; 余数在r2 r3中
;影响资源:PSW、A、B、R1~R7 堆栈需求: 2字节
DIVD:
CLR C ;比较被除数和除数
MOV A,R3
SUBB A,R7
MOV A,R2
SUBB A,R6
JC DVD1
SETB OV ;溢出
RET
DVD1:
MOV B,#10H ;计算双字节商
DVD2:
CLR C ;部分商和余数同时左移一位
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
XCH A,R2
RLC A
XCH A,R2
MOV F0,C ;保存溢出位
CLR C
SUBB A,R7 ;计算(R2R3-R6R7)
MOV R1,A
MOV A,R2
SUBB A,R6
ANL C,/F0 ;结果判断
JC DVD3
MOV R2,A ;够减,存放新的余数
MOV A,R1
MOV R3,A
INC R5 ;商的低位置一
DVD3:
DJNZ B,DVD2;计算完十六位商(R4R5)
; MOV A,R4 ;商移到R2R3中
; MOV R2,A
; MOV A,R5
; MOV R3,A
CLR OV ;设立成功标志
RET
;双字节乘以双字节乘法
;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
;出口信息:乘积在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
MULD:
MOV A,R3 ;计算R3乘R7
MOV B,R7
MUL AB
MOV R4,B ;暂存部分积
MOV R5,A
MOV A,R3 ;计算R3乘R6
MOV B,R6
MUL AB
ADD A,R4 ;累加部分积
MOV R4,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R2 ;计算R2乘R7
MOV B,R7
MUL AB
ADD A,R4 ;累加部分积
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2 ;计算R2乘R6
MOV B,R6
MUL AB
ADD A,R3 ;累加部分积
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
RET
;双字节乘以单字节乘法
;入口条件:被乘数在R2、R3中,乘数在R7中。
;出口信息:乘积在R2、R3、R4中。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
mul21:
mov a,r3
mov b,r7
mul ab
mov r4,a
mov r5,b
mov a,r2
mov b,r7
mul ab
add a,r5
mov r3,a
mov a,b
addc a,#00h
mov r2,a
ret
;功能:双字节十六进制整数转换成双字节BCD码整数
;入口条件:待转换的双字节十六进制整数在R6、R7中。
;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
;影响资源:PSW、A、R2~R7 堆栈需求: 2字节
HB2:
CLR A ;BCD码初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;转换双字节十六进制整数
HB3:
MOV A,R7 ;从高端移出待转换数的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;BCD码带进位自身相加,相当于乘2
ADDC A,R5
DA A ;十进制调整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;双字节十六进制数的万位数不超过6,不用调整
DJNZ R2,HB3 ;处理完16bit
RET

;入口条件:待转换的单字节BCD码整数在累加器A中。
;出口信息:转换后的单字节十六进制整数仍在累加器A中。
;影响资源:PSW、A、B、R4 堆栈需求: 2字节
BCDH:
MOV B,#10H ;分离十位和个位
DIV AB
MOV R4,B ;暂存个位
MOV B,#10 ;将十位转换成十六进制
MUL AB
ADD A,R4 ;按十六进制加上个位
RET

;双字节BCD码整数转换成双字节十六进制整数
;入口条件:待转换的双字节BCD码整数在R2、R3中。
;出口信息:转换后的双字节十六进制整数仍在R2、R3中。
;影响资源:PSW、A、B、R2、R3、R4 堆栈需求:4字节
BH2:
MOV A,R3 ;将低字节转换成十六进制
LCALL BCDH
MOV R3,A
MOV A,R2 ;将高字节转换成十六进制
LCALL BCDH
MOV B,#100 ;扩大一百倍
MUL AB
ADD A,R3 ;和低字节按十六进制相加
MOV R3,A
CLR A
ADDC A,B
MOV R2,A
RET
;标号: BHD功能:单字节BCD码小数转换成单字节十六进制小数
;入口条件:待转换的单字节BCD码数在累加器A中。
;出口信息:转换后的单字节十六进制小数仍在累加器A中。
;影响资源:PSW、A、R2、R3 堆栈需求: 2字节
BHD:
MOV R2,#8 ;准备计算一个字节小数
BHD0: ADD A,ACC ;按十进制倍增
DA A
XCH A,R3
RLC A ;将进位标志移入结果中
XCH A,R3
DJNZ R2,BHD0 ;共计算8bit小数
ADD A,#0B0H ;剩余部分达到0.50否?
JNC BHD1 ;四舍
INC R3 ;五入
BHD1:
MOV A,R3 ;取结果
RET
; 标号: HBD功能:单字节十六进制小数转换成单字节BCD码小数
;入口条件:待转换的单字节十六进制小数在累加器A中。
;出口信息:CY=0时转换后的BCD码小数仍在A中。CY=1时原小数接近整数1。
;影响资源:PSW、A、B 堆栈需求: 2字节
HBD:
MOV B,#100 ;原小数扩大一百倍
MUL AB
RLC A ;余数部分四舍五入
CLR A
ADDC A,B
MOV B,#10 ;分离出十分位和百分位
DIV AB
SWAP A
ADD A,B ;拼装成单字节BCD码小数
DA A ;调整后若有进位,原小数接近整数1
RET

jmp $
end

B. 新概念51单片机C语言教程的作品目录

第1篇入门篇
1.1单片机概述
1.1.1什么是单片机
1.1.2单片机标号信息及封装类型
1.1.3单片机能做什么
1.1.4如何开始学习单片机
1.251单片机外部引脚介绍
1.3电平特性
1.4二进制与十六进制
1.4.1二进制
1.4.2十六进制
1.5二进制的逻辑运算
1.5.1与
1.5.2或
1.5.3非
1.5.4同或
1.5.5异或
1.6单片机的C51基础知识介绍
1.6.1利用C语言开发单片机的优点
1.6.2C51中的基本数据类型
1.6.3C51数据类型扩充定义
1.6.4C51中常用的头文件
1.6.5C51中的运算符
1.6.6C51中的基础语句
1.6.7学习单片机应该掌握的主要内容
2.1Keil工程建立及常用按钮介绍
2.1.1Keil工程的建立
2.1.2常用按钮介绍
2.2点亮第一个发光二极管
2.3while语句
2.4for语句及简单延时语句
2.5Keil仿真及延时语句的精确计算
2.6不带参数函数的写法及调用
2.7带参数函数的写法及调用
2.8利用C51库函数实现流水灯
第2篇内外部资源操作篇
3.1数码管显示原理
3.2数码管静态显示
3.3数码管动态显示
3.4中断概念
3.5单片机的定时器中断
4.1独立键盘检测
4.2矩阵键盘检测
5.1模拟量与数字量概述
5.2A/D转换原理及参数指标
5.3ADC0804工作原理及其实现方法
5.4D/A转换原理及其参数指标
5.5DAC0832工作原理及实现方法
5.6DAC0832输出电流转换成电压的方法
第6章串行口通信原理及操作流程
6.1并行与串行基本通信方式
6.2RS-232电平与TTL电平的转换
6.3波特率与定时器初值的关系
6.451单片机串行口结构描述
6.5串行口方式1编程与实现
6.6串行口打印在调试程序中的应用
第7章通用型1602,12232,12864液晶操作方法
7.1液晶概述
7.2常用1602液晶操作实例
7.3常用12232液晶操作实例
7.4常用12864液晶操作实例
第8章I2C总线AT24C02芯片应用
8.1I2C总线概述
8.2单片机模拟I2C总线通信
8.3E2PROMAT24C02与单片机的通信实例
第9章基础运放电路专题
9.1运放概述及参数介绍
9.2反相放大器
9.3同相放大器
9.4电压跟随器
9.5加法器
9.6差分放大器
9.7微分器
9.8积分器
第3篇提高篇
第10章定时器/计数器应用提高
10.1方式0应用
10.2方式2应用
10.3方式3应用
10.452单片机定时器2介绍
10.5计数器应用
第11章串行口应用提高
11.1方式0应用
11.2方式2和方式3应用
11.3单片机双机通信
11.4单片机多机通信
第12章指针
12.1指针与指针变量
12.1.1内存单元、地址和指针
12.1.2指针变量的定义、赋值与引用
12.2指针变量的运算
12.3指针与数组
12.3.1指针与一维数组
12.3.2指针与多维数组
12.4指针与函数
12.4.1指针作为函数的参数
12.4.2指向函数的指针
12.4.3指针型函数
12.5指针与字符串
12.5.1字符串的表达形式
12.5.2字符指针作为函数参数
12.5.3使用字符指针与字符数组的区别
12.6指针数组与命令行参数
12.6.1指针数组的定义和使用
12.6.2指向指针的指针
12.6.3指针数组作为main()函数的命令行参数
12.7指针小结
12.7.1指针概念综述
12.7.2指针运算小结
12.7.3等价表达式
12.8C51中指针的使用
12.8.1指针变量的定义
12.8.2指针应用
第13章STC系列51单片机功能介绍
13.1单片机空闲与掉电模式应用
13.2“看门狗”概念及其应用
13.3用软件实现系统复位
13.4内部扩展RAM的应用
13.5扩展P4口的应用
13.6内部E2PROM的应用
13.7STC89系列单片机内部A/D应用
13.8STC12系列单片机内部A/D应用
13.9STC12系列单片机的PCA/PWM介绍
13.10STC12系列单片机的SPI接口介绍
13.11STC12系列单片机的“576MHz”超速运行
第4篇实战篇
第14章利用51单片机的定时器设计一个时钟
14.1如何从矩阵键盘中分解出独立按键
14.2原理图分析
14.3实例讲解
第15章使用DS12C887时钟芯片设计高精度时钟
15.1时钟芯片概述
15.2DS12C887时钟芯片介绍
15.3如何用TX-1C实验板扩展本实验
15.4原理图分析
15.5实例讲解
第16章使用DS18B20温度传感器设计温控系统
16.1温度传感器概述
16.2DS18B20温度传感器介绍
16.3实例讲解
第17章太阳能充/放电控制器
17.1控制器原理图分析
17.2控制器板上元件介绍
17.3实例讲解
第18章VC、VB(MSCOMM控件)与单片机通信实现温度显示
18.1VCMSCOMM控件与单片机通信实现温度显示
18.2VBMSCOMM控件与单片机通信实现温度显示
第5篇拓展篇
第19章使用Protell99绘制电路图全过程
19.1绘制电路板概述
19.2建立工程
19.3制作元件库
19.4添加封装及制作PCB封装库
19.5错误检查及生成PCB
19.6布线电气特性设置
19.7自动布线和手动布线
第20章ISD400x系列语音芯片应用
20.1ISD400x系列语音芯片介绍
20.2ISD400x系列语音芯片操作规则
20.3ISD400x系列语音芯片应用实现
第21章电机专题
21.1直流电机原理及应用
21.2步进电机原理及应用
21.3舵机原理及其应用
第22章常用元器件介绍
22.1二极管
22.2电容
22.3场效应管
22.4光耦
22.5蜂鸣器
22.6继电器
22.7自恢复保险
22.8瞬态电压抑制器
22.9晶闸管(可控硅)
22.10电荷泵
第23章直流稳压电源专题
23.1整流电路
23.2滤波电路
23.3稳压电路
23.4集成稳压模块的使用
23.5串联开关型稳压电源
第24章运放扩展专题
24.1简单低通滤波器
24.2“电流-电压”转换电路
24.3光电放大器
24.4精密电流源
24.5可调参考电压源
24.6复位稳定放大器
24.7模拟乘法器
24.8全波整流器和平均值滤波器
24.9正弦波振荡器
24.10三角波发生器
24.11自动跟踪对称电源
24.12可调实验电源
24.13运放相关术语表
附录A天祥电子开发实验板简介
A.1TX-1C51单片机开发板(配套详细视频教程)
A.2AVR单片机开发板(配套详细视频教程)
A.3PIC单片机开发板(配套详细视频教程)
A.4J-Link全功能ARM仿真器
A.5三星S3C44B0ARM7入门级开发板
A.6三星S3C44B0ARM7提高级开发板
A.7TX-51STAR51单片机开发板(配套详细视频教程)
参考文献

C. 单片机乘法指令计算步骤求解

……4Eh×5Dh = 1C56h 啊,你在草稿纸手算一下,或者直接计算器按就行。

十六进制乘法你不熟的话,可以先都转成十进制,用十进制乘法得出乘积,再转成十六进制。
4Eh = 78d,5Dh = 93d
78×93 = 7254d
7254d = 1C56h
好好学习天天向上

D. 32位单片机计算两个int16的数相乘和两个int32的数相乘,所花的周期一样吗

一般是一样的。


这个具体可以查一下芯片内核指令代码的手册,如果有硬件乘法指令的系统,16位运算与32位运算所用时间,一般是一样的。

楼上的忽略了32位机这个前提。一般在32位机上是会有硬件乘法指令或者是乘法器部件,是可以在单周期内计算32位乘法的。而16位的乘法,一般都是扩展成32位的乘法来实现,所以说时间一般来说是一样的,都是一个周期。

特殊的情况包括,

  1. 没有硬件乘法,使用移位加程序模拟乘法功能,32位的乘法时间可能会比16位乘多一倍,当然这还取决于乘法模拟算法的具体实现。

  2. 用32位实现16位乘法,可能需要对16位数进行额外的扩展调整,这时是16位的慢一点。一般在C语言中就是根据系统字长规定int的类型,所以在C语言中如果不考虑移植,多使用int可能会提高编译的效率,在32位机上最好使用32位的数据进行计算反而更快一些。

E. 怎样设计一个用ADE7755和用AT89S51的单片机设计出一个电能表

随着电力的需求越来越大,不同时间段用电量不均衡的现象日趋严重。为了合理地调控电力负荷和节约能源,电力公司已开始鼓励使用多费率电能表。传统的多费率电能表一般采用机械转盘式计量方式,计量精度随机械磨损而降低,时段设置单一,人工抄表劳动强度大,且偶有窃电情况发生等诸多弊端。本文给出基于AT89S52单片机一种新型多费率单相电能表设计,采用AD7755电能计量芯片,电能计量准确。该电能表具有分时段计量,液晶显示,自动回抄,时段设置灵活,时间校正及时,新颖的防窃电,功耗低的特点。并对该电能表实验测试数据进行性了误差分析,指出电能计量中减小与消除误差的方法。

1硬件电路设计

1.1总体结构

基于AT89S52单片机完成多费率单相电能表的设计,AT89S52有以下功能,8k字节Flash闪速存储器,三级加密程序存储器,256字节内部RAM,32个可编程I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路,两种低功耗电工作方式。是一个比较适合于以开关量信号输入检测的性价比较高的8位单片机。电能表硬件设计主要包括六大模块,电压和电流检测电能计量电路AD7755模块,串行存储与看门狗X25045电路模块,HT1621液晶显示电路模块,串行时钟S3530A电路模块,

RS485总线通讯电路模块,防窃电检测电路模块,总体结构如图1所示。

图1:系统总体结构框图

1.2电能计量

单相电能计量采用美国ADI公司的AD7755低功耗芯片实现。AD7755内部除了ADC和滤波、相乘电路外都采用了数字电路,有效的消除了尖脉冲等干扰信号,使得它在恶劣的环境条件下仍能保持极高的正确度和稳定性。对单相回路中的电压、电流信号采样,计算出功率并积分将其转换为电能脉冲输出,CPU对来自AD7755输出端CF的脉冲进行计量,计算出电能表的累计用电量。电能与脉冲的关系为:W=M/C,式中的W为电能,单位为千瓦时,M为脉冲累计个数,C为电表脉冲常数,选取C=1600,每千瓦时为1600个脉冲。

1.3RS485通讯MAX487芯片实现多费率电能表的RS485通讯控制

MAX487芯片具有RS485通讯协议,可以带下位机128个、传输间隔大于1km、传输速率达250kb/s。电能表通过RS485总线与用电治理计算机相连,每只电能表都有一个确定的唯一的八位十六进制的表号,初次安装,电工需要把用户信息与表号记录后输进用电治理计算机中,完成用户与治理计算机的连接。治理计算机采用广播式通讯方式下传时段设置与校时信息,此时不带有地址信息,而电能表中断接收;上位机采用呼唤地址的方式上传信息,即呼唤谁的地址,那只电能表便把信息及其校验码打包向上传送给用电治理计算机,实现电能回抄。MAX487的DE为发送器使能端,DE为1时发送器可以工作,DI为输进端,A、B为输出端。当DE为0时,停止发送输出端为高阻。RE为输进使能端,RE为0时答应接收器工作,A、B为输进端,RO为输出端;RE为1时,接收器被禁止,RO为高阻状态。因此,采用半双工通讯方式,把DE和RE相连然后接AT89S52的P1.4,通过AT89S52的P1.4引脚来控制收发工作状态。

1.4串行存储器

串行存储器采用美国XICOR公司的X25045低功耗芯片,它具备看门狗定时器WTD、电源电压监控和具有512字节的串行E2PROM存储器三种功能。WTD可以设置为200ms、600ms、1400ms喂狗定时间隔,软件编程写进X25045中。在程序正常运行期间,WTD在定时间隔内收到触发信号,确保程序正常运行,一端WTD在定时间隔内没有收到触发信号,X25045便通过RESET引脚输出一个高电平信号,触发电能表复位来防止程序跑飞。X25045作为串行存储芯片,512字节分别用于存储电能表编码,多费率时段设置,上月和当月分时段的峰、平、谷电量和总累计电量等信息,存储次数可改写十万次,数据可保存一百年,它与AT89S52可采用SPI协议总线接口相连。

1.5时钟电路

时钟电路采用S3530A芯片完成,它是一种支持I2C总线的低功耗时钟芯片,它按照CPU经RS485通讯接收校时的数据来设置时钟和日历,靠自身的振荡继续走时。在S3530A的Xin和Xout引脚之间跨接32.768kHz的晶体器振荡器。它通过两线式与CPU连接,SDA脚和SCL脚分别接AT89S52的P2.0和P2.1,并有两个中断报警引脚可设置为输出秒或分同步脉冲,向AT89S52提供周期为1秒的中断信号,单片机系统将根据该信号通过I2C通讯接口读取当前的时间,计算出该时刻所属的时段,实现多费率电能表的分时段计量电能。该时钟电路带有备用锂电池,正常工作时有电源Vcc供电,同时给3.6V锂电池充电;当出现停电时,自动切换锂电池为时钟电路供电,即使停电时钟走时也正确。

1.6液晶显示

采用HOLTEK公司HT1621的LCD显示驱动芯片,实现十六位LCD数字显示。HT1621是具有128段(32×4)内置存储器的LCD驱动器,它片内包括控制与计时电路、显示RAM、LCD驱动及偏置、监视定时器等,采用了48脚SSOP封装,具有体积小和功耗低的优点,非常适合于应用电能表中,其接口电路和外围电路简单,它和AT89S52之间采用串行接口,只需三根线。AT89S52的P2.4、P2.5、P2.6分别接到它的CS片选、WR写答应、DATA串行数据三个引脚上,来控制刷新显示RAM缓冲区。另外应用中,在VDD、VLCD间接一个20kΩ可调电阻,用来调节LCD显示对比度,调节电阻,使得VDD=5V,VLCD=4V对比度较好。

1.7防窃电检测等

记录电能表接线端子盖被人为打开的次数而分析是否窃电。电能表被安装好后将表壳打上铅封,用户不能私自打开电能表接线的表盖破坏铅封,否则属于窃电行为。因此我们采用霍尔传感器,检测接线端子盖是否被打开。假如接线端子盖被打开,AT89S52的P1.6引脚的电平变化,就检测到开盖一次,记录表的接线端子盖被人为打开和破环的次数,判定是否有窃电发生,当发现有窃电现象时,给出报警、断电并及时上传到上位治理计算机。实践证实该新奇的防窃电技术有效的防止窃电情况发生,效果较好。检测电路框图如图2所示。

图2:防窃电检测框图

掉电保护电路,用AT89S52的P1.7输进引脚检测掉电信号,当系统正常工作是P1.7位高电平,当忽然发生断电时,P1.7变成低电平,采用查询方式检测到P1.7的变为低电平后,将进进掉电保护程序。电源电路中有个大滤波电容1000uf/25v,当掉电后能维持系统十多秒的工作时间,确保电能表存储好重要数据。光电隔离电路,在系统中AD775的脉冲输出端,继电器控制端,RS485通讯端分别使用了4N35光电隔离器。通过光的耦合作用传递电信号,把干扰源和易受干扰的部分隔离开来,进步系统抗干扰的能力。

2软件程序设计

2.1软件程序资源分配

多费率单相电能表软件程序共包括初始化及主程序,X25045读写程序,RS485串行通讯处理程序,中断处理程序,定时器处理程序,HT1621显示控制程序,电能分时段计量与掉电处理程序,系统自检与软件抗干扰处理八大程序模块。系统的中断资源分配为INT0中断用于AD7755脉冲检测,INT1用于秒同步检测,定时器T0用于定时100ms,T1未使用,T2用于串行通讯程序波特率发生器,串行口中断设置为RS485异步通讯接收中断。

2.2程序模块的设计

电能表的工作过程主程序模块如图3所示,每次上电要进行初始化,初始化包括对AT89S52单片机定时器、串行口、中断等工作方式的设定,写进串行存储芯片X25045的控制字,串行时钟芯片S3530A控制字,串行液晶驱动芯片HT1621控制字。新电能表的初次工作要对X25045初始值设定,包括电能表表号的设置,时段的设置,时钟的设置,存储地址的分配等。本系统设置了三个时段,单片机每秒从时钟芯片S3530A中读取时钟值,然后根据串行存储芯片X25045中预先设置好的时段,分析该时刻属于哪个时段,根据相应的时段把电能存储AT89S52的RAM存储器中,然后电能每累计够1度便写进到X25045相应的地址中。16位液晶显示器轮流显示时段与电能信息。若有通讯请求将采用中断方式与上位机进行数据通讯。若停电,将执行掉电保护程序。其它程序模块流程图略。

图3:主程序流程图

测试结果

该电能表在淄博贝林电子有限公司进行了误差测试和运行试验,上位计算机完成用电治理时段设置,设置三个费率时段,第一时段00点00分点到06点30分,为谷电量时段,第二时段06点30点到22点30分,为峰电量时段,第三时段22点30点到24点00分,为平电量时段。费率时段设置由电力供电公司根据国家政策规定设定到计算机治理系统中,通过RS485串行通讯传送到电能表中,并存储于X25045中。每月峰、平、谷、累计电量存进电能表中,并打包传送到上位计算机治理系统,通讯波特率设为9600bit/s。用0.1级标准电子式电能表校验台作为标准表,该多费率电能表为被测表,贝林电子有限公司针对不同负荷的情况下进行测试,限于篇幅仅列出负荷为5KW时的实测数据如表1所示。测试结果表明该复费率电能表误差小于1%,属于1.0级标准。经实验得知减小电能计量误差方法,一是通过调节AD7755的匹配电阻调整到精确值;二是该匹配电阻阻值要求随温度变化阻值变化较小;三是在电能计量过程中,在时间段的切换时,计量电能的尾数部分不足0.01度的电能计进下一个时间段中,避免了不足0.01度的电能丢失而造成累计电量有误差。

表1:标准表与被测表丈量值符合5KW

结束语

多费率电能表根据不同的时段设置,实现电能分时计量,采用RS485串行通讯,实现电量自动回抄,实时校时。该电能表经淄博贝林电子有限公司生产表明,设计技术新奇,计量正确,走时精确,时段设置灵活,防窃电设计新奇,各项技术指标均达到国家多费率电能表的技术标准,具有广阔的应用远景。

本文作者创新点在于采用AD7755电能计量芯片计量正确;串行X25045存储灵活可靠,串行时钟S3530A走时精确,RS485总线传输可靠性高,防窃电新奇设计。采用I2C总线结构多费率单相电能表设计更加公道,具有性价比高的特点

阅读全文

与单片机实现模拟乘法器相关的资料

热点内容
gis服务器里文件如何处理 浏览:829
sec加密数字资产 浏览:930
winrar命令行压缩 浏览:790
java成员变量默认 浏览:491
解压神器喷泉视频 浏览:91
现代的语文书是哪里编译 浏览:108
知乎教孩子学编程 浏览:520
vivo加密的应用怎么解开 浏览:918
波形分析算法 浏览:528
php论坛实训报告 浏览:406
java日期字符串转换成日期 浏览:137
linuxsftp连接 浏览:936
光伏日发电量算法 浏览:127
小肚皮app怎么才有vip 浏览:618
php全角转换半角 浏览:929
java字符序列 浏览:541
杭州编译分布式存储区块链 浏览:577
材料压缩曲线 浏览:249
linux命令排序 浏览:151
手机热点加密为啥连接不上电脑 浏览:981