Bitte Code- & ASM-Tags benutzen Kategorie: Programmierung (von André H. - 9.11.2004 9:55) | |
Als Antwort auf Re: messen von zwei pwm-signalen von Cris - 9.11.2004 9:16
| |
Hallo Cris, Auch eine kleine Bitte von mir: Benutze bitte beim Posten von C2-Quellcode das code-Tag und bei ASM-Code das asm-Tag. Abgesehen davon, da� sich der Quellcode leichter lesen lä�t, wird eine falsche Darstellung vermieden. (Verstümmelung von C2-Code bzw. Darstellung von Tabs bei ASM) Und so nebenbei könnte man dann auch die Suchfunktion gezielt nutzen, um C2-Code bzw. ASM-Routinen im Forum zu suchen. Einfach nach "<code>" oder nach "<asm>" suchen und schon erhält man alle Postings mit entsprechendem Inhalt. Ich bin so frei und poste anbei Deinen Code inkl. gesetzter Tags. MfG André H. > 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. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | |
Antwort schreiben Antworten: |