Текст программы:
#include
#include «interrupt. h>
#include «signal. h>
#include «eeprom.h>
#define F_CPU 4000000 /* 4 МГц */
#define UART_BAUD_RATE 9600 /* 9600 бод */
#define EEPR0M_SIZE (E2END+1)
#define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*161)-1)
typedef unsigned char u08;
typedef char s08;
typedef unsigned short u16;
typedef short s16:
u16 read_counter; u16
write_counter;
SIGNAl(SIG_UART_RECV) /* Обработчик прерывания “прием завершен" */
{
register u08 ee_write;
ee_write = inp(UDR); /* Прочитать байт из буфера данных UART */
outp(~ee_write, PORTB); /* Отобразить байт на светодиодах */
eeprom_wb(write_counter, ee_write); /* Записать байт в EEPROM»/
if (++write_counter >= EEPR0M_SIZE) /* Переполнение: установить смещение 0 */
write_counter = 0;
}
SIGNAL(SIG_UART_TRANS) /* Обработчик прерывания "передача завершена" */
{
register u08 ee_read;
ee_read = eeprom_rb(read_counter); /* Прочитать следующий байт из EEprom */
outp(ee_read, UDR); /* Записать байт в буфер данных UART */
if (++read_counter >= write_counter) /* Переполнение: начать с 1-го символа */
read_counter = 0;
}
int main(void)
{
outp(0xff,DDRB); /* Все линии порта В на вывод */
outp(0x00, PORTB); /* Зажечь все светодиоды */
/* Разрешить прерывания RxD/TxD */
outp((1<
/* Установить скорость 9600 */
outp(UART_BAUD_SELECT, UBRR);
sei (); /* разрешить прерывания */
read_counter = 0; /* Начать читать с первого байта в EEPROM */
write_counter = 0; /* Начать запись с первого байта в EEPROH */
outp('#', UDRi); /* Записать 1-й байт в буфер данных UART */
for (;;) {} /* Бесконечный цикл */
}
Автор: Volker Oth.
Демонстрирует использование библиотеки вычислений с плавающей запятой. Выполняет 4 основных арифметических операции. Результаты преобразуются в 16-битовый формат с фиксированной точкой и передаются на настольный ПК с помощью UART. Результаты могут быть просмотрены с помощью программы terminal или подобной:
$0000 (start identifier)
$006b = 107 = 10.0*(7.5+3.2)
$002b = 43 = 10.0*(7.5–3.2)
$00f0 = 240 = 10.0*(7.5*3.2)
$0017 = 23 = 10.0*(7.5/3.2)
Текст программы: