![]() |
Главная Микроконтроллеры [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] Текст программы: Микроконтроллер: AI90S2313 ((include <io2313.h> ((include <tnacros. h> Инициализация портов ввода/вывода void init ports(void) DDRB = OxFF: PORTB = OxFF; DDRD = 0x00; PORTD = 0x00; > Порт В работает на вывод Порт D работает на ввод Временная задержка void delayO { unsigned char a, b; for (a = 1; a; a++) for (b = 1: b: b++): > void tnain(void) { init portsO; PORTB = Oxff delayO; PORTB = 0x00 delayO; > Инициализация портов Погасили все светодиоды Зажгли все светодиоды 4.4. Компилятор языка С AVR GCC Этот компилятор принципиально отличается от описанных выше тем, что он бесшхатно распространяется, но при этом не имеет вообще никаких ограничений. Дело в том, что первоначальный вариант компилятора существовал (и существует) для операционной системы Линукс, практически, это - тот же компилятор, адаптированный для работы в среде Windows. По этой причине им несколько непривычно пользоваться, но он имеет достаточно неплохие характеристики. Нижеприведенные программы идут в комплекте с свободно распространяемым компилятором AVR GCC. Мигание свегодиодами Автор: Volker 0th. Мигает светодиодами на плате STK200. Текст программы: sinclude <io.h> typedef unsigned char u08; int main(void) { u08 led, i. ], k; outp(Oxff,DDRB); led = 1; for (;:) { outpded, PORTB); led «= 1 if died) led = 1 for (i=0; for(j=0 i<255; i++) i<255;i++) k++; /• Bee выводы порта В работают на вывод /• Инициализировать начальное состояние •/ /• Инвертировать выход. О - светодиод включвн */ /•К следующему светодиоду */ /* Переполнение: снова начать с линии ВО •/ /• Цикл формирования временной задержки •/ /• Вложенный цикл формирования временной задержки /* Произвольное действие */ /* Чтобы чем-то "занять" микроконтроллер */ Мигание светодиодами с использованием таймера О Автор: Volker 0th. Мигает светодиодами, подключенными к порту В под управлением таймера 0. Текст программы: Sinclude <io.h> Sinclude <interrupt.h> Sinclude <signal.h> unsigned char led; SIGNAL(SIG OVERFLOWO) ( outpCled, PORTB); led «= 1; if (lied) led = 1; /* Обработчик прерывания переполнения таймера О •/ /• Инвертировать выходные линии. О - светодиод горит */ /• К следующему светодиоду •/ /* Переполнение: начать снова с линии ВО •/ int tnain(void) {
Иллюстрация использования внешних прерываний INTO и INT1 и препроцессора Автор: Volker 0th. Текст программы: ((include <io.h> ((include <signal.h> ((include <interrupt.h> ((ifdef AVR ATtnega103 ((define AVR MEGA 1 ((else ((ifdef AVR ATtnega603 ((define AVR MEGA 2 ((else ((ifdef AVRATtnegaiei ((define AVR ME(3A 3 ((else ((define AVR MEGA 0 ((endif ((endif ((endif typedef unsigned char u08, SIGNAL(SIG INTERRlPTO) /• Обработчик внешнего прерывания intO ♦/ register u08 led = inp(PORTB); if (led & 1) led &= "OxOf; else led 1= O/Of; outp(0, TCNTO); /• Сбросить гаймер. для возможности повторного •/ /• прерывания •/ [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.0011 |