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 | ||
| ||
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) |