#include "sfr_r813.h" #pragma interrupt Timer_X_int; // Eingetragen als Vector 22 #pragma interrupt serial_receive_int; // Eingetragen als Vector 20 int counter = 0; void send_serial_1(unsigned char data); unsigned char receive_serial_1 (void); void UART1_init(void); void status_led(void); void main(void) { /*------------------------------------------------- - Change on-chip oscillator clock to Main clock - -------------------------------------------------*/ prc0 = 1; /* Protect off */ cm13 = 1; /* Xin Xout */ cm15 = 1; /* XCIN-XCOUT drive capacity select bit : HIGH */ cm05 = 0; /* Xin on */ cm16 = 0; /* Main clock = No division mode */ cm17 = 0; cm06 = 0; /* CM16 and CM17 enable */ asm("nop"); /* Waiting for stable of oscillation */ asm("nop"); asm("nop"); asm("nop"); ocd2 = 0; /* Main clock change */ prc0 = 0; /* Protect on */ asm( "\tFSET I"); /* Enable interrupt */ /*------------------------------------------------- - Setting main cycle timer - - 20 MHz * 1/32 * 1/250 * 1/250 => 10 Hz - -------------------------------------------------*/ txmr = 0x00; /* Timer mode for Timer X */ prex = 250-1; /* Set Prescaler X register to 250 */ tx = 250-1; /* Set Timer X register to 250*/ txck0 = 0; /* Timer Count source = f32 */ txck1 = 1; txic = 0x04; /* Timer interrupt priority level = 4 */ s1ric = 0x07; /* UART1 Receive interrupt priority level = 7 */ s1tic = 0x06; /* UART1 Transmit interrupt priority level = 7 */ txs = 1; /* Timer X count start flag -> start */ pd1 = 0x0F; /* Set Port 1.0 - 1.3 be used for output*/ p1 = 0x00; /* Set Port 1.0 - 1.3 to High */ UART1_init(); while (1) { }; } /********************************** *** Timer X interrupt routine *** **********************************/ void Timer_X_int(void) // Funktioniert ohne Probleme alle 0,5 Sekunden { if(counter >= 5) { counter = 0; status_led(); } counter++; } /********************************** *** UART1 interrupt routine *** **********************************/ void serial_receive_int(void) // Wird nur einmal ausgeführt !!!!!! { send_serial_1('O'); send_serial_1('K'); } /********************************** *** Status LED ****************** **********************************/ void status_led(void) { if(p1 == 0x00) { p1 = 0x08; // Wenn LED aus war, schalte die LED an } else { p1 = 0x00; // Sonst, schalte die LED aus } } /********************************** *** UART1 Senderoutine ********** **********************************/ void send_serial_1(unsigned char data) { while (ti_u1c1 == 0); // Wait for transmission buffer emty u1tb = data; // Set transmission data te_u1c1 = 1; // Transmission enabled } /********************************** *** UART1 Initialisierung ******* **********************************/ void UART1_init(void) { u1mr = 0x05; // UART1 transmit/receive mode u1c0 = 0x00; // UART1 transmit/receive control txd1sel=1; u1c1 = 0x05; // Tx, Rx enabled ucon = 0x20; // P00=RXD11, 00100100, 00100000 u1brg = 130-1; // 9600 baud @20MHz }