📄 0526.asm
字号:
;**********摩托车电控喷油系统*****************
;
; 程序设计:游4 1/2001
;=============================================
;
; 一 初始化程序
;---------------------------------------------
;
OILCTRL BIT P1.7 ;喷油器控制位
KINDLE EQU P1.2 ;点火脉冲位
OILPUMP BIT P1.6 ;油泵开关位
TXD_ EQU P1.0 ;RS232发
RXD_ EQU P1.1 ;RS232收
MOTOR EQU P1.3 ;启动马达位
SPEED BIT P1.4 ;转速测试位
REST_ BIT P1.5 ;外部复位位
OSC_X1 BIT P2.1 ;外部振荡1
OSC_X2 BIT P2.0 ;外部振荡2
COMPOUT EQU P0.0 ;比较器输出
COMPINA EQU P0.1 ;比较器输入1
COMPINB EQU P0.2 ;比较器输入2
AD_0 EQU P0.3 ;模数转换0
AD_1 EQU P0.4 ;模数转换1
AD_2 EQU P0.5 ;模数转换2
AD_3 EQU P0.6 ;模数转换3
JSQ_1 EQU P0.7 ;计数器1
VSS DATA 'P5' ;接地脚
VDD DATA 'P15' ;正电源+5V
PTOAD DATA 0F6H ;模数转换控制寄存器
POM2 DATA 85H ;
POM1 DATA 84H ;
;
OIL_BUF EQU 30H ;油门开度缓冲寄存器
AIR_BUF EQU 31H ;空气量缓冲寄存器
AIR_T EQU 32H ;进气温度缓冲寄存器
MACH_BF EQU 33H ;机器温度缓冲寄存器
VOL_BUF EQU 34H ;电压补偿缓冲寄存器
ADC_N EQU 3AH ;模数转换器编号
SPEEDwH EQU 3BH ;转速计数器高八位RAM
SPEEDwL EQU 3CH ;转速计数器低八位RAM
m_i EQU 38H ;数据表下标(i)
M_j EQU 39H ;数据表下标(j)
;
OIL_T EQU 28H ;油泵定时器循环值
COOL_X EQU 2DH ;冷启动加浓次数寄存器
STA_X EQU 2EH ;启动加浓次数寄存器
ON_OFF EQU 2FH ;开关量输入寄存器
BASICH EQU 36H ;基本喷油量寄存器H
BASICL EQU 37H ;基本喷油量寄存器L
Tv EQU 3DH ;电压补偿喷油量寄存器
TM EQU 3EH ;温度补偿喷油量RAM
COOL_ EQU 3FH ;冷启动喷油量寄存器
SPEEDL EQU 40H ;十六位转速低八位
SPEEDH EQU 41H ;十六位转速高八位
;
TABEL equ 0800H ;表首地址
;
;============================================================
;
org 0000h
REST: aJMP MAIN ;复位转主程序
ORG 0003H
PUSH ACC
PUSH PSW
AJMP START
org 000bh ;喷油定时器0中断000BH
AJMP INTF0 ;溢出转
ORG 0053H
PUSH acc
PUSH PSW
AJMP PUMP
ORG 0080H
MAIN: MOV SP,#60H ;设栈底
mov TMOD,#10010001b ;设定时器1为模式1,GATE=1
; ;设定时器0为模式1,GATE=0
MOV PTOAD,#78H
ANL POM2,#87H
ORL POM1,#78H
mov adc_n,#80h
MOV IP0H,#02H
MOV IP0,#02H
MOV WDRST,#1EH
MOV WDRST,#0E1H
SETB EWD
SETB IT0
SETB ET0
CLR P1.3
; SETB EX0
setb EA
MOV WDCON,#00010111B
LOOP:
MOV TH1,#00H
MOV TL1,#00H
MOV R4,#80H
MOV R5,#0C3H
MOV R6,#0C9H
MOV R7,#01H
CLR P1.6
WAIT: JB P1.4,WAIT
MOV WDRST,#1EH
MOV WDRST,#0E1H
SETB EWD
MOV WDCON,#00010111B
SETB TR1
LOOP1: JNB P1.4,LOOP1
;===============================================
SETB TR0
CPL P1.7
ACALL ADREAD
ACALL DIV1
acall count
ACALL SIGN
AFAN: JB P1.4,AFAN
CLR TR1
MOV 3BH,TH1
MOV 3CH,TL1
AJMP LOOP
;===============================================
START:
NOP
CPL P1.6
CLR IE0
SETB P1.3
POP PSW
POP ACC
RETI
pump:
SETB P1.6
POP PSW
POP ACC
RETI
INTF0:
CLR TR0
MOV TL0,#80H
MOV TH0,#0ECH
SETB P1.7
mov r2,3bh
djnz R2,$
ACALL sign1
RETI
;======================================================
ADRead:
ACALL SIGN
PUSH ACC
MOV ADC_N,#80H
MOV R1,#30H
ADNEXT: mov adcon,adc_n
MOV R0,#5
DJNZ R0,$
setb adcs
ADChk:
jnb adci,adchk
mov a,dac0
MOV @R1,A
INC R1
INC ADC_N
clr adci
CJNE R1,#33H,ADNEXT
POP ACC
ACALL SIGN
ret
SIGN:
CPL P1.7
MOV R1,31H
DJNZ R1,$
CPL P1.7
RET
SIGN1:
CPL P1.7
MOV R1,3bH
S1: NOP
NOP
DJNZ R1,S1
CPL P1.7
RET
;======================================================
; 计算子程序 ...............
;======================================================
;
; (R7R6)/(35H36H)=(R7R6)
; (R3R2)=余数部分
;==============================================================
;
DIV1: MOV A,3Bh ;除数高八位为零?
JNZ BEIGN ;为零转
MOV A,3Ch ;
JZ OVER ;除数低八位为零?为零结束.
BEIGN: CLR A ;清余数寄存器R3,R2
MOV R3,A
MOV R2,A
MOV R1,#20H ;被除数位数进R1
DIV0: ACALL RLC4 ;调余数和被除数循环左移一位子程
MOV A,R2 ;左移后,余数低八位减除数低八位
SUBB A,3Ch
MOV R0,A ;差进R0
MOV A,R3
SUBB A,3Bh ;余数高八位减除数高八位
JC NEXT ;不够减转
INC R4 ;够减商加一
MOV R3,A ;余数进R3
MOV A,R0 ;差
MOV R2,A ;差进R2
NEXT: DJNZ R1,DIV0 ;不够减看10H次到否,否则转
MOV A,R3 ;到则看余数高位为一否?
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -