?? serial.c
字號:
/* ATmega103 serial.c file
Author : Robert Stuart
Company : PDL Industries Ltd
Date of Creation : 10 April 2000
Function :
*/
/* include */
#include "serial.h"
void SerialInitialise( void )
{
UBRR = BAUD_9600;
UCR = 0x00;
UART_TRANSMIT_ON;
UART_RECEIVE_ON;
UCR |= BIT(RXCIE);
for ( UARTIndex = 0; UARTIndex < 16; UARTIndex++ )
UARTMessage[UARTIndex] = CHARACTER_NULL;
}
void RxdCompleteInterrupt( void )
{
UARTIndex++;
if ( UARTIndex < 10 )
UARTMessage[UARTIndex] = UDR;
switch ( UDR )
{
case RXD_START_HEADER : for ( UARTIndex = 1; UARTIndex < 16; UARTIndex++ )
UARTMessage[UARTIndex] = CHARACTER_NULL;
UARTIndex = 0;
UARTMessage[UARTIndex] = UDR;
break;
case RXD_FINISH_HEADER : ExecuteCommand(); break;
}
}
void ExecuteCommand( void )
{
switch ( UARTMessage[1] )
{
case 'E' : ReadOrWriteEEPROM(); break;
case 'F' : ReadFlash(); break;
}
if ( strcmp(UARTMessage, "<Hello>") == 0 )
{
UARTMessage[0] = TXD_START_HEADER;
UARTMessage[7] = TXD_FINISH_HEADER;
UARTMessage[8] = CHARACTER_NULL;
SendUARTMessage();
}
}
void ReadOrWriteEEPROM( void )
{
unsigned char data;
switch ( UARTMessage[2] )
{
case 'R' : if ( UARTIndex == 7 )
{
data = EEPROMread(CalculateAddress());
UARTMessage[0] = TXD_START_HEADER;
UARTMessage[2] = 'E';
UARTMessage[7] = HEX((data >> 4));
UARTMessage[8] = HEX((data - ((data >> 4) << 4)));
UARTMessage[9] = TXD_FINISH_HEADER;
UARTMessage[10] = CHARACTER_NULL;
SendUARTMessage();
}
break;
case 'W' : if ( UARTIndex == 9 && !EEPROM_BUSY )
{
EEPROMwrite(CalculateAddress(), CalculateData());
UARTMessage[0] = TXD_START_HEADER;
UARTMessage[2] = 'E';
UARTMessage[9] = TXD_FINISH_HEADER;
UARTMessage[10] = CHARACTER_NULL;
SendUARTMessage();
}
break;
}
}
void ReadFlash( void )
{
unsigned char data;
if ( UARTMessage[2] == 'R' && UARTIndex == 7 )
{
data = *(unsigned char *) CalculateAddress();
UARTMessage[0] = TXD_START_HEADER;
UARTMessage[2] = 'F';
UARTMessage[7] = HEX((data >> 4));
UARTMessage[8] = HEX((data - ((data >> 4) << 4)));
UARTMessage[9] = TXD_FINISH_HEADER;
UARTMessage[10] = CHARACTER_NULL;
SendUARTMessage();
}
}
int CalculateAddress( void )
{
return DECIMAL(UARTMessage[6]) +
(DECIMAL(UARTMessage[5]) << 4) +
(DECIMAL(UARTMessage[4]) << 8) +
(DECIMAL(UARTMessage[3]) << 12);
}
unsigned char CalculateData( void )
{
return DECIMAL(UARTMessage[8]) +
(DECIMAL(UARTMessage[7]) << 4);
}
void SendUARTMessage( void )
{
GID;
printf(UARTMessage);
GIE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -