🇩🇪
Zitat von: ^Cobra in Gestern um 23:02:39 CESTwo ist die Schnittstelle zwischen dein in c vergebenen pointern und im assamblercode
float4li(get0,sr_1)
Zitat von: pic18 in Gestern um 22:37:03 CESTIch meinte diese hier:Zitat von: ^Cobra in Gestern um 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 Gestern um 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 Gestern um 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 Gestern um 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 Gestern um 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.
Zitat von: pic18 in 08.04.2025, 10:38:31 CESTich habe den alten C Compiler in MBLAB-X installiert. Mit xc8 laufen meine alten Programme nicht. Ich kann ja mal ein paar Bilder von meinem Projekt heute Abend schicken.