Главная  Микроконтроллеры 

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [ 46 ] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93]

int main(void) (

outp(Oxff,DDRB); /• Все линии порта В на вывод •/

outp(OxOO, PORTB); /• Зажечь все светодиоды •/

/• Разрешить прерывания RxD/TxD •/ OUtp(( 1«RXCIE) I (1«TXCIE) I (1«RXEN) (1«TXEN) .UCR); /• Установить скорость 9600 •/ Outp(UART BAUD SELECT, UBRR);

sei(); /• Разрешить прерывания •/

read counter = 0; /• Начать читать с первого байта в EEPROM «/

write counter = 0; /« Начать запись с первого байта в EEPROM •/

outpCK, UDR); /• Записать 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) $00ro = 240 = 10.0*(7.5*3.2) $0017 = 23 = 10.0*(7-5/3.2)

Текст программы:

((include <io.h> ((include <lnterrupt. h> ((include <signal.h>

((define F CPU 4000000 ((define UART BAUD RATE 9600

((define UART BAUD.SELECT (F CPU/(UARr BAUD RATE.161)-1)

typedef unsigned char u08; typedef char s08; typedef unsigned short u16;



typedef

short s16;

u08 uart ready; uOB •uart data ptr; s08 uart counter; s16 result buf[5]; float a buf[2] = { 7.};

SIGNAL(SIG UART TRANS) (

uart data ptr++; uart counter-;

if (uart counter>0)

outp(*uart data ptr, UDR); else

uart ready = 1;

/« Буфер результата */

/• Обработчик прерывания uart txd готов*/

/• Записать байт в буфер данных •/ /• Готов отсылать •/

void uart send(u08 «buf, u08 size) /• Послать буфер на uart •/ <

if (!uart ready) return; uart ready = 0; uart data ptr = buf; uart counter = size; outp(«buf, UDR);

>

void calc(float a, float b) {

result buf[0] = 0; result buf[1] = (a+b)«10.0; result buf[2] = (a-b)«lO.O; result buf[3] = (a*b)*10.0; result.buf[4-] = (a/b)«lO.O; • .« • •

>

int main(void) {

/• Разрешить прерывания RxD/TxD */

outp( (1«RXCIE) I (1«TXCIE) I (1«TXEN), UCR);

/« Установить скорость */

outp((u08)UART BAUD SELECT, UBRR);

/* Записать первый байт в буфер данных •/ /« Не готов отсылать •/

uart ready = 1; seiO;

/• Готов отсылать •/

/* Разрешить прерывания */

for (;;) < calc(7.5. 3.2);

/• Бесконечный цикл •/ uart send((u08«)resu]t buf, 5"Si2eof(sl6));



Простейшие приемы печати и чтения UART

Автор: Volker Oth.

Назначение: демонстрирует простейшие приемы печати и чтения UART.

Текст программы:

((include "uart.h" ((include <progmem.h>

int main(void) {

u08 data; UART Init();

PRINT("Hello World !"); EOLO;

for (;;) { PRINK-Press any key..."); EOLO:

data = UART ReceiveByteO;

PRINT("You pressed "); UART SendByte(data); PRINT("- whicn is Ox"); UART Printfu08(data); PRINT(" in hexadecimal."); EOLO;

>

/• Инициализация UART •/

/• Бесконечный цикл •/

Получение доступа к данным в памяти программ

Текст программы:

((include <io.h> ((include <progmem, h>

typedef unsigned char u08;

u08 attribute„ ((progmem)) leds[]=<Oxff, 0xe7, ОхсЗ, 0x81, 0x00, 0x81. ОхсЗ, 0xe7>;

int main(void) {

u08 i, j. k, 1;

outp(Oxff.DDRB);

for (;;) { for (1=0; Ksizeofdeds); И+) {

/• Bee выводы порта В на вывод •/



[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [ 46 ] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93]

0.0013