?? 200.asm
字號(hào):
;有功無功一體表初稿
;地址分配 20H,21H,22H設(shè)為位標(biāo)志位區(qū),23H-2FH設(shè)為字節(jié)標(biāo)志位,54H-57H設(shè)為字節(jié)標(biāo)志,30H-43H為與上位機(jī)通信緩沖區(qū),
; 58H 59H 5AH為除法商暫存區(qū) 5AH-7FH為暫時(shí)空區(qū) 26H.27H.28H為數(shù)據(jù)讀出再次緩沖區(qū),即計(jì)算區(qū)((2EH,2FH,都為空 ))
;4CH,4DH,4EH,4FH為SPI數(shù)據(jù)寫入緩沖區(qū),50H,51H,52H,53H,為SPI數(shù)據(jù)讀出緩沖區(qū)
;((4AH,4BH暫時(shí)空的 )), 44H,45H,46H,47H,48H,49H數(shù)據(jù)暫存器(與I2C總線通信)
;存儲(chǔ)器內(nèi)空間分配:0010H-0013H為有功電能,0014H-0017H為無功電能,0020H-0023H為有功電能初始值,0024H-0027H為
; 無功電能初始值,0018H-001DH為表地址,0028H-002BH為掉電保護(hù)存儲(chǔ)數(shù)據(jù)
;20H
RESET_BZ BIT 01H
SIG_BZ BIT 02H
TXDA_BZ BIT 03H
TXST_BZ BIT 04H
ACK_BZ BIT 05H
JYOK_BZ BIT 06H
TXOV_BZ BIT 07H
JYOK1_BZ BIT 08H ;非本表地址無應(yīng)答標(biāo)志位
JYOK2_BZ BIT 09H ;非廣播地址標(biāo)志位
TXONE EQU 23H
CJSJ_CS EQU 24H
TXLJSH_CS EQU 25H
MUHC EQU 26H
;MUHC+1 EQU 27H
;MUHC+2 EQU 28H
WUGONG_CS EQU 54H
YOUGONG_CS EQU 55H
YGJISHU_CS EQU 56H
WGJISHU_CS EQU 57H
OO EQU 58H
QQ EQU 59H
UU EQU 5AH
SLA EQU 0A0H ;2404存儲(chǔ)器的入口地址
MTRD EQU 29H
NUMBYTE EQU 2AH
SUBAH EQU 2BH
SUBAL EQU 2CH
RTEMP_CS EQU 2DH
JSCD_CS EQU 2EH
FEJC_CS EQU 2FH
SPI_CS BIT P1.0
SPI_CK BIT P1.1
SPI_DI BIT P1.2
SPI_DO BIT P1.3
SCL BIT P1.4
SDA BIT P1.5
TXC BIT P1.7
MT0 BIT P2.2
MT1 BIT P2.3
MT2 BIT P2.0
MT3 BIT P2.1
ORG 0000H
AJMP MAIN ;主要完成初始化,復(fù)位,存儲(chǔ)器存數(shù),計(jì)度器動(dòng)作
NOP
ORG 0003H
JMP XIAOBIAO ;校表參數(shù)設(shè)置 外部中斷0 INT0
DB 0,0,0,0,0
ORG 000BH
JMP QUDIANLIANG ;定時(shí)到ATT7022里去取電量 定時(shí)中斷0
DB 0,0,0,0,0
ORG 0013H
JMP DIAODIAN ;掉電保護(hù),應(yīng)設(shè)為最高級(jí)中斷
DB 0,0,0,0,0,0
DB 0,0,0,0,0,0,0
ORG 0023H
JMP CHUANKOU ;串行口通信,接受數(shù)據(jù)
MAIN:
MOV SP,#76H ;把堆棧放到哪???????
MOV P1,#0f6H ;P1的初始狀態(tài)再定 ?????
MOV P2,#0ffH ;P2的初始狀態(tài)再定 ?????
;LCALL MS100
;LCALL MS100
;LCALL MS100
;LCALL MS100
;LCALL MS100
MOV R0,#08H ;清零
QINGLING:
MOV @R0,#00H
INC R0
CJNE R0,#00H,QINGLING
SHANGDIAN:
MOV MTRD,#54H
MOV SUBAH,#00H
MOV SUBAL,#28H
MOV NUMBYTE ,#04H
LCALL IRDNBYTE ;上電后把無功常數(shù),有功常數(shù)再取回來,要取四個(gè)
JNB ACK_BZ,SHANGDIAN
CLR ACK_BZ
LCALL RESET7022 ;校表參數(shù)寫入
LCALL XBZHUCHENGXU
MOV TXONE,#30H ;通訊指針首地址
MOV SCON,#0D0H ;串口方式3,允許接收
MOV PCON,#00H ;
MOV TMOD,#21H ;定時(shí)器T0為方式1,T1為方式2
MOV TH1,#0F8H ;波特率為BPS 1200,3.589M
MOV TL1,#0F8H
MOV TL0,#01H ;定時(shí)器65毫秒(待定)
MOV TH0,#01H
CLR IT0 ;負(fù)邊沿觸發(fā)
SETB TR0 ;啟T0計(jì)數(shù)
SETB TR1 ;啟T1計(jì)數(shù)
SETB ET0 ;開T0中斷
SETB EX0 ;開INT0中斷
SETB EX1 ;開INT1中斷
SETB PX1 ;設(shè)INT1為高優(yōu)先級(jí)
SETB ES ;開串行口中斷
SETB EA ;開所有中斷
KAISHI:
JB RESET_BZ,BUFUWEI ;判斷是否剛上電或還沒復(fù)位,如果沒有就復(fù)位
FUWEI:
LCALL RESET7022 ;復(fù)位
BUFUWEI:
JNB SIG_BZ,KAISHI1 ;是否已經(jīng)完成了INT0中斷,是否開始校表?
XB:
LCALL XBZHUCHENGXU ;進(jìn)入真正的校表程序
CLR SIG_BZ
KAISHI1:
LCALL JDQDONGZUO
CLR TXC
NOP
NOP
JNB TXST_BZ,JIESHU ;收到數(shù)據(jù)了么?
JNB TXDA_BZ,JIESHU ;數(shù)據(jù)接收完了么?
CLR ES
SETB TXC
LCALL TXACK ;通訊應(yīng)答
CLR TXDA_BZ
CLR TXST_BZ
MOV FEJC_CS,#00H
MOV R0,#30H ;清零
MOV R2,#14H ;20個(gè)字節(jié)
JIESHU2:
MOV @R0,#00H
INC R0
DJNZ R2,JIESHU2
MOV TXONE,#30H
MOV CJSJ_CS,#00H
CLR TXC
SETB ES
JMP JIESHU1
JIESHU:JNB TXOV_BZ,JIESHU1 ;如果數(shù)據(jù)還沒接受完,就看通信超時(shí)了么?
NOP
NOP
MOV R0,#30H ;清零
MOV R2,#14H ;20個(gè)字節(jié)
JIESHU3:
MOV @R0,#00H
INC R0
DJNZ R2,JIESHU3
MOV TXONE,#30H
MOV CJSJ_CS,#00H
CLR TXC
clr TXDA_BZ
CLR TXST_BZ
CLR TXOV_BZ
SETB ES
;SETB REN
; NOP
; NOP
JIESHU1:LJMP KAISHI1
NOP
NOP
LJMP ERR
;*****************************************************************************************************
;復(fù)位子程序
RESET7022:
SETB RESET_BZ
CLR P2.7
MOV R7,#20H
DELAY1:NOP
DJNZ R7,DELAY1
SETB P2.7
MOV R7,#0FFH
DELAY2:NOP
DJNZ R7,DELAY2
RET
;************************************************************************************************************
;校表程序,向7022輸入校表數(shù)據(jù)
XBZHUCHENGXU:
MOV 4CH,#80H ;寫起始校表命令字,任意三個(gè)字節(jié)寫到校表寄存器00H里
MOV 4DH,#00H
MOV 4EH,#00H
MOV 4FH,#00H
LCALL WRITE_SPI ;寫命令
MOV 4CH,#0A0H ;寫高頻脈沖輸出參數(shù)到校表寄存器20H(命令0A0H)
MOV 4DH,#00H
MOV 4EH,#00H
MOV 4FH,#89H ;三個(gè)字節(jié)數(shù)據(jù)根據(jù)公式計(jì)算出來
LCALL WRITE_SPI
MOV 4CH,#9FH
MOV 4DH,#00H
MOV 4EH,#08H
MOV 4FH,#7EH
LCALL WRITE_SPI ;寫啟動(dòng)電流
MOV 4CH,#9EH
MOV 4DH,#02H
MOV 4EH,#0E7H
MOV 4FH,#2EH
LCALL WRITE_SPI ;寫比差分段補(bǔ)償區(qū)域設(shè)置 在35%
MOV 4CH,#82H
MOV 4DH,#0EH
MOV 4EH,#83H
MOV 4FH,#0E4H
LCALL WRITE_SPI ;寫相位補(bǔ)償區(qū)域設(shè)置1 區(qū)域在175%
MOV 4CH,#83H
MOV 4DH,#06H
MOV 4EH,#38H
MOV 4FH,#86H
LCALL WRITE_SPI ;寫相位補(bǔ)償區(qū)域設(shè)置2 區(qū)域在75%
MOV 4CH,#84H
MOV 4DH,#01H
MOV 4EH,#3EH
MOV 4FH,#81H
LCALL WRITE_SPI ;寫相位補(bǔ)償區(qū)域設(shè)置3 區(qū)域在15%
MOV 4CH,#85H
MOV 4DH,#00H
MOV 4EH,#0A9H
MOV 4FH,#0DEH
LCALL WRITE_SPI ;寫相位補(bǔ)償區(qū)域設(shè)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -