canutil.a51

来自「RTX51 example for Intel 82526. it contai」· A51 代码 · 共 116 行

A51
116
字号
$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           :   CANUTIL.A51                                  *
;*                                                                      *
;*  Modulname          :   CANUTIL                                      *
;*                                                                      *
;*  Zielsystem         :   Jedes 8051 System mit einem Philips          *
;*                         82C200 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 + =
减小字号Ctrl + -
显示快捷键?