1 | //************************************************************
|
2 | //Testing USART
|
3 | //04.11.09
|
4 | //************************************************************
|
5 |
|
6 | /** C O N F I G U R A T I O N B I T S ******************************/
|
7 |
|
8 | #pragma config FOSC = INTIO67, FCMEN = OFF, IESO = OFF // CONFIG1H
|
9 | #pragma config PWRT = OFF, BOREN = SBORDIS, BORV = 30 // CONFIG2L
|
10 | #pragma config WDTEN = OFF, WDTPS = 32768 // CONFIG2H
|
11 | #pragma config MCLRE = OFF, LPT1OSC = OFF, PBADEN = ON, CCP2MX = PORTC // CONFIG3H
|
12 | #pragma config STVREN = ON, LVP = OFF, XINST = OFF // CONFIG4L
|
13 | #pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF // CONFIG5L
|
14 | #pragma config CPB = OFF, CPD = OFF // CONFIG5H
|
15 | #pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF // CONFIG6L
|
16 | #pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF // CONFIG6H
|
17 | #pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF // CONFIG7L
|
18 | #pragma config EBTRB = OFF // CONFIG7H
|
19 |
|
20 |
|
21 |
|
22 | #include <p18f45k20.h>
|
23 | #include "delays.h"
|
24 |
|
25 | void InterruptServiceHigh(void);
|
26 | #pragma code InterruptVectorHigh = 0x08
|
27 | void InterruptVectorHigh (void)
|
28 | {
|
29 | _asm
|
30 | goto InterruptServiceHigh //jump to interrupt routine
|
31 | _endasm
|
32 | }
|
33 |
|
34 |
|
35 | int println(char buf[]) {
|
36 | int i;
|
37 | for (i = 0; i<20; i++) {
|
38 | while(!TXSTAbits.TRMT) {}
|
39 | while(!PIR1bits.TXIF){}
|
40 | TXREG = buf[i];
|
41 | }
|
42 | }
|
43 |
|
44 | void main(void) {
|
45 |
|
46 | char test[16]= "Ich bin ein PIC!\n";
|
47 |
|
48 | OSCCON= 0b01010011; //4MHz
|
49 | OSCTUNEbits.PLLEN = 0; // x4 PLL disabled
|
50 |
|
51 | SPBRG = 0b00011001; // für 9600er Baudrate
|
52 | SPBRGH = 0x00;
|
53 | TRISC=0b11000000; // RX and TX enable
|
54 | BAUDCON = 0b11100000;
|
55 |
|
56 | ANSEL = 0b00000000;
|
57 | ANSELH = 0b00000000;
|
58 |
|
59 | TXSTAbits.SYNC = 0;
|
60 | TXSTAbits.BRGH = 1;
|
61 | TXSTAbits.TX9 = 0;
|
62 | TXSTAbits.TX9D = 0;
|
63 | TXSTAbits.TXEN = 1;
|
64 |
|
65 | RCSTAbits.SPEN = 1;
|
66 | RCSTAbits.RX9 = 0;
|
67 | RCSTAbits.CREN = 1;
|
68 | RCSTAbits.ADDEN = 0;
|
69 |
|
70 | PIE1bits.RCIE = 1;
|
71 |
|
72 | INTCONbits.GIEL = 1;
|
73 | INTCONbits.GIEH = 1;
|
74 | INTCONbits.PEIE = 1;
|
75 |
|
76 | TRISC=0b10011111; // RX and TX enablen
|
77 | TRISD=0b00000000;
|
78 | LATD = 0x00;
|
79 |
|
80 | println (test);
|
81 | Delay1KTCYx(30);
|
82 |
|
83 | while(1) {
|
84 |
|
85 | }
|
86 | }
|
87 |
|
88 | #pragma interrupt InterruptServiceHigh
|
89 | void InterruptServiceHigh(void)
|
90 | {
|
91 | if (PIR1bits.RCIF)
|
92 | {
|
93 | int zahl = 0;
|
94 | zahl = RCREG;
|
95 | while(!PIR1bits.TXIF)
|
96 | {}
|
97 | Delay1KTCYx(10);
|
98 | TXREG = zahl;
|
99 | LATD = zahl;
|
100 | PIR1bits.RCIF = 0;
|
101 |
|
102 |
|
103 | }
|
104 | }
|