⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wxcs_31.asm

📁 校准多功能电能表的基本误差和规约规定的其他多功能试验项目。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;----2007.9.7 modify 发送数据错误
;----对接收到的控制命令都增加了校验码处理这样做的效果是凡是处理的命令都是
;----正确命令但是回漏掉一些命令根据这样一个实际情况又增加了工作状态回送
;----电源主程序根据小显示的工作状态进行判断小显示和主程序是否在一个状态
;----如果不是在一个状态则再发送一次控制命令
;----此程序缺点是没有对所有命令进行握手只是对其中的一部分进行了握手判断
;----小显示RS485通讯可靠性极低从目前使用情况看出现误码率非常高必须增加和电源的握手
;----2007.8.28 处理小显示死机问题(没有解决) 增加了串口初始化功能
;----2007.6.7  RS485通讯程序接收处理增加命令头判断
;----2007.5.28 修改累计脉冲试验程序处理该试验完成后还能控制到AS108造成该表位电压断不掉脉冲一直累计
;-----2006.10.9增加校验指示灯  P3.6控制
;-----增加切换电压表尾控制信号 P0.4=1 电压端子接入1号接线柱 P0.4=0电压端子接入3号接线柱 (用于重庆中试单相台)
;2006.5.25  适用于校验台和耐压台 SH5.948.4059 SH5.948.4061
;2006.3.8 添加耐压结果回送
;-------增加累积脉冲试验可以控制
;---此程序不适用于威胜台子
;--2005-12-14 add 4059被校表脉冲输出类型选择
;-----2005-10-18 add 功耗测试三相三线切换控制
;-----增加一路标准表高/低频脉冲选择
;---GP:000 光电头 GP:001 电子脉冲 GP:002 标准表脉冲
;----2004-10-28 ADD 被校表脉冲波形测试功能
;-------2004-6-28 ADD 威胜电子脉冲切换信号P0.0=1 有功P0.0=0无功
;-------2003-12-29 add 功耗测试程序
;2003-12-29 add 误差位数提高到4位(pc)
;-------2003-9-29 加通讯命令保护
;2001年5月29日,对斑分前后方
;2001,12,30前沿对斑,后沿开始记数,小显示前面显示圈数,后面显示表号
;单相多表位误差显示头CPU程序
;CPU类型:AT89C52
;显示用智能芯片   HD7279A   2003-1-18
;硬件资源
;2002.12.12 控制220V 继电器信号低有效
;2002.12.12 控制220V 108信号低有效
;RXD,TXD用于9600或19200串行通讯
;中断一INT0用于光电头中断
;中断二INT1用于按键中断
;计数器一T0用于功率脉冲计数
;计数器二T1用于串行通讯用及定时器(按键定时)用
;T2 用于有功无功电子脉冲输入或盘转数输入
;2002.12.08增加校高频,软件分频系数1~~~65535,硬件分频系数1~~~100;
;2002.12.18对斑时继电器和As108同时导通
;P1.0用于光电头复位
;P1.1用于蜂鸣器控制端
;P1.3电流短路继电器控制
;P1.5电压断路继电器控制
;P1.6显示164数据端
;P1.7显示164时钟端
;内部RAM分配
;00H-07H 常态工作R0~R7区
;08-0FH 串口中断R0~R7区
;10-17H 光电头中断R0~R7区
;18-1F常量存放区
;20-24H标志位区
;24-3FH变量存放区
;40-5FH工作内存区
;60-7FH堆栈区
;p1.2表号高位
;p1.3,p1.4,p1.5,p1.6,p1.7表号低位
;DS80C320 special bits
tf2         bit   0cfh
tr2         bit   0cah
exf2        bit   0ceh
exen2       bit   0cbh
wdtrst      equ   0a6h
;exf2    bit     t2con.6
;tf2     bit     t2con.7
;tr2     bit     t2con.2
;exen2   bit     t2con.3
;T2MOD   EQU     0C9H
;T2CON   EQU     0C8H

NyRetn  bit     P0.4        ;耐压结果
LEDCS   BIT     P0.6
LEDRST  BIT     P0.7
LEDD	BIT	    P2.4
LEDC	BIT	    p2.5
btuk2   bit     p2.1
btuk1   bit     p2.0
UOFF	BIT	    P2.1        ;uk2
as108   bit     p2.0        ;uk1
;------2007-4-10------
;as108B	bit	p2.2
;UOFFB	BIT	P2.3
;AS108C	BIT	P0.4
;UOFFC	BIT	P0.5
;---------END---------

BRSWE	BIT	    P1.6
GRES	BIT	    p3.5
BEEP	BIT	    P0.5
IOFF	BIT	    P2.3        ;ik2
IK1     BIT     P2.2
DGDT	BIT	    P3.2        ;INT0
DKEY	BIT	    P3.3        ;INT1
DGDT2   BIT     P1.0        ;T2INT
BTK0    BIT     P2.6        ;选择有功、无功脉冲 pulse chose  有、无功切换
BTK1    BIT     P2.7
BTK2    BIT     P0.1        ;选择时钟脉冲
BTK3    BIT     P0.3
btygwg  bit     p0.0        ;有功、无功输出信号
btp3p4_power bit P0.2       ;功耗试验P3模式控制
;20H
cBFH	BIT	    00h	        ;正负号标志,0正号,1负数
BKTIM	BIT	    cbfh+1	     ;按键按下延时标志
BKYS	BIT	    bktim+1	     ;按键松开延时标志
BGDT	BIT	    bkys+1	     ;接收光电头脉冲标志
BSGB	BIT	    bGDT+1       ;选择挂表标设置志位,1:表示要求设置,0表示已设置
BFIRST	BIT	    bsgb+1	     ;复位或误差清零后置位
BGET	BIT	    bfirst+1     ;接收到串口指令
FINDHB	BIT	    bget+1	     ;黑斑出现标志
;21h
GBBZ	BIT	    findhb+1     ;挂表选择,1表示挂表,0:不挂表
BTMG	BIT	    gbbz+1	     ;光电头对光延时标志
BTMB	BIT	    btmg+1	     ;BEEP开延时标志
BKEYM	BIT	    bTMB+1	     ;按键消陡动延时
SSHB	BIT	    bkeym+1      ;对斑时收到黑斑标志
BREF	BIT	    sshb+1	     ;数据刷新标志
BTIK1	BIT	    bref+1	     ; 控制IK1延时信号
BSEND	BIT	    bTIK1+1	     ;发送到结束符标志
;22h
bthbh	bit	    bsend+1	     ;黑斑对在右前方
btstrsy bit     BTHBH+1      ;失压开始标志
btpusch bit     btstrsy+1    ;脉冲选择 0:光电头脉冲 1:电子脉冲
BTJDQ   bit     btpusch+1    ;220V继电器状态 1:继电器闭合延时 0:继电器断开延时
BT108	BIT	    BTJDQ+1	     ;220VAS108状态  1:AS108闭合延时  0:AS108 断开延时
btZZend bit     bt108+1      ;走字结束标志,防止表连续抖动
btIK2   bit     btZZend+1    ;控制IK2延时信号
bbpen   bit     btIK2+1
;23h
btstep1 bit     23h.0
btstep2 bit     btstep1+1
btstep3 bit     btstep2+1
btstep4 bit     btstep3+1
btstep5 bit     btstep4+1
BTRST   BIT     BTSTEP5+1     ;复位显示芯片标志
;btcssy  bit     btstep5+1    ;计算常数
btmcbx  bit     btrst+1       ;只检测一次脉冲高电平
btMcYz  bit     btmcbx+1      ;已预置走字脉冲
;24h
Receive_End_Flag      bit   24h.0
Receive_Enable_Flag   bit   24h.1
;BTJDQB	BIT	24h.2
;BTJDQC	BIT	24h.3
;BT108B	BIT	24h.4
;BT108C	BIT	24h.5
;-----------------------
ZZcs    equ     10h          ;走字圈数        2 bytes
ZZcsTp  equ     ZZcs+3       ;显示走字圈数    2 bytes
ZZpw    equ     ZZcsTp+3     ;走字电能        2 bytes
TMC	    EQU	    ZZpw+3       ;
TMD	    EQU	    TMC+1
TME     EQU     TMD+1
HBTML	EQU	    tme+1
HBTM	EQU	    HBTML+1
TMG	    EQU	    HBTM+1	     ;光电头对光延时计数器
TMB	    EQU	    TMG+1	     ;蜂鸣器延时计数器
imBuf0  EQU     25H          ;16 bytes
imBuf1  EQU     imBuf0+1     ;20 bytes temp buffer
imBuf2  EQU     imBuf0+2
imBuf3  EQU     imBuf0+3
imBuf4  EQU     imBuf0+4
imBuf5  EQU     imBuf0+5
imBuf6  EQU     imBuf0+6
imBuf7  EQU     imBuf0+7
imBuf8  EQU     imBuf0+8
imBuf9  EQU     imBuf0+9
imBufa  EQU     imBuf0+0AH
imBufb  EQU     imBuf0+0BH
imBufc  EQU     imBuf0+0CH
imBufd  EQU     imBuf0+0DH
imBufe  EQU     imBuf0+0EH
imBuff  EQU     imBuf0+0FH
IMBUF10 EQU     IMBUFF+1
imbuf11 equ     imbuf10+1
imbuf12 equ     imbuf11+1
imbuf13 equ     imbuf12+1
T0AD1	EQU	    imbuF13+1      ;T0计数器溢出计数器
T0AD2   EQU     T0AD1+1
ADBH	EQU	    T0AD2+1	      ;表号存放地址
BNNL	EQU	    ADBH+1	      ;校表圈数存放地址(二位BCD),当前值
BNSL	EQU	    BNNL+1	      ;校表圈数存放地址(二位BCD),设定值
MODE	EQU	    BNSL+1	      ;工作模式存放单元
			      ;0:计算误差
			      ;1:不挂表
			      ;2:对黑斑
			      ;3:监视光电头信号
ADXS	EQU	    MODE+1        ;
ADXS1	EQU	    ADXS+1        ;圈数
ADXS2	EQU	    ADXS1+1       ;误差
ADXS3	EQU	    ADXS2+1
ADXS4	EQU	    ADXS3+1
ADXS5	EQU	    ADXS4+1
OLDD0	EQU	    adxs5+1       ;3AH-3CH 上次T0计数值(三位二进制)
OLDD1	EQU	    OLDD0+1
OLDD2	EQU	    OLDD1+1
OLDD3   EQU     OLDD2+1
NEWD0	EQU	    OLDD3+1	      ;3DH-3FH 本次标准电能脉冲值(四位二进制)
NEWD1	EQU	    NEWD0+1
NEWD2	EQU	    NEWD1+1
NEWD3   EQU     NEWD2+1
TMGH	EQU	    newd3+1
TMBH	EQU	    tmgh+1
SNdpnt	EQU	    tmbh+1        ;发送指针
RCVpnt  EQU     SNDpnt+1      ;接收指针
LBCS	EQU	    RCVpnt+1      ;标准值长度
BCS	    EQU	    lbcs+1	      ;标准脉冲数低位存放首址(四位二进制)
BCS1	EQU	    bcs+1
BCS2	EQU	    bcs1+1
BCS3	EQU	    bcs2+1
BCS4	EQU	    bcs3+1
BCS5	EQU	    bcs4+1
BCS6    EQU     BCS5+1
imsyctm equ     bcs6+1
sy      equ     imsyctm+1
const1  equ     sy+1            ;meter   const    hex code  four bytes
const2  equ     const1+1
const3  equ     const2+1
const4  equ     const3+1
pwcnt1  equ     const4+1         ;power   conter   four  number
pwcnt2  equ     pwcnt1+1
pwcnt3  equ     pwcnt2+1
pwcnt4  equ     pwcnt3+1
CmpCirn equ     pwcnt4+1       ;计算盘转误差设定圈数 one bytes
Dscmpcn equ     CmpCirn+1      ;计算盘转误差当前圈数 one bytes
PZBZ    equ     DsCmpCn+1      ;盘转比值     one byte
adbhl   equ     PZBZ+1
adbhh   equ     adbhl+1
OLDPZS  EQU     ADBHH+1        ;上次盘转数
NEWPZS  EQU     OLDPZS+2       ;盘转数   two bytes
DIVR    EQU     NEWPZS+2       ;分频系数
ZZPlsN  equ     DIVR+2         ;走字脉冲数
TMKL	EQU	    ZZPlsN+4       ;按键延时计数器
TMKH	EQU	    TMKL+1
im5ms   equ     tmkh+1         ;5ms 定时器
imcscnt equ     im5ms+1        ;常数测试记数值
imcscnt1  equ   imcscnt+1
im1ms    equ    imcscnt1+1     ;1ms timer
im1msl   equ    im1ms+1
im1msh   equ    im1msl+1
imtype   equ    im1msh+1        ;save type
imNyPcnt equ    imtype+1       ;耐压状态下脉冲计数超过10 个退出耐压状态  1byte
imNyRlt  equ    imNyPcnt+1     ;耐压结果
ims0tml  equ    imNyRlt+1      ;串口初始化定时器
ims0tmh  equ    ims0tml+1
Senddata_tmp    equ  ims0tmh+1    ;保存临时发送数据
imstep  equ     23h
rcvbuf  equ     80h             ;receive buffer 32 bytes
sndbuf  equ     0a0h            ;send    buffer 32 bytes
stack   equ     0c0h
;--------------
;60H-6FH 串行口接收缓冲区
	  ORG   00H
	ljmp	MAIN

	  ORG	03H
	ljmp	GDT                ;光电头中断

	  ORG	0BH
    ljmp    t0int

	  ORG	13H
	ljmp	KEY

	  ORG	1BH
	CLR	ET1
	RETI

	  ORG	23H
	ljmp	RS232

      ORG   2BH
    LJMP    T2INT

Main:   
        MOV	    sp,#stack
        MOV	    TL1,#0FDH           ;9600 BAUD RATE
        MOV	    TH1,#0FDH
        mov     th2,#0ffh
        mov     tl2,#0ffh
        MOV	    TMOD,#00100101B
        MOV	    SCON,#01010000B
	    MOV	    TCON,#01010101B
        MOV     T2CON,#00000111B    ;初始化为捕捉模式  EXEN2禁能
        MOV     T2MOD,#00000000B    ;COUNT UP
        MOV     TH2,#0ffH
        MOV     TL2,#0FFH
        MOV     IE,#11110111B
        MOV     IP,#11010000B       ;T2 highest priority
	    MOV     P1,#11111111B
        MOV     R0,#0FFH
        CLR     A

M000:   
        MOV     @R0,A               ;Clear inner ram
        DJNZ    R0,M000
        CLR     P2.0
        ;clr     beep
        clr     brswe               ;钳制RS485发送
        clr     ik1
        mov     p0,#01111111B
        MOV     P2,#00001011B
        orl     p1,#11111100b
        DJNZ	r2,$
	    DJNZ	r2,$
	    DJNZ	r2,$
        MOV     P0,#0FFH
	    MOV	    A,P1
        cpl     a
        MOV     C,ACC.7
        MOV     ACC.6,C
        ANL	    A,#01111110B
	    RR	    A
	    INC	    A
	    MOV	    B,#10
	    DIV	    AB
        mov     adbhl,b
        mov     adbhh,a
	    swap	a
	    orl	    a,b
	    MOV	    ADBH,a
	    MOV	    P1,#11111111B
	    clr     brswe
        clr     p3.6
        mov     r2,#40

m001:   
        mov     r3,#0ffh
        djnz    r3,$
        djnz    r2,m001
        ;clr     beep
        clr     ik1
        SETB	IOFF
        MOV     R5,#1FH

CL2:
        DJNZ    R6,$
	    DJNZ    R5,CL2

CL:	
        lcall	CLS
	    MOV	    BCS,#00H         ;标准脉冲数10000000000
	    MOV	    BCS1,#0E4H
	    MOV     BCS2,#0bH	  
	    MOV	    BCS3,#54h
	    MOV	    BCS4,#02h
	    MOV	    BCS5,#00H
        MOV     BCS6,#00H
	    MOV	    LBCS,#05H
;       MOV     BZCSN,#02H
;       MOV     IMBZC1,#10H
;       MOV     IMBZC2,#27H
        mov     const1,#10h      ;被校表常数默认3600
        mov     const2,#0eh
        mov     const3,#00h
        mov     ZZPlsN,#88h      ;走字脉冲数,默认5000
        mov     ZZPlsN+1,#13h
        mov     ZZPlsN+2,#00h      ;5000
        mov     ZZPlsN+3,#00h
        MOV     SY,#01H            ;失压方案默认1
        MOV     PZBZ,#03H          ;盘转比值默认3
        mov     CmpCirn,#05h       ;计算盘转误差设定圈数,默认5
        mov     DScmpCn,#05h       ;计算盘转误差当前圈数,默认5
        MOV	    BNNL,#01           ;校表圈数当前值,默认1
	    MOV	    BNSL,#01           ;校表圈数设定值,默认1
	    MOV	    MODE,#00H          ;工作模式,默认0计算误差
	    MOV	    TMG,#0FFH          ;光电头对光延时计数器,默认值33023
	    MOV	    TMGH,#80H
        mov     SNDpnt,#sndbuf     ;发送指针,指向发送缓冲区首地址
        mov     RCVpnt,#rcvbuf     ;接收指针,指向接收缓冲区首地址
        mov     imNyPcnt,#00h      ;耐压状态下脉冲计数
        mov     imNyRlt,#00h       ;耐压结果
        setb    GBBZ               ;挂表标志选择挂表
        SETB    BSGB               ;表示要求设置
        SETB    BTHBH              ;对黑斑标志,黑斑对在右前方
        SETB    BTIK1              ;控制IK1延时信号
        SETB	BTMG               ;光电头对光延时标志
	;SETB	BTMB
	    mov	    TMBH,#10h
        mov     ZZcs,#68h          ;走字圈数,默认360
        mov     ZZCs+1,#01h        ;
        mov     ZZCs+2,#00h
        mov     ZZcstp,#68h        ;显示走字圈数,默认360
        mov     zzcstp+1,#01h
        mov     zzcstp+2,#00h
        mov     zzpw,#01H
        mov     zzpw+1,#80H        ;0.1
        mov     zzpw+2,#0FH        ;空
        MOV     DIVR,#0ffH         ;分频系数初始化为1
        MOV     DIVR+1,#0ffH       ;溢出率
        clr     btZZend            ;走字结束标志
        CLR     BTPUSCH
        clr     btMcYz
        clr     btK0
        CLR     BTK1
;        setb    BTK2
 ;       SETB    BTK3
        SETB    btk2        ;P0.1              ;GP:001   电子脉冲
        CLR     btk3        ;P0.3
        SETB    btygwg      ;选择共低
        SETB    Receive_End_Flag           ;收到命令结束符
        clr     uoff              ;低有效
        setb    as108             ;低有效
        setb    btjdq             ;吸合延时
        clr     bt108             ;断开延时
        CLR     BTRST
        LCALL   XS_RESET
;---------主循环
JOB:  	
        JNB     BTRST,JOB0011
;--------复位显示芯片
        CLR     BTRST
        CLR     LEDRST           ;复位HD7279A芯片(低电平复位)
        LCALL   LONG_DELAY       ;80US
        SETB    LEDRST           ;HD7279A复位引脚置高电平
        LCALL   DELAY_30MS
        LCALL   XS_RESET
JOB0011:
        DJNZ	TMC,JOB0
        setb    et2
        setb    ex0
	    DJNZ	TMD,JOB01      ;tmd,tmc定时器控制继电器
        clr     exf2
        clr     exen2
        mov     a,mode
        jz      job04
        setb    bref            ;数据再送一次
;---------2007.9.7 add start
        mov     r0,#sndbuf+3
        mov     a,SendData_tmp
        mov     @r0,a
        
;--------2007.9.7 add  end         
job04:  
        lcall   dis             ;显示再刷新一次
        jnb     btjdq,job00
        clr     uoff            ;继电器断开  电压接入
        ljmp    job01
job00:  setb    uoff            ;继电器吸合  电压没接入
	;--------光隔延时控制--------
JOB01:  DJNZ    TME,JOB0
        jnb     bt108,job02
        clr     as108           ;108吸合
        ljmp    job0
job02:  setb    as108            ;  108断开
;***************
JOB0:
;--------增加串口初始化处理程序
        mov     a,ims0tml
        add     a,#01
        mov     ims0tml,a
        mov     a,ims0tmh
        addc    a,#0
        mov     ims0tmh,a
        cjne    a,#0eah,$+3
        jc      job0000
;------定时器大于59904乘以主循环一次循环时间
        mov     ims0tml,#0
        mov     ims0tmh,#0
        clr     ea

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -