C
für PICs
Grundlagen
von C
Variablen
Funktionen
Operationen
Programmablaufsteuerung
Arrays
und Strings
Pointer
Strukturierte
Typen
PIC-spezifisches
// Takt vom 8 MHz
Resonator /** Configuration ********************************************************/ #pragma config PLLDIV = 2, CPUDIV = OSC1_PLL2, USBDIV = 2, FOSC = HSPLL_HS //CPU=48 MHz #pragma config PWRT = ON #pragma config BOR = OFF // BrownOutReset: off #pragma config VREGEN = ON // USB Voltage Regulator Enable: #pragma config WDT = OFF // Watchdog Timer: off #pragma config MCLRE = ON // MCLR Enable #pragma config PBADEN = OFF // PORTB<4:0> pins are configured as digital I/O on Reset #pragma config LVP = OFF // Low Voltage ICSP: off |
Greift man lesend auf PORTB
zu,
dann werdern die Pegel an den 8 Pins
des Ports B in 8 Bit gewandelt, und diese 8 Bit als
Zahlenwert gelesen.
(Man liest also nicht das Ausgaberegister sondern die
wirklichen
Portpegel.) Von Pins, die auf Input stehen, liest man dabei
den Pegel,
der von außen eingespeist wird. Von Pins, die auf
Output stehen,
liest man natürlich den Wert des Ausgangsregisters, da
der ja dann
am
Pin ausgegeben wird. Man kann auch das Ausgangsregister lesen. Es hat den Namen LATB (ensprechend LATA, LATC ...). In diesem Fall liest man exakt den Wert zurück, den man zuvor in PORTB geschrieben hatte. Die Input-Pins haben nun keinen Einfluss. Wozu das gut ist, sehen wir in Kürze. Man kan LATB auch beschreiben, das ist aber mit dem Beschreiben von PORTB identisch. Die nebenstehende Skizze zeigt das Prinzip für ein beliebiges Portpin. |
.... extern volatile near unsigned char PORTB; extern volatile near union { struct { unsigned RB0:1; unsigned RB1:1; unsigned RB2:1; unsigned RB3:1; unsigned RB4:1; unsigned RB5:1; unsigned RB6:1; unsigned RB7:1; }; struct { unsigned INT0:1; unsigned INT1:1; unsigned INT2:1; }; struct { unsigned :5; unsigned PGM:1; unsigned PGC:1; unsigned PGD:1; }; } PORTBbits; .... extern volatile near unsigned char LATB; extern volatile near struct { unsigned LATB0:1; unsigned LATB1:1; unsigned LATB2:1; unsigned LATB3:1; unsigned LATB4:1; unsigned LATB5:1; unsigned LATB6:1; unsigned LATB7:1; } LATBbits; .... extern volatile near unsigned char TRISB; extern volatile near struct { unsigned TRISB0:1; unsigned TRISB1:1; unsigned TRISB2:1; unsigned TRISB3:1; unsigned TRISB4:1; unsigned TRISB5:1; unsigned TRISB6:1; unsigned TRISB7:1; } TRISBbits; .... |
; aus P18F2550.INC .... PORTA EQU H'0F80' PORTB EQU H'0F81' PORTC EQU H'0F82' PORTE EQU H'0F84' LATA EQU H'0F89' LATB EQU H'0F8A' LATC EQU H'0F8B' DDRA EQU H'0F92' TRISA EQU H'0F92' DDRB EQU H'0F93' TRISB EQU H'0F93' DDRC EQU H'0F94' TRISC EQU H'0F94' .... ;----- PORTB Bits ----------------------------------------------------- RB0 EQU H'0000' RB1 EQU H'0001' RB2 EQU H'0002' RB3 EQU H'0003' RB4 EQU H'0004' RB5 EQU H'0005' RB6 EQU H'0006' RB7 EQU H'0007' INT0 EQU H'0000' INT1 EQU H'0001' INT2 EQU H'0002' PGM EQU H'0005' PGC EQU H'0006' PGD EQU H'0007' .... ;----- LATB Bits ----------------------------------------------------- LATB0 EQU H'0000' LATB1 EQU H'0001' LATB2 EQU H'0002' LATB3 EQU H'0003' LATB4 EQU H'0004' LATB5 EQU H'0005' LATB6 EQU H'0006' LATB7 EQU H'0007' .... ;----- TRISB Bits ----------------------------------------------------- TRISB0 EQU H'0000' TRISB1 EQU H'0001' TRISB2 EQU H'0002' TRISB3 EQU H'0003' TRISB4 EQU H'0004' TRISB5 EQU H'0005' TRISB6 EQU H'0006' TRISB7 EQU H'0007' .... |
... /** I N T E R R U P T S *******************************************/ #pragma interruptlow InterruptHandler void InterruptHandler (void) { .... .... .... } #pragma code _HIGH_INTERRUPT_VECTOR = 0x000008 void _high_ISR (void) { _asm goto InterruptHandler // Sprung zur Interruptroutine _endasm } #pragma code _LOW_INTERRUPT_VECTOR = 0x000018 void _low_ISR (void) { _asm goto InterruptHandler // Sprung zur Interruptroutine _endasm } #pragma code ... |
- |
acos(x) | Arcuscosinus (der inverse
Cosinus) |
- |
asin(x) | Arcussinus (der inverse
Sinus) |
- |
atan(x) | Arcustangens (der inverse
Tangens) |
- |
atan2(y, x) |
Ermittelt den Winkel eines Vektors aus der Länge seiner Projektionen auf die Koordinatenachsen x und y |
- |
ceil(x) | Ermittelt den kleinsten
Ganzzahlwert, der größer oder gleich einer Zahl
ist |
- |
cos(x) | Cosinus |
- |
cosh(x) | Sinus Hyperbolicus |
- |
exp(x) | Ermittelt e hoch x |
- |
fabs(x) | Absolutwert |
- |
floor(x) | Größter enthaltener Ganzzahlwert |
- |
fmod(x, y) | Ermittelt x Modulo y |
- |
frexp | |
- |
ieeetomchp(x) | Wandlung aus dem IEEE-754 32-bit Fließkommaformat in das Microchip 32-bit Fließkommaformat |
- |
ldexp(x, n) |
Ermittelt x * (2 hoch n) |
- |
log(x) | Natürlicher
Logarithmus |
- |
log10(x) | Logarithmus zur Basis 10 |
- |
mchptoieee(x) | Wandlung aus dem Microchip 32-bit Fließkommaformat in das IEEE-754 32-bit Fließkommaformat |
- |
modf(x) | |
- |
pow | CErmittelt x hoch y |
- |
sin(x) | Sinus |
- |
sinh(x) | Sinus Hyperbolicus |
- |
sqrt(x) | Quadratwurzel |
- |
tan(x) | Tangens |
- |
tanh(x) | Tangens Hyperbolicus |