📄 wxcs_31.asm
字号:
;----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 + -