- 积分
- 3553
- 下载分
- 分
- 威望
- 点
- 原创币
- 点
- 下载
- 次
- 上传
- 次
- 注册时间
- 2014-11-13
- 精华
|
马上注册,获取阅读精华内容及下载权限
您需要 登录 才可以下载或查看,没有帐号?注册
x
(一)、测量原理
下面我们要利用淘汰的数字电度表芯,制作一个具有测量电功率和电度数的插排。早期的电子式电度表采用AD7755系列芯片,或类似的国产芯片。
下图是AD7755的功能框图,AD7755是一种高精度的电功率测量芯片,其内部的乘法器是数字型乘法器。它的工作原理是由分压器完成电压取样,电流通过锰铜片分流完成电流取样,取样后的电压、电流信号由乘法器转换为功率信号,经数字--频率变换后,它输出的脉冲信号可以直接驱动计数器的步进电机来显示电度数。V1P、V1N为电流传感器的模拟输入端,V2P、V2N为电压传感器的模拟输入端。ADE7755引脚F1和F2以较低频率形式输出有功功率平均值,能直接驱动机电式计度器或MCU接口。引脚CF以较高频率形式输出有功功率瞬时值,用于校验或与MCU接口。我们制作的插排就是利用CF经光电耦合器输出的电度脉冲进行计数来获得负载的功率和电度数。单片机的INT0接光耦输出端,每个电度脉冲来到时产生中断,中断程序中对电度脉冲数计数,够160个脉冲35h单元加1,35单元存电度数1/10位,36单元存电度数个位。中断程序中还要对2个脉冲之间进行定时,第1个脉冲来到,启动定时器,第二个脉冲再来时关闭定时器,这样就获得了一个脉冲周期所用的时间t存放到41H和42H单元。DDS67型单相电子式电能表1度电是1600个脉冲。那么1瓦*2250秒=1个脉冲,定时器0的定时时长为50毫秒,每50毫秒41H加1,42H是50ms计数高位,(42H,41H)*50是一个脉冲周期的时长(ms),2250/0.05=45000,所以用45000除以(42H,41H)的计数值就等于功率数(瓦)。最小量程45000除以65535=0.68瓦,需1.82小时完成,最大量程是45000/1=45kw,50毫秒钟完成。一般家用电器的功率都在几瓦到上千瓦,所以测量时间在几分钟内完成。开始测量时,每个脉冲到来时显示用电器的功率数,当脉冲达到160个以后就显示0.1度开始的电度数。
(二)单片机电路及电度表电路
插排显示的0070是我正在使用的微机实际消耗功率是70瓦。
(三)、电度表插排程序
ORG0000h ;
AJMPL1
ORG 0003h
AcallZD
ORG 000BH
AJMP CT
ORG 0023H
RETI
ORG 0030H
L1: MOVSP,#60H ;设堆栈指针
MOV A,#21H ;定时器1\0工作方式2,8位可重装,
MOVTMOD,A ;
MOV 8BH,#0F3H ;给定时器1赋值6M=FF,1200波特率
MOV8DH,#0F3H ;给定时器0赋值6M=FF,1200波特率
MOV TH0, #9EH ;定时50毫秒
MOV TL0, #58H
SETB 0BCH ;通信中断优先,IP中PS置1
MOVA,#93H ;允许串口和定时器0及INTO中断及总中断,禁止定时器1中断
MOVIE,A ;A8H
SETBIT0 ;INT0下降沿触发
MOV A,#50H;;设串行口模式1,允许接收。
MOVSCON,A ;送串行控制SCON
CLR REN
MOVA,#00H
MOVR2,#50D ;清数据区
MOV R0,#20H
QRAM: MOV @R0, A
INC R0
DJNZ R2, QRAM
DIS:MOV DPTR,#0700H
MOV A,35H
JZ DIS1
MOV R1, #35H ;够160个脉冲显示电度数
AJMP DIS2
DIS1: MOV R1,#30H
DIS2: MOV A,@R1
MOVC A, @A+DPTR
MOV P1,A
CLR P3.3
ACALL DELAY1
SETB p3.3
INC R1
MOV A, @R1
MOVC A,@A+DPTR
MOV P1,A
CLR P3.4
MOVA,R1
CJNEA,#36H,DIS4
CLR P1.0
DIS4: ACALLDELAY1
SETB p3.4
INCR1
MOVA, @R1
MOVC A,@A+DPTR
MOV P1,A
CLR P3.5
ACALL DELAY1
SETB p3.5
INCR1
MOVA, @R1
MOVC A,@A+DPTR
MOV P1,A
CLR P3.7
ACALL DELAY1
SETB p3.7
J6: AJMP DIS
ORG 0100h;定时器中断子程序
CT: MOV 8CH, #9EH
MOV 8AH, #58H ;BEH
PUSH 0D0H
PUSH 0E0H
PUSH 82H
PUSH 83H
INC41H ;50毫秒计数低2位41H,42H是50ms计数高位
MOV A,41H
CJNE A, #0FFH, DONE2
INC 42H
DONE2: MOV A, 2FH
INC A
MOV 2FH, A
CJNE A, #14H, DONE
MOV 2FH, #00H
MOV A,30H
INC A
MOV 30H,A
; MOV 41H,A
CJNE A, #0AH, DONE
MOV 30H, #00H
MOV A, 31H
INC A
MOV 31H, A
CJNE A, #0AH, DONE
MOV 31H, #00H
MOV A, 32H
INC A
MOV 32H, A
CJNE A, #0AH, DONE
MOV 32H,#00H
MOV A, 33H
INC A
MOV 33H, A
CJNE A, #0AH,DONE
MOV 33H, #00H
DONE: POP 83H
POP 82H
POP 0E0H
POP 0D0H
RETI
ORG 0200H
; INT0中断程序
ZD: MOV A,34H
INCA ;电度脉冲数加1
MOV 34H ,A
CJNE A,#0A0H,ZD1 ;够160个脉冲35h单元加1,35单元存电度数1/10位
MOV 34H, #00H
MOV A,35H
INC A
MOV 35H,A
CJNEA,#0AH,ZD1 ;够160个脉冲35h单元加1,36单元存电度数个位
MOV 35H,#00H
INC 36H
ZD1: MOVA,40H ;是第二个脉冲吗
XRL A,#00H
JZ DIS3
CLRTR0 ;第二个脉冲到,关闭定时器
MOV40H,#00H ;置标志
ACALL DIVD ;调用除法程序
ACALLIBTD ;调用二进制数转压缩的十进制数子程序
MOVA,r6 ;把压缩的十进制数送显示区
ANL A,#0FH
MOV 30H,A
MOV A,r6
ANL A,#0F0H
SWAP A
MOV 31H,A
MOV A,r5
ANL A,#0FH
MOV32H,A
MOV A,r5
ANL A,#0F0H
SWAP A
MOV 33H,A
AJMP FH
DIS3: MOV40H,#01H ;置标志
MOV 2FH,#00
MOV 30H,#00
MOV 31H,#00
MOV 32H,#00
MOV 33H,#00
MOV41H,#00 ;秒存储单元低位FF
MOV42H,#00 ;秒存储单元高位FF
SETBTR0 ;第一脉冲启动定时器计秒数
FH: RETI
org 0500h
;入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。
;出口信息:OV=0时,双字节商在R4、R5中,OV=1 时溢出。
;影响资源:PSW、A、B、R1~R7 堆栈需求: 2字节
DIVD: MOV R2,#00H
MOV R3,#00H
MOV R4,#57H
MOV R5,#0E4H
MOV R4,#0AFH ;45000
MOV R5,#0C8H
MOV R6,42H;50毫秒存储单元高位FF
MOV R7,41H;50毫秒存储单元低位FF
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
MOVR3,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
JB F0,DDIV2;ANL C,/F0 ;结果判断
JC DVD3
DDIV2: 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
IBTD: CLRA ;双字节二翻十子程序(R2R3)---(R4R5R6),结果为压缩BCD码
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,#10H
LOOP: CLR C
MOV A,R3
RLC A
MOV R3,A
MOVA,R2
RLC A
MOV R2,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R7,LOOP
RET
ORG 0700H
DB03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H,11H,0C1H,63H ;89ABCDEFP熄灭
DB85H,61H,71H,31H,0FFH,0FCH;"-"
DELAY: MOV R5, #0FFH
DEL: NOP
DJNZ R5,DEL
RET
DELAY1: MOV R6, #4H
DELA: ACALL DELAY
DJNZ R6,DELA
RET
DELAY2: MOV R6, #0FFH
DE: ACALLDELAY
DJNZ R6,DE
RET
END
来源:网络转载
|
|