?? 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 + -