?? 0603.asm
字號(hào):
;**********摩托車(chē)電控噴油系統(tǒng)*****************
;
; 程序設(shè)計(jì):游4 1/2001
;=============================================
;
; 一 初始化程序
;---------------------------------------------
;
OILCTRL BIT P1.7 ;噴油器控制位
KINDLE EQU P1.2 ;點(diǎn)火脈沖位
OILPUMP BIT P1.6 ;油泵開(kāi)關(guān)位
TXD_ EQU P1.0 ;RS232發(fā)
RXD_ EQU P1.1 ;RS232收
MOTOR EQU P1.3 ;啟動(dòng)馬達(dá)位
SPEED BIT P1.4 ;轉(zhuǎn)速測(cè)試位
REST_ BIT P1.5 ;外部復(fù)位位
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 ;模數(shù)轉(zhuǎn)換0
AD_1 EQU P0.4 ;模數(shù)轉(zhuǎn)換1
AD_2 EQU P0.5 ;模數(shù)轉(zhuǎn)換2
AD_3 EQU P0.6 ;模數(shù)轉(zhuǎn)換3
JSQ_1 EQU P0.7 ;計(jì)數(shù)器1
VSS DATA 'P5' ;接地腳
VDD DATA 'P15' ;正電源+5V
PTOAD DATA 0F6H ;模數(shù)轉(zhuǎn)換控制寄存器
POM2 DATA 85H ;
POM1 DATA 84H ;
;
OIL_BUF EQU 30H ;油門(mén)開(kāi)度緩沖寄存器
AIR_BUF EQU 34H ;空氣量緩沖寄存器
AIR_T EQU 31H ;進(jìn)氣溫度緩沖寄存器
MACH_BF EQU 32H ;機(jī)器溫度緩沖寄存器
VOL_BUF EQU 33H ;電壓補(bǔ)償緩沖寄存器
ADC_N EQU 3AH ;模數(shù)轉(zhuǎn)換器編號(hào)
SPEEDwH EQU 3BH ;轉(zhuǎn)速計(jì)數(shù)器高八位RAM
SPEEDwL EQU 3CH ;轉(zhuǎn)速計(jì)數(shù)器低八位RAM
m_i EQU 38H ;數(shù)據(jù)表下標(biāo)(i)
M_j EQU 39H ;數(shù)據(jù)表下標(biāo)(j)
;
OIL_T EQU 28H ;油泵定時(shí)器循環(huán)值
COOL_X EQU 2DH ;冷啟動(dòng)加濃次數(shù)寄存器
STA_X EQU 2EH ;啟動(dòng)加濃次數(shù)寄存器
ON_OFF EQU 2FH ;開(kāi)關(guān)量輸入寄存器
BASICH EQU 36H ;基本噴油量寄存器H
BASICL EQU 37H ;基本噴油量寄存器L
Tv EQU 3DH ;電壓補(bǔ)償噴油量寄存器
TM EQU 3EH ;溫度補(bǔ)償噴油量RAM
COOL_ EQU 3FH ;冷啟動(dòng)噴油量寄存器
SPEEDL EQU 40H ;十六位轉(zhuǎn)速低八位
SPEEDH EQU 41H ;十六位轉(zhuǎn)速高八位
;
TABEL equ 0800H ;表首地址
;
;============================================================
;
org 0000h
REST: aJMP MAIN ;復(fù)位轉(zhuǎn)主程序
ORG 0003H ;啟動(dòng)中斷入口
; PUSH ACC ;保護(hù)現(xiàn)場(chǎng)
; PUSH PSW ;
AJMP START ;轉(zhuǎn)啟動(dòng)子程序
org 000bh ;噴油定時(shí)器0中斷000BH
AJMP INTF0 ;溢出轉(zhuǎn)
ORG 0053H ;看門(mén)狗
PUSH acc
PUSH PSW
AJMP PUMP ;轉(zhuǎn)油泵子程序
ORG 0080H
MAIN: MOV SP,#60H ;設(shè)棧底
mov TMOD,#10010001b ;設(shè)定時(shí)器1為模式1,GATE=1
; ;設(shè)定時(shí)器0為模式1,GATE=0
mov 2eh,#01h
mov th0,#0ech
mov tl0,#78h
MOV PTOAD,#78H ;定義模擬口作輸入
ANL POM2,#87H ;關(guān)P0口數(shù)字輸入
ORL POM1,#78H ;關(guān)P0口數(shù)字輸入
mov adc_n,#80h ;開(kāi)通道號(hào)00
MOV IP0H,#02H ;中斷級(jí)別,定時(shí)器0最高
MOV IP0,#02H ;
MOV WDRST,#1EH ;看門(mén)狗初始化
MOV WDRST,#0E1H ;看門(mén)狗初始化
SETB EWD ;開(kāi)看門(mén)狗中斷
SETB ET0 ;開(kāi)定時(shí)器0中斷
SETB EX0 ;開(kāi)0中斷
SETB P1.3 ;中斷0可輸入
CLR IT0 ;設(shè)中斷0 位低電平觸發(fā)
setb EA ;開(kāi)總體中斷
MOV WDCON,#00010111B ;開(kāi)看門(mén)狗,設(shè)定時(shí)2.1s
LOOP:
MOV TH1,#00H ;清測(cè)速計(jì)數(shù)器
MOV TL1,#00H ;......
CLR P1.6 ;開(kāi)開(kāi)油泵
WAIT: JB P1.4,WAIT ;等負(fù)脈沖
MOV WDRST,#1EH ;
MOV WDRST,#0E1H ;
SETB EWD ;
MOV WDCON,#00010111B ;開(kāi)看門(mén)狗定時(shí)器
SETB TR1 ;開(kāi)測(cè)速定時(shí)器
LOOP1: JNB P1.4,LOOP1 ;等正脈沖
;===============================================
CLR P1.7 ;開(kāi)噴油器
ACALL VOL
SETB TR0 ;開(kāi)噴油定時(shí)器
DJNZ 2EH,AFAN ;啟動(dòng)加濃延時(shí)
MOV 2EH,#01H ;初值
ACALL ADREAD ;調(diào)模數(shù)轉(zhuǎn)換子程序
; ACALL DIV1 ;調(diào)除法子程序
; acall count1 ;調(diào)計(jì)算子程序
ACALL DIV2
ACALL COUNT2
ACALL SIGN
AFAN: JB P1.4,AFAN ;等曲軸正脈沖完
CLR TR1 ;計(jì)數(shù)器1停測(cè)速
MOV 3BH,TH1 ;測(cè)速值進(jìn)RAM
MOV 3CH,TL1 ;...
AJMP LOOP ;返回
;===============================================
START: ;啟動(dòng)子程序
MOV 2EH,#1FH ;設(shè)啟動(dòng)加濃次數(shù)
mov 36h,#0ech ;設(shè)啟動(dòng)加濃寬度
mov 37h,#78h ;(10MS)
; CLR IE0 ;清0中斷標(biāo)志
; POP PSW ;彈出
; POP ACC
RETI ;中斷返回
pump: ;油泵開(kāi)關(guān)子程序
SETB P1.6 ;關(guān)油泵
POP PSW ;
POP ACC ;彈出
INTF0: ;噴油結(jié)束中斷子程序
SETB P1.7 ;關(guān)噴油器
CLR TR0 ;清中斷;
MOV TL0,37H ;調(diào)噴油寬度
MOV TH0,36H ;...
RETI ;返回
vol:
PUSH ACC
PUSH PSW
MOV A,33h
VOL_I: INC A
nop
cjne A,#0FFh,vol_I
POP psw
POP acc
RET
;======================================================
; 模數(shù)轉(zhuǎn)換子程序
;======================================================
ADRead:
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,#34H,ADNEXT
POP ACC
ret
SIGN:
CPL P1.7
MOV R1,31H
DJNZ R1,$
CPL P1.7
RET
SIGN1:
CPL P1.7
MOV R1,31H
S1: NOP
NOP
DJNZ R1,S1
CPL P1.7
RET
;======================================================
; ...... 計(jì)算子程序 ......
;======================================================
;
; (R7R6)/(35H36H)=(R7R6)
; (R3R2)=余數(shù)部分
;======================================================
;
DIV2:
MOV 50H,#80H
MOV 51H,#0C3H
MOV 52H,#0C9H
MOV 53H,#01H
DVT2:
MOV R6,#00H
MOV R5,#00H
MOV R4,#00H
MOV R3,3BH
MOV R2,3CH
DVT20: MOV R7,#20H
CLR 54H
ACALL RLN
DVL1: CLR C
MOV A,R4
SUBB A,R2
MOV R4,A
MOV A,R5
SUBB A,R3
MOV R5,A
MOV A,R6
SUBB A,#00H
MOV R6,A
JC DVL2
SETB 54H
DVL3: ACALL RLN
DJNZ R7,DVL1
RET
DVL2: MOV A,R4
ADD A,R2
MOV R4,A
MOV A,R5
ADDC A,R3
MOV R5,A
MOV A,R6
ADDC A,#00H
MOV R6,A
CLR 54H
AJMP DVL3
RLN: MOV C,54H
MOV R0,#04H
MOV R1,#50H
RLNO: MOV A,@R1
RLC A
MOV @R1,A
INC R1
DJNZ R0,RLNO
MOV A,R4
RLC A
MOV R4,A
MOV A,R5
RLC A
MOV R5,A
MOV A,R6
RLC A
MOV R6,A
RET
;
;
DIV1:
MOV R4,#80H ;每分鐘計(jì)數(shù)器計(jì)數(shù)值
MOV R5,#0C3H ;......
MOV R6,#0C9H ;......
MOV R7,#01H ;......
MOV A,3Bh ;除數(shù)高八位為零?
JNZ BEIGN ;不為零轉(zhuǎn)BRIGN開(kāi)始
MOV A,3Ch ;
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -