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

📄 zhuyin从控测试程序1.asm

📁 一卡通源码程序是我公司的一卡通源码程序,绝对难得
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;********************************************
;名称:供电系统从控制器源程序(复费率+恶意负载识别)
;日期:2005-03-01
;描述:供电系统下位机源程序
;      使用软件来识别恶意负载
;作者:red_swords
;********************************************


;*******************************************************************************
;恶意负载识别参数设置
;PAR1——判断功率是否下降参数
;        FFH—— FEH —— FDH  —— FCH  —— FBH  ——
;         0W—— 50W —— 100W —— 150W —— 200W ——
;         例:当PAR1=FCH,表示当功率下降超过150W时,视功率下降
;
;PAR2——判断是否置位功率下降标志
;         1  ——   2  ——  3   ——  4   ——  5   ——
;        50W —— 100W —— 150W —— 200W —— 250W ——
;        例:当PAR2=3时,表示当功率下降,且功率下降到 <=150W,不设置功率下降标志
;                                                      >150W,设置功率下降标志
;********************************************************************************

;********************************************************************************
;修改条例:
;2005-05-23:在定时关的时候,判断此可表状态是否为永久关闭
;2005-07-14:增加分时限制电流功能
;2006-04-01:恶意负载在一天内连续跳电3次,则不在自动来电,需要人工干预
;********************************************************************************
PAR1            EQU    0FCH
PAR2            EQU    3

;CPU引脚定义
LINE_ADDR       BIT    p3.7     ;读取本机地址
LINE_BEEP       BIT    p3.6     ;beep使能

SDA             BIT    p3.5     ;
SCL             BIT    p3.4     ;

WDI             BIT    p3.3     ;watchdog复位
RS485_TR        BIT    p3.2     ;485发送/接收使能

LINE_LED        BIT    p1.6     ;指示灯

;-------------------继电器输出控制-----------------
RY_S0		BIT	P1.0
RY_S1		BIT	P1.1
RY_S2		BIT	P1.2             ;8位地址锁存译码器输入

RY_D		BIT	P1.3             ;

MRY_O0		BIT	P2.0
MRY_C0		BIT	P2.1
MRY_O1		BIT	P2.4
MRY_C1		BIT	P2.5
SRY_O0		BIT	P2.2
SRY_C0		BIT	P2.3
SRY_O1		BIT	P2.6
SRY_C1		BIT	P2.7             ;8路259使能信号

;---------------脉冲和恶意负载识别输入控制-----------------74LS166
CLOCK 		BIT	P1.4          ;时钟
CLK_INH		BIT	P1.5          ;时钟抑制

MC_SL0          BIT     P0.0          ;(读电表脉冲)shift/load
MC_QH0          BIT     P0.1          ;(读电表脉冲)数据线
LC_SL0          BIT     P0.2          ;(读恶意负载)shift/load
LC_QH0          BIT     P0.3          ;(读恶意负载)数据线

MC_SL1          BIT     P0.4          ;(读电表脉冲)shift/load
MC_QH1          BIT     P0.5          ;(读电表脉冲)数据线
LC_SL1          BIT     P0.6          ;(读恶意负载)shift/load
LC_QH1          BIT     P0.7          ;(读恶意负载)数据线

;---------------内部512字节RAM分配---------
;20h
ERR_RATE        BIT     00h           ;费率表出错标志
FLAG_REQUE      BIT     01h           ;系统信息请求标志
FLAG_START      BIT     02h           ;系统开始运行标志
ERR_EE          BIT     03h           ;EEPROM出错标志
SYS_ERR         BIT     04h           ;信息标志出错标志
BEEP_EN         BIT     05h           ;beep允许叫标志      系统不一致的时候叫5次,开始运行的时候叫1次
F_30S           BIT     06H           ;30秒到标志
F_60S           BIT     07H           ;60秒到标志

INDEX_MASTER    EQU     21H           ; 主继电器开/关索引
INDEX_SLAVE     EQU     22H           ; 从继电器开/关索引

CTRL_MRY00      EQU     23H
CTRL_MRY10      EQU     24H
CTRL_MRY01      EQU     25H
CTRL_MRY11      EQU     26H             ;主继电器存储状态

M30             EQU     27H
;28h空余
F_BADF          BIT     40H           ;恶意负载识别功能是否起用标志
F_FLAG          BIT     41H           ; 分时间段限制电流比较标志 =1真确
F_1M            BIT     42H           ;1分钟标志  =1时 到一分钟
F_CLEAR         BIT     43H           ;每天清楚恶意负载的一个标志

BEEP_MIN        EQU     29h           ;
BEEP_SEC        EQU     2ah           ;鸣叫倒计时单元     过流、过载的时候赋值

CURR_SRY00      EQU     2bh           ;
CURR_SRY01      EQU     2ch           ;
CURR_SRY10      EQU     2dh           ;
CURR_SRY11      EQU     2eh           ;从继电器状态

CURR_MRY00      EQU     2fh           ;
CURR_MRY01      EQU     30h           ;
CURR_MRY10      EQU     31h           ;
CURR_MRY11      EQU     32h           ;主继电器状态

ADDRESS         EQU     33h           ;本机地址存放
RY_CNT          EQU     34h           ; 继电器操作计时单元

MC_PORT0        EQU     35h           ;前8表的上次 读入的状态
MC_PORT1        EQU     36h           ;后8表的上次 读入的状态

PP_SEC          EQU     37h           ; 秒计时单元  0.5s关蜂鸣器

SECOND          EQU     38h           ;
MINUTE          EQU     39h           ;
HOUR            EQU     3ah           ;系统时间

SERVER          EQU     3bh           ;
SERVER1         EQU     3ch           ;
MASTER          EQU     3dh           ;
ADDR            EQU     3eh           ;
SVR_JYH         EQU     3fh           ;4字节系统信息+1字节校验和

LC_PORT0        EQU     40h           ;
LC_PORT1        EQU     41h           ;

HALF_MINUTE     EQU     42h           ;

MICRO_SEC       EQU     43h           ;

SBLC_FIRST0     EQU     44h           ;
SBLC_FIRST1     EQU     45h           ;

BAD_PW          EQU     46H

SBLC_LIMIT      EQU     47h           ;恶意负载识别功率值16字节(47H~56H)

BLC_TCNT        EQU     57h           ;功率下降标志16字节(57H~66H)
BLC_CNT         EQU     67h           ;恶意负载倾向标志16字节(67H~76H)/改为功率连续增加计数

LC_BUF0         EQU     77h           ; METER COUNT 0-7   8byte (77h~7eh)
LC_BUF1         EQU     7fh           ; METER COUNT 8-15  8byte (7fh~86h)

MC_BUF          EQU     87h           ;COUNT OF METER(87H-8eH,8 Byte)
				      ; METER COUNT 0-7(BIT0-3)
                                      ; METER COUNT 0-7(BIT4-7)

EEREAD_BUF      EQU     8fh           ;EEPROM读缓冲器(08FH-09fH,17个字节)

PW_CNT          EQU     0a0h          ;实时功率保存超时计数单元 16byte 0a0h~0afh

BIHUAN          EQU     0B0H          ;0B0H~0BFH

TMP             EQU     0C0H          ;功率增量

;0C0h~0cfh暂时空余                     ;z添加
shi_j           equ     28h;0c1h           ;时间秒计数单元
add_r           equ     0c0h           ;地址计数单元
     ;          equ     39h
     ;          equ     3ah

STACK_BUF	EQU	0c4h;0c1H	      ; 堆栈(0D0H-0FFH)   ?


;---------------内部扩展RAM分配(范围000H-3FFH)---------
PP_BUF          EQU     000h          ; 存放每个电表的脉冲个数, 满160即为0.1度,并将其清0

POINT_BUF       EQU     010h          ; 存放每个电表的电表数,每个电表占用4*4+1个字节,对应4种费率,
				      ; Byte0-3 费率1电表数
				      ; Byte4-7 费率2电表数
				      ; Byte8-11 费率3电表数
				      ; Byte12-15 费率4电表数
                                      ; Byte16 JYH

LIMIT_SEC       EQU     120h          ; 跳电计时秒单元 16字节
LIMIT_MIN       EQU     130h          ; 跳电计时分单元 16字节

MRY_BUF         EQU     140h          ; 主继电器操作队列(140H-14FH,16 Byte)

SRY_BUF         EQU     150h          ; 从继电器操作队列(150H-15FH,16 Byte)

LIMIT_BUF       EQU     160h          ; 限制电流计数单元

CLOSE_TIME      EQU     170h          ; 跳电关断时间(180H-18FH,16 Byte)

RATE_BUF        EQU     180h          ; 多费率时间表(16个时段,对应4种费率,每个时段占用5个字节,总计5*16+1=81个字节)
                                      ; 范围(190H-1e0H)
                                      ; Byte0: 开始小时
                                      ; Byte1: 开始分
                                      ; Byte2: 结束小时
                                      ; Byte3: 结束分
                                      ; Byte4: 费率

BLC_BUF         EQU     1D1h          ; 本次脉冲周期计数单元 32byte
BLC_OLDBUF      EQU     1F1h          ; 上次脉冲周期计数单元 32byte

LAST_BLC        EQU     211h          ; 上次功率 16byte
LASTADD_BLC     EQU     221h          ; 增加的功率  3byte/只

;251H~25FH空余

METER_INF       EQU     260H          ; 电表当前信息,主继电器状态、从继电器状态、当前功率、跳电电流、跳电功率80byte

PW_OUT          EQU     2B0H          ; 功率识别屏蔽区间2A0H~2EFH 80byte

METER_DAT       EQU     300H          ; 电表读数有无更新标志(2F0H-2FFH,16 Byte)

LIMIT_PP        EQU     310H          ; 限制电流值(300H-30FH,16 Byte)

SHARELIMITT     EQU     320H          ; 分时间限制电流-时间段   64byte
SHARELIMITC     EQU     360H          ; 分时间限制电流-限制电流 16byte
LIMIT_CUR       EQU     370H          ; 当前限制电流

CMP_TIME        EQU     380H          ; 分时限流判断时间

bad_count       equ     390h          ; 恶意负载跳电次数 390H~39FH

RD_BUF		EQU     3a0h          ; 串行接收缓冲区 96byte (3a0h~3ffh)


;---------------AT24C16分配表,000H~7FFH---------
EE_FBUF0	EQU	0000H   ;系统初始化标志
EE_FBUF1	EQU	0001H   ;系统初始化标志

;0002h~003h     空余

EE_CURRRY	EQU	0004H   ;继电器状态
EE_SERVER       EQU     0008H   ;系统ID

;00DH~00EH      空余
EE_BADFLAG      EQU     000FH   ; 是否起用恶意负载标志

EE_CT   	EQU	0010H   ; 跳电关断时间
;020h~02fh      空余
EE_LPP  	EQU	0030H   ; 限制电流
;040h~04FH      空余
EE_BUF0		EQU	0050H	; 电表电流EEPROM存储区域0
EE_BUF1		EQU	0160H	; 电表电流EEPROM存储区域1
EE_BUF2		EQU	0270H	; 电表电流EEPROM存储区域2

EE_RATE		EQU	0380H	; 多费率时间段存储区域

;3B1H~3BFH      空余

EE_BADCODE      EQU     03E0H   ; 恶意负载识别功率存储单位
;3F0H~3FFH      空余

EE_OUTCODE      EQU     0400H   ; 功率识别屏蔽区间 80BYTE


EE_SHARELIMITT  EQU     0450H   ; 分时间限制电流--时间段 64BYTE
EE_SHARELIMITC  EQU     0490H   ; 分时间限制电流--限制电流 16BYTE

;4A0H~7FFH      空余


;---------------常量定义--------------
SBLC_WD         EQU     0      ; 默认软件恶意负载识别功率(12,600W)        不过12
PWCNT           EQU     60      ; 实时功率保存超时计数器 暂时定为60S超时
FADDR		EQU	0a0h	; fixed address for AT24Cxx EEPROMs
PSIZE		EQU	16	; bytes per page for AT24C16
EE_FLAG		EQU	5AH     ; 系统初始化标志

METER_VAR	EQU	160     ; 电表常量

LMT_VAL         EQU     6       ; LIMIT CURRENT VALUE (6 Pulse/A)
DEF_CURR        EQU     30      ; DEFAULT CURRENT (30A)
DEF_CT          EQU     3       ; DEFAULT CLOSE TIME (3 MINUTE)

RY_DELAY	EQU	12
RYB_NUM		EQU	16
RD_OK		EQU	0FH     ; 正确应答值
RD_REQUE        EQU     0EEH    ; 请求系统信息值

;---------------命令字---------------------------
RF_RP		EQU	10H     ; 读电表读数
RF_IN           EQU     11H     ; 读电表状态
RF_WP		EQU	12H     ; 写电表读数

RF_MSO		EQU	20H     ; 主继电器绝对开
RF_MSOT		EQU	22H     ; 主继电器开
RF_MSC		EQU	21H     ; 主继电器绝对关
RF_MSCT		EQU	23H     ; 主继电器关
RF_SSO		EQU	24H     ; 从继电器开
RF_SSC		EQU	25H     ; 从继电器关

RF_MOP          EQU     26H     ; 主继电器全开/关
RF_MOPABS       EQU     27H     ; 主继电器绝对全开/关
RF_SOP          EQU     28H     ; 从继电器全开/关

RF_LTA		EQU	30H     ; 写限制值
RF_BAD          EQU     31H     ; 写恶意负载识别功率
RF_TIM          EQU     32H     ; 写跳电后的恢复时间
RF_SID          EQU     33H     ; 写系统ID
RF_OUT          EQU     34H     ; 写识别功率的屏蔽区间
RF_RATE		EQU	35H     ; 写多费率时间段
RF_BADF         EQU     36H     ; 恶意负载识别标志
RF_SHAREL       EQU     37H     ; 分时间限制电流

RF_RESET        EQU     40H     ; 电表读数清零

RF_INF0         EQU     51H     ; 读取指定电表的恶意负载识别功率和过流值
RF_INF1         EQU     52H     ; 读取指定电表的功率识别屏蔽区间
RF_RSHAREL      EQU     53H     ; 读分时限制电流

AUXR            EQU     8EH     ; Auxiliary Register(SST89E554)
                                ;    D0 -- AO: Disable(1)/Ensble(0) ALE
                                ;    D1 -- EXTRAM: Internal(0)/External(1) RAM access

AUXR1           EQU     0A2H    ; STC使用DPTR1控制寄存器
DSP             EQU     86H     ; W77E58使用DPTR1控制寄存器
CHPCON          EQU     0BFH    ; Auxiliary Register(W77E365)
                                ;    D4 -- EXTRAM: Internal(0)/External(1) RAM access

		ORG	0000H
                SJMP    MAIN                    ; 使用寄存器组 0

		ORG	000BH
		LJMP	Timer0                  ; 使用寄存器组 1

		ORG	001BH
		LJMP	Timer1                  ; 使用寄存器组 2

 		ORG	0023H
		LJMP	Serial                  ; 使用寄存器组 3


		ORG	  0030H
MAIN:	        MOV	  SP,#STACK_BUF         ; 堆栈(0D0H-0FFH) ?好象是从0C1H开始的。
		CLR	  RS0
		CLR	  RS1                  ;
		MOV	  P0,#0FFH
		MOV	  P1,#0FFH
		MOV	  P2,#0FFH
		MOV	  P3,#0FFH

		CLR	  RS485_TR             ; 184设置成接收数据状态
        ;        CLR       LINE_LED             ; 点亮LED
                CLR       SYS_ERR              ; 系统ID出错标志    =1时信息出错

;                MOV       AUXR,#01H            ; 允许使用片内RAM(SST89E554)
;                MOV       CHPCON,#00010000B    ; 允许使用片内RAM(W77E365)
                MOV       PMR,#1

;---------------清除所有内存单元-----------------
		MOV	  R0,#20H
		MOV	  A,#STACK_BUF
		CLR	  C
		SUBB      A,#20H
		MOV	  R1,A
		CLR	  A

MN_00:	        MOV	  @R0,A
		INC	  R0
		DJNZ      R1,MN_00              ; 将内部RAM单元初始化为0(20H~0E0H)

;---------------清除所有内存单元-----------------
		MOV	  DPTR,#0
		CLR	  A
                MOV       R2,#4
MN_001:         MOV       R1,#0
MN_002:	        MOVX      @DPTR,A
		INC	  DPTR
		DJNZ      R1,MN_002
		DJNZ      R2,MN_001             ; 将内部扩展RAM存储区(0000H~03FFH)清零

;------------------------------------------------
                SETB      F_1M         ;1分钟标志  =1时 到一分钟

;---------------初始化脉冲周期计数单元-----------
                MOV     DPTR,#BLC_BUF
                MOV     R7,#16
MN_003:         MOV     A,#0FBH
                MOVX    @DPTR,A
                INC     DPTR
                MOV     A,#0FFH
                MOVX    @DPTR,A
                INC     DPTR
                DJNZ    R7,MN_003

;---------------初始化分时限流识别时间单元
                MOV     DPTR,#CMP_TIME
                MOV     R7,#16
MN_004:         CLR     A
                MOVX    @DPTR,A
                INC     DPTR
                DJNZ    R7,MN_004


;------------------------------------------------z   开定时器  t0
                lcall   MN_START                     ;初始化定时器   并且开定时器T0
                lcall     WriteEEFlag           ;向   AT24C16 中写系统初始化标志  为了后面的读出

;------------------------------------------------  z     1、测试蜂鸣器和led的好坏.
                mov    shi_j,#0                  ;初始化时间秒单元
                clr    LINE_BEEP              ;蜂鸣器鸣叫
                clr    LINE_LED               ;点亮led       2秒钟测试蜂鸣器和led的好、坏。
shi_2:          mov    a,shi_j
                cjne   a,#1,shi_1
shi_1:          jc     shi_2                  ;时间没有到2秒在这边等待
                setb   LINE_BEEP              ;蜂鸣器关鸣叫


shi_4:
                mov    a,shi_j
                cjne   a,#6,shi_4             ; 延时6-1秒后 再测试  从控地址是否正确


;---------------读系统地址地址------------------- z      2、测试从控地址的好坏。
		CLR	  LINE_ADDR

                MOV       R7,#20H
                DJNZ      R7,$                  ;

		MOV	  A,P2
		CPL	  A
		MOV	  ADDRESS,A
		SETB      LINE_ADDR             ;    读取从控地址


                mov       r7,#8
                clr       c
                mov       add_r,#0              ;地址计数单元清零
                mov       A,ADDRESS
add_2:          rrc        a
                inc       add_r                 ;位数加1   看下一位
                jnc       add_4                 ;地址的这一位不等于1跳走 继续右移
                sjmp      add_3                 ; 取出位数据去控制蜂鸣器。

add_4:          djnz      r7,add_2              ;
                sjmp      add_5
add_3:          clr       et0
                clr       tr0
                setb      et0
                setb      tr0

                clr       f_30s                 ;  0.5秒  初始化  =0开蜂鸣器 . =1 关蜂鸣器
             ;   clr       line_beep             ; 有位数=1  就开蜂鸣器
                mov       shi_j,#0              ;  让时间位从0开始加   一直加到  add_r
add_7:
                jnb        f_30s,add_8          ; =0开蜂鸣器 . =1 关蜂鸣器
                setb       line_beep
                sjmp       add_9
add_8:          clr        line_beep            ; =0开蜂鸣器 . =1 关蜂鸣器
add_9:          mov       a,shi_j

⌨️ 快捷键说明

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