![]() |
Главная Микроконтроллеры [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.0009 |