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

[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) {

outp(0xff,DDRB);

Bee выводы порта В работают на вывод «/

outp((1«T0IE0). TIMSK);

Разрешить прерывание по переполнению таймера 0

outp(0, TCNTO);

Сбросить (обнулить) TCNTO */

outp(5. TCCRO);

Включить предварительное деление СК/1024 •/

led = 1;

Инициализация начального состояния светодиодов

seiO;

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

for (;;) {)

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

Иллюстрация использования внешних прерываний 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.0021