📄 电机.asm
字号:
;**********************************************************************
;* Trabicom On Board Engine Controller *
;**********************************************************************
;* *
;* Filename: Trabi.asm *
;* Date: 12.11.2000 *
;* File Version: Trabicom V2.1 *
;* *
;* Author: Zoltan Fekete *
;* Company: Siemens PSE *
;* *
;* *
;**********************************************************************
;* *
;* Notes: Special hardware required. *
;* PIC 16f877 , XTAL : 20MHz *
;* Nintendo GameBoy on far end *
;* *
;* Pinout: RA0/in - Temp cyl1 sensor *
;* RA1/in - Temp cyl2 sensor *
;* RA2/in - Temp air sensor *
;* RA3/in - Engine performance sensor *
;* RA4 *
;* RA5 *
;* *
;* RB0/in - \ *
;* RB1/in - Safety switch (Zero active) *
;* RB2/in - 4 bits wide *
;* RB3/in - / *
;* RB4/in - Signal plugs *
;* RB5/in - *
;* RB6/in - (Programmer) *
;* RB7/in - (Programmer) *
;* *
;* RC0/ou - Plug signal for sparking *
;* RC1/ou - Speaker out *
;* RC2/ou - DA Bit0 \ *
;* RC3/ou - DA Bit1 \ *
;* RC4/ou - DA Bit2 / Water Injection *
;* RC5/ou - DA Bit3 / *
;* RC6/ou - Inmobiliser (Relay) *
;* RC7 *
;* *
;* RD0/ou - Bus data 0 *
;* RD1/ou - Bus data 1 *
;* RD2/ou - Bus data 2 *
;* RD3/ou - Bus data 3 *
;* RD4/ou - Bus data 4 *
;* RD5/ou - Bus data 5 *
;* RD6/ou - Bus data 6 *
;* RD7/ou - Bus data 7 *
;* *
;* RE0/ou - RD *
;* RE1/ou - WR *
;* RE2/ou - CS *
;* *
;**********************************************************************
list p=16f877 ; list directive to define processor
#include <p16f877.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;**********************************************************************
;* VARIABLE DEFINITIONS *
;**********************************************************************
w_temp EQU 0x20 ; variable used for context saving
status_temp EQU 0x21 ; variable used for context saving
TMPH EQU 0x22 ; Timer 1 High byte
TMPL EQU 0x23 ; Timer 1 Low byte
DATA_EE_ADDR EQU 0x24 ; EEPROM address
DATA_EE_DATA EQU 0x25 ; EEPROM data
RPMH EQU 0x26 ; RPM HIGH BYTE
RPML EQU 0x27 ; RPM LOW BYTE
RPM_OK EQU 0x28 ; RPM X00
ADSTATE EQU 0X29 ; A/D CONVERSION NUMBER
TCYL1H EQU 0X2a ; TEMP CYLINDER 1
TCYL1L EQU 0X2b
TCYL2H EQU 0X2c ; TEMP CYLINDER 2
TCYL2L EQU 0X2d
TAIRH EQU 0X2e ; TEMP AIR
TAIRL EQU 0X2f
POWERH EQU 0X30 ; POWER
POWERL EQU 0X31
COUNTER EQU 0X32 ; COUNTER SERVICE FILE
COUNTER1 EQU 0X33 ; COUNTER SERVICE FILE
COUNTER2 EQU 0X34 ; COUNTER2 SERVICE FILE
SPEAKER EQU 1 ; BIT POSITION
SPARK EQU 00 ; BIT POSITION FOR PLUG OUT
POWEREE EQU 0X35 ; POWER FOR EEPROM (0-5 *15)
ANGLE EQU 0x36 ; PLUG ANGLE
SAFETY EQU b'00001110' ; SAFETY SWITCH (4 BIT WIDE)
RELAY EQU 06 ; RELAY ON BIT6
RPMIN EQU 0X37 ; MINIMUM RPM SHADOW FILE
DATA_COMMAND EQU 0X38
DATA_ADDR EQU 0X39 ; DATA ADDRESS TEMP
DATA_DATA EQU 0X3A ; DATA DATA TEMP
DATA_CHKSM EQU 0X3B ; DATA CHECKSUM
WATINJ EQU 0X3C ; WATER INJ. '00 XXXX 00' !!!
AGAIN EQU B'10101010' ; AGAIN SIGN FOR GAMEBOY
COM_WEE EQU 0X0A ; CODE FOR WRITE THE EEPROM
COM_REE EQU 0XA0 ; CODE FOR READ THE EEPROM
COM_MEA EQU 0XAA ; CODE FOR READ THE MEASURES
COM_WSH EQU 0X55 ; CODE FOR WRITE THE SHADOW
SHADOWSTART EQU 0X0A0 ; SHADOW FILE START ADDRESS
;**********************************************************************
;* EEPROM FIELD DATA *
;**********************************************************************
ORG H'2100'
; The plug time table contains for 15 RPM value
; and 6 power, plug angel values (1 Byte)
; INTIT ANGLE: 60
; power 1
DE 0 ; 300 RPM
DE 2 ; 500 RPM
DE 0x56 ; 1000 RPM
DE 0x97 ; 1500 RPM
DE 0xB8 ; 2000 RPM
DE 0xCB ; 2500 RPM
DE 0xD8 ; 3000 RPM
DE 0xE2 ; 3500 RPM
DE 0xE9 ; 4000 RPM
DE 0xEE ; 4500 RPM
DE 0xF2 ; 5000 RPM
DE 0xF6 ; 5500 RPM
DE 0xF9 ; 6000 RPM
DE 0xFB ; 6500 RPM
DE 0xFE ; 7000 RPM
; power 2
DE 0 ; 300 RPM
DE 2 ; 500 RPM
DE 0x56 ; 1000 RPM
DE 0x97 ; 1500 RPM
DE 0xB8 ; 2000 RPM
DE 0xCB ; 2500 RPM
DE 0xD8 ; 3000 RPM
DE 0xE2 ; 3500 RPM
DE 0xE9 ; 4000 RPM
DE 0xEE ; 4500 RPM
DE 0xF2 ; 5000 RPM
DE 0xF6 ; 5500 RPM
DE 0xF9 ; 6000 RPM
DE 0xFB ; 6500 RPM
DE 0xFE ; 7000 RPM
; power 3
DE 0 ; 300 RPM
DE 2 ; 500 RPM
DE 0x56 ; 1000 RPM
DE 0x97 ; 1500 RPM
DE 0xB8 ; 2000 RPM
DE 0xCB ; 2500 RPM
DE 0xD8 ; 3000 RPM
DE 0xE2 ; 3500 RPM
DE 0xE9 ; 4000 RPM
DE 0xEE ; 4500 RPM
DE 0xF2 ; 5000 RPM
DE 0xF6 ; 5500 RPM
DE 0xF9 ; 6000 RPM
DE 0xFB ; 6500 RPM
DE 0xFE ; 7000 RPM
; power 4
DE 0 ; 300 RPM
DE 2 ; 500 RPM
DE 0x56 ; 1000 RPM
DE 0x97 ; 1500 RPM
DE 0xB8 ; 2000 RPM
DE 0xCB ; 2500 RPM
DE 0xD8 ; 3000 RPM
DE 0xE2 ; 3500 RPM
DE 0xE9 ; 4000 RPM
DE 0xEE ; 4500 RPM
DE 0xF2 ; 5000 RPM
DE 0xF6 ; 5500 RPM
DE 0xF9 ; 6000 RPM
DE 0xFB ; 6500 RPM
DE 0xFE ; 7000 RPM
; power 5
DE 0 ; 300 RPM
DE 2 ; 500 RPM
DE 0x56 ; 1000 RPM
DE 0x97 ; 1500 RPM
DE 0xB8 ; 2000 RPM
DE 0xCB ; 2500 RPM
DE 0xD8 ; 3000 RPM
DE 0xE2 ; 3500 RPM
DE 0xE9 ; 4000 RPM
DE 0xEE ; 4500 RPM
DE 0xF2 ; 5000 RPM
DE 0xF6 ; 5500 RPM
DE 0xF9 ; 6000 RPM
DE 0xFB ; 6500 RPM
DE 0xFE ; 7000 RPM
; power 6
DE 0 ; 300 RPM
DE 2 ; 500 RPM
DE 0x56 ; 1000 RPM
DE 0x97 ; 1500 RPM
DE 0xB8 ; 2000 RPM
DE 0xCB ; 2500 RPM
DE 0xD8 ; 3000 RPM
DE 0xE2 ; 3500 RPM
DE 0xE9 ; 4000 RPM
DE 0xEE ; 4500 RPM
DE 0xF2 ; 5000 RPM
DE 0xF6 ; 5500 RPM
DE 0xF9 ; 6000 RPM
DE 0xFB ; 6500 RPM
DE 0xFE ; 7000 RPM
; ADDRESS: 90, 0x5A
DE 0X08 ; MINIMUM RPM AFTER START
;**********************************************************************
;* *
;* *
;* POWER ON VECTOR *
;* *
;* *
;**********************************************************************
ORG 0x000 ; processor reset vector
clrf PCLATH ; ensure page bits are cleared
goto main ; go to beginning of program
;**********************************************************************
;* *
;* INTERRUPT VECTOR *
;* *
;**********************************************************************
ORG 0x004 ; interrupt vector location
BCF STATUS, RP1 ;
BCF STATUS, RP0 ; Bank0
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
;**********************************************************************
;* INTERRUPT CALL *
;**********************************************************************
BCF INTCON, GIE ; All interrupts are disabled
CALL introutine ; Go to interrupt service routine
BCF STATUS, RP1 ;
BCF STATUS, RP0 ; Bank0
BCF INTCON, RBIF ; RESET RBINT FLAG
BSF INTCON, RBIE ; ENABLE PORTB INT
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
BSF INTCON, GIE ; ENABLE ALL INTERRUPTS
retfie ; return from interrupt
; ORG 0x030 ; program start address
main
;**********************************************************************
;* *
;* *
;* Power On Init State *
;* *
;* Purpose: Set up the hardware *
;* *
;* *
;**********************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -