Текст программы:
#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)
Текст программы: