📄 pcanutil.a51
字号:
$NOXREF
$SYMBOLS
$DEBUG
$NORB
$NOGEN
$PAGELENGTH(80) PAGEWIDTH(115)
;************************************************************************
;************************************************************************
;* *
;* C A N U T I L I T I E S *
;* *
;************************************************************************
;************************************************************************
;* *
;* Funktion: *
;* *
;* Zusammenfassung diverser Assembler-Routinen. Diese Routinen *
;* ersetzen C-Funktionen zur Zeitoptimierung. *
;* *
;* *
;* Filename : PCANUTIL.A51 *
;* *
;* Modulname : PCANUTIL *
;* *
;* Zielsystem : Jedes 8051 System mit einem Philips *
;* SJA100 CAN-Controller *
;* *
;* Entwicklungssystem : Keil ASM-51 *
;* *
;************************************************************************
;* Versionen: *
;* *
;* 0.1 31.10.1990 Th. Fischler: Erste Version *
;* 0.2 3.06.1991 Th. Fischler: JNZ Fehler eliminiert *
;* *
;************************************************************************
;* Copyright 1991 .. 2001 METTLER & FUCHS AG, CH-8953 Dietikon *
;************************************************************************
NAME CANUTIL
;------------------------------------------------------------------------
; E X P O R T S
;------------------------------------------------------------------------
PUBLIC _c_fast_copy
;*---------------------------------------------------------------------*
;* C _ F A S T _ C O P Y
;*---------------------------------------------------------------------*
;* Funktion:
;*
;* Schnelles kopieren von maximal 8 Byte von XDATA nach XDATA
;* (speziell zum kopieren von CAN-Objekten).
;*
;* Muss in C folgendermassen deklariert werden
;*
;* void c_fast_copy (unsigned char xdata *arr1,
;* unsigned char xdata *arr2,
;* unsigned char length);
;*
;*
;*---------------------------------------------------------------------*
;* Parameter:
;*
;* arr1 : Adresse der Source Daten (R6/R7)
;* arr2 : Adresse der Destination Daten (R4/R5)
;* length : Anzahl Bytes zum kopieren (R3)
;*
;*---------------------------------------------------------------------*/
?PR?_c_fast_copy?CANUTIL SEGMENT CODE
RSEG ?PR?_c_fast_copy?CANUTIL
_c_fast_copy:
; L刵ge in B laden und Test ob L刵ge 0
MOV B, R3
MOV A, R3
JZ CFC_L_2 ; L刵ge ist 0
CFC_L_1: ; Kopierschleife
; DPTR mit Startadresse laden
MOV DPH, R6
MOV DPL, R7
; Wert in Akku
MOVX A, @DPTR
; Startadresse inkrementieren
INC DPTR
; Startadresse zur乧kspeichern
MOV R6, DPH
MOV R7, DPL
; DPTR mit Endadresse laden
MOV DPH, R4
MOV DPL, R5
; Wert kopieren
MOVX @DPTR, A
; Endadresse inkrementieren
INC DPTR
; Endadresse zur乧kspeichern
MOV R4, DPH
MOV R5, DPL
; Schleifentest
DJNZ B, CFC_L_1
CFC_L_2: RET
END
;------------------------------------------------------------------------
; ENDE CANUTIL
;------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -