🇩🇪
Zitat von: ^Cobra in 10.04.2025, 23:02:39 CESTwo ist die Schnittstelle zwischen dein in c vergebenen pointern und im assamblercode
float4li(get0,sr_1)
Zitat von: pic18 in 10.04.2025, 22:37:03 CESTIch meinte diese hier:Zitat von: ^Cobra in 10.04.2025, 14:41:01 CEST2 .h einbinden musste welche für mich nichts sagend sindWelche Header Datei meinst Du. Durch einbinden der Header Datei erklärst Du dem Compiler was Du noch alles einfügst. Dies kann Intern sein, oder auch eigenen Programmteile.
Zitat von: ^Cobra in 10.04.2025, 14:41:01 CESTDas Projekt ist nicht Übersetzbar, nicht mal ansatzweise da viele Dateien fehlen.Das ist richtig, da es ein sehr großes Programm ist. Es gibt sehr viele Unterprogramme die auf einander zugreifen. Außerdem habe ich viel über Interrupt gesteuert, da ich so gut wie keine Zeitschleifen benutzt habe, um eine gute Performance zu haben. Ich habe leider im Moment kein einfaches Beispiel zur Hand.
global float4li extern LCD_Out
extern void float4li(char *get, char *erg); char sr_1[10]; // für ASCII Anzeige ("-012.3456";) char get0[10]; //scratchpad RAM (temp LSB, temp MSB, TH, TL, Config,rev5678, CRC)
float4li(get0,sr_1)
;Stk2PushFromReg FSR2L FSR2 sichern MOVFF FSR2L, POSTINC1 MOVFF FSR2H, POSTINC1 ;Stk2CpyToReg -6,FSR2L zeiger ASCII_string nach FSR2 MOVLW 0xfa MOVFF PLUSW1, FSR2L MOVLW 0xfb MOVFF PLUSW1, FSR2H ;StkCpyToReg -4,FSR0L Wert Get_imput nach FSR0 ; movlb merker ; SETF merker,BANKED ;movlw 0xff ; RCALL p_to_fsr0 MOVLW 0xfc MOVFF PLUSW1,FSR0L MOVLW 0xfd MOVFF PLUSW1,FSR0H MOVFF POSTINC0,POSTINC1 ;get_lo zwischenspeichern MOVFF POSTDEC0,INDF1; POSTINC1 ;get_hi
Zitat von: ^Cobra in 10.04.2025, 14:41:01 CESTUnd hier springt der auch in der Sim rein und bleibt für ewig da drinist klar, du hast hier eine Endlosschleife AsmLoop: goto AsmLoop
Zitat von: ^Cobra in 10.04.2025, 14:41:01 CEST2 .h einbinden musste welche für mich nichts sagend sindWelche Header Datei meinst Du. Durch einbinden der Header Datei erklärst Du dem Compiler was Du noch alles einfügst. Dies kann Intern sein, oder auch eigenen Programmteile.
Zitat von: ^Cobra in 10.04.2025, 14:41:01 CESTWerde aber am Ball bleiben und das ein oder andere in C weiter TestenBei größeren Programmen wird es schwer alles in Assembler zu schreiben. Da benötigst Du eine Hochsprache. Wenn ich nur überlege, irgendwelche Rechenoperationen durchzuführen. Einfache Sachen habe ich früher auch in Assembler geschrieben, da du oft einfache Befehle nehmen kannst. Zum Beispiel ein Bit setzen (BSF..), in C musst Du dann eine Oder -Verknüpfung nehmen und bei löschen eines Bits (BCF..) eine Und -Verknüpfung.
#pragma code void main(void) { }
void AsmLoop (void); /** D E C L A R A T I O N S **************************************************/ #pragma code void main(void) { LATB = 0x00; TRISB = 0xFE; while(1) { LATB = 1; Delay10KTCYx(100); LATB = 0; Delay10KTCYx(100); AsmLoop(); }//end while }//end main
#include <stdio.h> #include <stdlib.h> /** I N C L U D E S **********************************************************/ #include "delays.h" // für die Warteschleife /** Configuration ********************************************************/ #include <p18F14K22.h> // CONFIG1H #pragma config FOSC = IRC // Oscillator Selection bits (Internal RC oscillator) #pragma config PLLEN = OFF // 4 X PLL Enable bit (PLL is under software control) #pragma config PCLKEN = ON // Primary Clock Enable bit (Primary clock enabled) #pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor disabled) #pragma config IESO = OFF // Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled) // CONFIG2L #pragma config PWRTEN = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config BOREN = SBORDIS // Brown-out Reset Enable bits (Brown-out Reset enabled in hardware only (SBOREN is disabled)) #pragma config BORV = 19 // Brown Out Reset Voltage bits (VBOR set to 1.9 V nominal) // CONFIG2H #pragma config WDTEN = OFF // Watchdog Timer Enable bit (WDT is controlled by SWDTEN bit of the WDTCON register) #pragma config WDTPS = 32768 // Watchdog Timer Postscale Select bits (1:32768) // CONFIG3H #pragma config HFOFST = OFF // HFINTOSC Fast Start-up bit (The system clock is held off until the HFINTOSC is stable.) #pragma config MCLRE = OFF // MCLR Pin Enable bit (RA3 input pin enabled; MCLR disabled) // CONFIG4L #pragma config STVREN = ON // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset) #pragma config LVP = OFF // Single-Supply ICSP Enable bit (Single-Supply ICSP disabled) #pragma config BBSIZ = OFF // Boot Block Size Select bit (1kW boot block size) #pragma config XINST = OFF // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode)) // CONFIG5L #pragma config CP0 = OFF // Code Protection bit (Block 0 not code-protected) #pragma config CP1 = OFF // Code Protection bit (Block 1 not code-protected) // CONFIG5H #pragma config CPB = OFF // Boot Block Code Protection bit (Boot block not code-protected) #pragma config CPD = OFF // Data EEPROM Code Protection bit (Data EEPROM not code-protected) // CONFIG6L #pragma config WRT0 = OFF // Write Protection bit (Block 0 not write-protected) #pragma config WRT1 = OFF // Write Protection bit (Block 1 not write-protected) // CONFIG6H #pragma config WRTC = OFF // Configuration Register Write Protection bit (Configuration registers not write-protected) #pragma config WRTB = OFF // Boot Block Write Protection bit (Boot block not write-protected) #pragma config WRTD = OFF // Data EEPROM Write Protection bit (Data EEPROM not write-protected) // CONFIG7L #pragma config EBTR0 = OFF // Table Read Protection bit (Block 0 not protected from table reads executed in other blocks) #pragma config EBTR1 = OFF // Table Read Protection bit (Block 1 not protected from table reads executed in other blocks) // CONFIG7H #pragma config EBTRB = OFF // Boot Block Table Read Protection bit (Boot block not protected from table reads executed in other blocks)
global AsmLoop ASM_Code CODE ; let linker place main program AsmLoop: GOTO AsmLoop ; loop forever END
Zitat von: ^Cobra in 09.04.2025, 10:42:31 CESTDein C18 Compiler taucht in meiner Liste nur bei den 18F auf. Bei den 16F kann ich den also erst gar nicht Auswählen.kein sein, dass dieser nur für den 18er ist.
loop CALL Wait250 CLRF STATUS RLF PORTC,f BTFSS PORTC,7 goto loop CALL Taste loop1 CALL Wait250 CLRF STATUS RRF PORTC,f BTFSS PORTC,0 goto loop1 CALL Taste goto loop Taste BTFSC PORTB,4 return goto Taste
; 1 Sekunde warten WaitXS movwf WaitRSec ;in Temp2 steht wie viele Sekunden geartet werden soll WaitS_loop CALL Wait250 CALL Wait250 CALL Wait250 CALL Wait250 decfsz WaitRSec, F ; alle s vorbei? goto WaitS_loop return ;X ms warten 1-255ms einstellbar, Wert muss vohrer in W geladen sein WaitX movwf WaitRms goto wai ; Warteschleife 250 ms Wait250 movlw D'250' ; 250 ms Pause movwf WaitRms ; Warteschleife, Anzahl der Millisekunden steht in loops wai movlw Cloop;.110 ; Zeitkonstante für 1ms berechnung 0,001ms/(1/(Fcyc/4)*SchleifenZyklen) movwf WaitRus Wai2 nop ; nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop decfsz WaitRus, F ; 1 ms vorbei? goto Wai2 ; nein, noch nicht decfsz WaitRms, F ; alle ms vorbei? goto wai ; nein, noch nicht RETLW 0 ; das Warten hat ein Ende ;************************** END ; directive 'end of program'
Zitat von: pic18 in 08.04.2025, 11:29:59 CESTwas geht denn nicht, das Einlesen des Analogwertes? Umfasst die Schleife, welche die LED blinken lässt das ganze Programm oder ist es eine eigene Schleife.
Beim 18er läuft alles? Ist das Prog. noch so wie oben, ich werde es mir mal anschauen, muss aber erst das Datenblatt vom 16er studieren.