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

📄 control.txt

📁 高功率充电机控制程序设计。将输入指令和反馈进行比较
💻 TXT
字号:
AD_COMMAND			EQU     02H
AD_LOW          		EQU     02H
AD_HIGH          		EQU     03H
HSI_MODE        		EQU     03H
HSO_TIME         		EQU     04H
HSI_TIME          		EQU     04H
HSO_COMMAND   		EQU     06H
HSI_STATUS       		EQU     06H
INT_MASK         		EQU     08H
INT_PENDING      		EQU     09H
TIMER1           	 	EQU     0AH
TIMER2            		EQU     0CH
PORT1             		EQU     0FH
IOS0               		EQU     15H
IOC0               		EQU     15H
IOS1               		EQU     16H
IOC1               		EQU     16H
SP                 		EQU     18H
AX                		EQU     1CH
AL                		EQU     1CH
AH                		EQU     1DH
DX               		EQU     1EH
BX              	 	EQU     20H
BL               		EQU     20H
BH               		EQU     21H
CX               		EQU     22H
FLAG             		EQU     40H
U0               		EQU     42H;给定电压幅值
WT               		EQU     44H
USIN             		EQU     48H;给定正弦值
NUMAD          		EQU     50H;AD转换次数
DLFK             		EQU     52H;输入电流整流后的反馈值
CZWIDE          		EQU     54H;设定迟滞宽度
NUMDELAY      		EQU     56H;延时数
SOFT0_COM      		EQU     18H;软件定时器0中断命令
DINGSHI         		EQU     52;定时时间为200us
U1               		EQU     60H;反馈电压只值
ORG             		2004H
DCW             		hsi_int
ORG             		200AH
DCW             		SOFTTIMER
ORG             		2080H
LD      SP,#0E0H
                LDB     FLAG,#10
                LDB     WT,#0
                LD      CZWIDE,#700;给定迟滞宽度值
                LD      U0,#100
                DI
REFLUSH:
                LD      0,HSI_TIME
                NOP
                NOP
                JBS     IOS1,7,REFLUSH
                CLRB    INT_PENDING
                LDB     HSI_MODE,#01100000B;HSI.3正跳变中断(正半波)HSI.2负跳变中断(负半波)
                LDB     INT_MASK,#00100100B;允许软件中断、允许HSI中断
                LDB     IOC0,#01010010B;允许T2CLK计数,允许HSO.2,HSO.3输入,每次写定时器2复位
                ANDB    PORT1,#11110111B
                EI
                CALL    DELAY
;等待过零信号并进行处理
WAIT:
                CMPB    FLAG,#10
                JNE     WAIT0
                JMP     WAIT
WAIT0:
                LDB     IOC0,#01010010B;每次写定时器2复位
                LDB     HSO_COMMAND,#SOFT0_COM
                ADD     HSO_TIME,TIMER1,#DINGSHI
WAIT1:         CMPB    FLAG,#1
                JE      WAVEZ;跳转到正半波处理程序
                CMPB    FLAG,#0
                JE      WAVEF;跳转到负半波处理程序
                JMP     WAIT;过零信号没到继续等待
;正半波处理程序
WAVEZ:
                CALL    ADCHANGE5;采样输入电流值
                CLR     70H
                LDB     70H,WT
                LDB     80H,SIN[70H]
                MULUB  USIN,U0,80H;得到给定值
                CMP     USIN,DLFK
                JNH     WAVEZ0;给定小于反馈跳转
                CALL    DELAY
                CMP     USIN,DLFK
                JNH     WAVEZ;给定并不大于反馈从新判断
;给定大于反馈处理程序
                CLR     AX
                SUB     AX,USIN,DLFK;给定大于反馈得到差值
                CMP     AX,CZWIDE;比较差值和迟滞宽度
                JNH     ONV2;给定-反馈<某值,开V2进行充电
                CALL    OFFV2;给定-反馈>某值,关断V2,V3放电
;给定小于反馈处理程序
WAVEZ0:
                CALL    DELAY
                CMP     USIN,DLFK
                JH      WAVEZ;给定并不小于反馈从新判断
                CLR     AX
                SUB     AX,DLFK,USIN;给定小于反馈得到差值
                CMP     AX,CZWIDE;比较差值与迟滞宽度
                JNH     OFFV2;反馈-给定<某值,关断V2,V3继续放电
                CALL    ONV2;反馈-给定>某值,
;负半波处理程序
WAVEF:
                CALL    ADCHANGE5;采样输入电流值
                CLR     80H
                LDB     80H,WT
                LDB     94H,SIN[80H]
                MULUB  USIN,U0,94H;得到给定值
                CMP     USIN,DLFK
                JNH     WAVEF0;给定小于反馈跳转
                CALL    DELAY
                CMP     USIN,DLFK
                JNH     WAVEF;给定并不大于反馈从新判断
;给定大于反馈处理程序
                CLR     AX
                SUB     AX,USIN,DLFK;给定大于反馈得到差值
                CMP     AX,CZWIDE;比较差值和迟滞宽度
                JNH     ONV4;给定-反馈<某值,开V2,V3进行充电
                CALL    OFFV4;给定-反馈>某值,关断V2,V3放电
;给定小于反馈处理程序
WAVEF0:
                CALL    DELAY
                CMP     USIN,DLFK
                JH      WAVEF;给定并不小于反馈从新判断
                CLR     AX
                SUB     AX,DLFK,USIN;给定小于反馈得到差值
                CMP     AX,CZWIDE;比较差值与迟滞宽度
                JNH     OFFV4;反馈-给定<某值,关断V2,V3继续放电
                CALL    ONV4;反馈-给定>某值,
;开通V4,交流整流时用单管
ONV4:
                PUSHF
                LDB     HSO_COMMAND,#00100010B;HSO.2高电平输出
                ADD     HSO_TIME,TIMER1,#02
                NOP
                NOP
                POPF
                JMP     WAIT1
;关断V4
OFFV4:         PUSHF
                LDB     HSO_COMMAND,#00000010B;HSO.2低电平输出
                ADD     HSO_TIME,TIMER1,#02
                NOP
                NOP
                POPF
                JMP     WAIT1
;开通V2
ONV2:          PUSHF
                LDB     HSO_COMMAND,#00100001B;HSO.1高电平输出
                ADD     HSO_TIME,TIMER1,#02
                NOP
                NOP
                POPF
                JMP     WAIT1
;关断V2
OFFV2:
                PUSHF
                LDB     HSO_COMMAND,#00000001B;HSO.1低电平输出
                ADD     HSO_TIME,TIMER1,#02
                NOP
                NOP
                POPF
                JMP     WAIT1
;对输入交流电流精密整流后进行AD转换
ADCHANGE5:
                CLR     BX
                CLR     AX
                LDB     NUMAD,#20;采样AD转换20次
ADBUSY:       	LDB     AD_COMMAND,#00001000B;立即对A/D通道1转换
                NOP
                NOP
ADBUSY1:
                JBS     AD_LOW,3,ADBUSY1;正在转换,则等待
                LDB     BH,AD_HIGH;读A/D转换高8位
                LDB     BL,AD_LOW;读A/D转换低8位
                SHR     BX,#6;
                ADD     AX,BX
                DECB    NUMAD
                JNE     ADBUSY
                DIVU    AX,#30;求转换后平均值
                CLR     DLFK
                LD      DLFK,AX;得到电流反馈值
                RET
;延时一段时间进行软件抗干扰
DELAY:
                LDB     NUMDELAY,#3
delay0:       	DECB    NUMDELAY
                JNE     delay0
                RET
;工频交流过零中断
hsi_int:

                PUSHF
                LD      0,HSI_TIME
                JBS     HSI_STATUS,4,DOWN;正半波中断跳转
                JBS     HSI_STATUS,6,UP;负半波中断跳转
RETURN:       	POPF
                RET
UP:
                ORB     PORT1,#00000001B;测试HSI中断是否正确
                LDB     FLAG,#1
                JMP     RETURN
DOWN:
                ANDB    PORT1,#11111110B;测试HSI中断是否正确
                LDB     FLAG,#0
                JMP     RETURN
;软件定时中断
SOFTTIMER:
                PUSHF
                LDB     HSO_COMMAND,#SOFT0_COM
                ADD     HSO_TIME,TIMER1,#DINGSHI;从设定软件定时命令
                INCB    WT
                CMPB    WT,#200
                JNE     RETURN
                L:
                CLR     84H
                LD      84H,TIMER2
                JMP L
                LDB     IOC0,#01010010B;允许T2CLK计数,允许HSO.2,HSO.3输入,每次写定时器2复位
                LDB     WT,#0
                XORB    PORT1,#00001000B
                POPF
                RET
;离散正弦值表
ORG            4000H
SIN:            DB 000H,010H,01FH,02FH,03FH
                DB 04EH,05DH,06CH,07AH,088H
                DB 095H,0A2H,0AEH,0B9H,0C4H
                DB 0CEH,0D7H,0DFH,0E6H,0EDH
                DB 0F2H,0F6H,0FAH,0FCH,0FEH
                DB 0FFH,0FEH,0FCH,0FAH,0F6H
                DB 0F2H,0EDH,0E6H,0DFH,0D7H
                DB 0CEH,0C4H,0B9H,0AEH,0A2H
                DB 095H,088H,07AH,06CH,05DH
                DB 04EH,03FH,02FH,01FH,010H
                END

⌨️ 快捷键说明

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