Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: messen von zwei pwm-signalen Kategorie: Programmierung (von Cris, http://www.crisullmann.de - 9.11.2004 9:16)
Als Antwort auf Re: messen von zwei pwm-signalen von jeff - 8.11.2004 18:46
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, C-Control II Station, CC2-Application-Board, eigenes Board, OSOPT_V2
Hallo Jeff,

hier ein kleines Beispiel des Assemblerprogrammes

OS_PUSH_R12 EQU 075D6H
OS_POP_R4 EQU 0765AH


; Definition Pins
PSS_D DEFB P1L.4 ;digitales PSS-Signal

;       neue Systemvariablen
Ct_Adr EQU 0F7A6h       ;gezählte Impulse gesamt


userseg SECTION CODE word at 30000H    
assume dpp3:SYSTEM


;********************************************
public Data_init
name Data_init
Data_init PROC far
CALLS OS_POP_R4
      MOV R2,#Ct_Adr
EXTS #0,#1
MOV [R2],R4 ;store Buffer Address
POP R1
POP R1
RETS
Data_init ENDP

public PSS_Data
name PSS_Data
PSS_Data PROC far
MOV R2,#Ct_Adr
EXTS #0,#1
MOV R1,[R2]
MOV R2,#0
EXTS #8,#1
MOV [R1],R2
ADD R1,#2
EXTS #8,#1
MOV [R1],R2
      POP R1
        POP R1
        RETS
PSS_Data ENDP

public PSS_ISR
name PSS_ISR
PSS_ISR PROC far
PUSH R0
PUSH R1
PUSH R2
MOV R2,#Ct_Adr
EXTS #0,#1
MOV R1,[R2]

EXTS #8,#1
MOV R2,[R1]
ADD R2,#1
EXTS #8,#1
MOV [R1],R2

JB PSS_D,PSS1 ;if low
ADD R1,#2
EXTS #8,#1
MOV R2,[R1]
ADD R2,#1
EXTS #8,#1
MOV [R1],R2

PSS1: POP R2
POP R1
POP R0
RETS
PSS_ISR ENDP

Ich habe den internen Zähler von P1H0 zum Zwischenspeichern der Variablenadressen
benutzt. Den Interrupt von P1H0 habe ich einfach durch eine "leere" Funktion ersetzt.

In C2 kannst Du das ASM-Programm wie folgt einbinden:

const userseg=3;
const P1H0_ISR=0x006E;
const PSS_ISR=0x0034;
const get_Data=0x0014;
const Data_Init=0x0000;

//hier mĂĽssen Deine Adressen rein

type TBuffer
{
 int Total_Ct;
 int PSS_Ct;
}


inline function Var_init(TBuffer Buffer)
{
       inline vmcodes.VM_LOAD_IMMEDIATE_BYTE+(userseg shl 8);
       inline vmcodes.VM_LOAD_IMMEDIATE_INT;
       inline Data_Init;
       inline vmcodes.VM_SYSCALL;
}

inline function PSS_Clear()
{
       inline vmcodes.VM_LOAD_IMMEDIATE_BYTE+(userseg shl 8);
       inline vmcodes.VM_LOAD_IMMEDIATE_INT;
       inline get_Data;
       inline vmcodes.VM_SYSCALL;
}

function PSS_Init()
{
     Var_init(Buffer);
     system.hook(system.EVENT_P1H0,userseg,P1H0_ISR,system.HOOK_REPLACE);
     system.hook(system.EVENT_TIMER,userseg,PSS_ISR,system.HOOK_AFTER);
}

TBuffer PSS_Data;

Die Variable PSS_Data enthält die Gesamtanzahl der Aufrufe (also die Zeit in ms) sowie die Zeit in ms
mit High-Pege an P1H4.

Viel Spass beim Probieren

Cris  

Meine Seite: http://www.crisullmann.de


    Antwort schreiben


Antworten:

Re: messen von zwei pwm-signalen (von jeff - 9.11.2004 22:33)
Bitte Code- & ASM-Tags benutzen (von André H. - 9.11.2004 9:55)