1 | #include <p18cxxx.h>
|
2 | #include <usart.h>
|
3 | #include <stdio.h>
|
4 | #include <stdlib.h>
|
5 |
|
6 | #include "delays.h"
|
7 | #include <string.h>
|
8 |
|
9 |
|
10 | /** CONFIGURATION **************************************************/
|
11 |
|
12 | #pragma config PLLSEL = PLL3X // 3X PLL multiplier selected
|
13 | #pragma config CFGPLLEN = OFF // PLL turned on during execution
|
14 | #pragma config CPUDIV = NOCLKDIV // 1:1 mode (for 48MHz CPU)
|
15 | #pragma config LS48MHZ = SYS48X8 // Clock div / 8 in Low Speed USB mode
|
16 | #pragma config FOSC = INTOSCIO // HFINTOSC selected at powerup, no clock out
|
17 | #pragma config PCLKEN = OFF // Primary oscillator driver
|
18 | #pragma config FCMEN = OFF // Fail safe clock monitor
|
19 | #pragma config IESO = OFF // Internal/external switchover (two speed startup)
|
20 | #pragma config nPWRTEN = OFF // Power up timer
|
21 | #pragma config BOREN = SBORDIS // BOR enabled
|
22 | #pragma config nLPBOR = OFF // Low Power BOR
|
23 | //#pragma config WDTEN = SWON // Watchdog Timer controlled by SWDTEN
|
24 | #pragma config WDTEN = OFF // Watchdog Timer controlled by SWDTEN
|
25 | #pragma config WDTPS = 32768 // WDT postscalar
|
26 | #pragma config PBADEN = ON // Port B Digital/Analog Powerup Behavior
|
27 | #pragma config SDOMX = RB3 // SDO function location
|
28 | #pragma config LVP = OFF // Low voltage programming
|
29 | #pragma config MCLRE = ON // MCLR function enabled (RE3 disabled)
|
30 | #pragma config STVREN = ON // Stack overflow reset
|
31 | #pragma config XINST = OFF // Extended instruction set
|
32 |
|
33 |
|
34 | // 16 MHz
|
35 | #define FOSC 16000000 // in a global header
|
36 | #define BAUDRATE 115200 // ""
|
37 | #define SPBRG_VAL (((FOSC/BAUDRATE)+2)/4)-1 // BRG16=1, BGH=1 !
|
38 |
|
39 | /** I/O pin definitions ********************************************/
|
40 | #define INPUT_PIN 1
|
41 | #define OUTPUT_PIN 0
|
42 |
|
43 | void __init(void)
|
44 | {
|
45 | OSCCONbits.IRCF = 0b111; // 16MHz
|
46 | OSCCONbits.IDLEN = 0; // Enter Sleep Mode on instruction
|
47 |
|
48 | baud1USART(BAUD_IDLE_RX_PIN_STATE_HIGH &
|
49 | BAUD_IDLE_TX_PIN_STATE_HIGH &
|
50 | BAUD_16_BIT_RATE &
|
51 | BAUD_WAKEUP_ON &
|
52 | BAUD_AUTO_OFF);
|
53 |
|
54 | Open1USART( USART_TX_INT_OFF & USART_RX_INT_OFF &
|
55 | USART_ASYNCH_MODE & USART_EIGHT_BIT &
|
56 | USART_CONT_RX &
|
57 | USART_BRGH_HIGH & USART_ADDEN_OFF,
|
58 | SPBRG_VAL );
|
59 |
|
60 |
|
61 | void UserInit(void)
|
62 | {
|
63 |
|
64 | __init(); // UART INIT
|
65 |
|
66 |
|
67 | // setze unbenutzte Eingänge auf Output und definierten Zustand (hier: 0)
|
68 | TRISAbits.TRISA1 = OUTPUT_PIN;
|
69 | TRISAbits.TRISA2 = OUTPUT_PIN;
|
70 | TRISAbits.TRISA3 = OUTPUT_PIN;
|
71 |
|
72 |
|
73 | LATAbits.LATA1 = 0;
|
74 | LATAbits.LATA2 = 0;
|
75 | LATAbits.LATA3 = 0;
|
76 |
|
77 | TRISCbits.TRISC0 = OUTPUT_PIN;
|
78 | TRISCbits.TRISC4 = OUTPUT_PIN;
|
79 | TRISCbits.TRISC5 = OUTPUT_PIN;
|
80 |
|
81 | LATCbits.LATC0 = 0;
|
82 | LATCbits.LATC4 = 0;
|
83 | LATCbits.LATC5 = 0;
|
84 | }
|
85 |
|
86 | }
|
87 |
|
88 | void InitializeSystem(void)
|
89 | {
|
90 |
|
91 | ANSELA = 0x00; // Set All Pins to digital
|
92 | ANSELB = 0x00;
|
93 | ANSELC = 0x00;
|
94 | UserInit();
|
95 |
|
96 | void main(void) {
|
97 |
|
98 | InitializeSystem();
|
99 |
|
100 | Sleep(); // send Pic into Sleep
|
101 | while(1)
|
102 | {
|
103 |
|
104 |
|
105 | }
|
106 | }
|
107 | }
|