Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » FastAVR » Исходники FASTa


Исходники FASTa

Сообщений 1 страница 28 из 28

1

А здесь по предложению Александра Д. будет форум о FastAVR. Как никак а близкий родсвенник BASCOMa :cool:

0

2

ну, поспорю: не столько родственник, сколько коллега :)
СКАЧАТЬ FastAVR: FastAVR-413-Free.zip

начнем:

вот ссылка на введение в среду разработки программ для FastAVR. Скажем, часть Первая. http://pic-avr.narod.ru/FastAVR_Rus-01-03.zip

вот отличительные особенности FastAVR: (позволю себе цитату со своего сайта)
Самым удобным компилятором я считаю "FastAVR" (MicroDESIGN). Синтаксис Basic подобного языка.
Очень удобный и продуманный интерфейс. Встроенны "помощники": "терминал", калькулятор таймеров, знакогенератор для ЖК и другое... Отличительная особенность: генерирует стандартный ассемблер AVR. Можно посмотреть сгенерированный код.
Я пробую переводить фирменное описание к данному этому компилятору. Буду выкладывать частями, по мере перевода материалов. Ссылка http://pic-avr.narod.ru/avr/compilers.htm

Отредактировано Александр Д. (2009-12-10 13:26:20)

0

3

первая програма. В FastAVR, как и во многих компиляторах этого уровня, есть встроенная поддержка пультов ДУ (стандарт RC5). Но встроенная функция мне не понравилась. Я написал свою программу.
Она ждет нажатия кнопки на любом пульте, после чего выдает четыре байта в последовательном коде в COM порт со скоростью 19200: первые два символа - адрес (условно назвал) и два -данные. Для того, чтобы привязать пульт к совему устройству достаточно обрабатывать именно эти последние два байта.
как работает программа: она НЕ декодирует RC5! я поставил задачу ОТЛИЧИТЬ одну нажатую на пульте кнопку от другой, поэтому бифазное кодирование (принятое в RC) не стал декодировать. Я поступил проще: длинная пачка импульсов - ноль, короткая - один. ВСЁ. Задача выполнена точно. Программа написана так, чтобы не использовать прерывания и таймер - а вдруг в другой программе я задействую их?

уточнение: четвёртый байт - инверсное значение третьего

Код:
' Считываем с фотоприемника данные ИК-пульта
' Выдаем в RS-232 как 4 строки символов (0-255)
' Не использует прерываний и таймера

$Device= attiny2313        ' used device
$Stack = 32                ' stack depth
$Clock = 8                ' adjust for used crystal
$Baud = 19200

$Def in_signal = PIND.6
Declare Function RX () As Byte 

Dim temp As Byte
Dim DATA_DISEqC1 As Byte, DATA_DISEqC2 As Byte
Dim DATA_DISEqC3 As Byte, DATA_DISEqC4 As Byte


'- Инициализация всей периферии
DDRD=0: PORTD =0    ' INPut
DDRB=255: PORTB =0    ' OUTput

Print "Start"

start_prog:   '  ------- НАЧАЛО ПРОГРАММЫ  --- Основной цикл ---

    WaitMs 100
    While Not in_signal: Wend
    
    aa: temp = 248                ' Ждём _длинную_ паузу в сигнале >7500 us!
    ab: If in_signal Then GoTo aa
    WaitUs 3                            ' Пауза
    Decr temp: If temp >1 Then GoTo ab
    
    bb: temp = 110                ' Ждём _длинный  сигнал
    bc: If Not in_signal Then GoTo bb
    WaitUs 3                            ' Пауза
    Decr temp: If temp >1 Then GoTo bc
    While in_signal: Wend        ' Ждем завершения сигнала

DATA_DISEqC1 = RX()
DATA_DISEqC2 = RX()
DATA_DISEqC3 = RX()
DATA_DISEqC4 = RX()

Print DATA_DISEqC1
Print DATA_DISEqC2
Print DATA_DISEqC3
Print DATA_DISEqC4
Print

GoTo start_prog


'==================   Функции  ===================
'===================== примем 8 бит ============
Function RX() As Byte
 Local tiki As Byte, temp3 As Byte, DATA_RX As Byte

    For temp3 = 7 To 0 Step -1
        tiki=0
        Shift(Left, 1, DATA_RX)
        
        While Not in_signal: Wend ' Ждем 1 
        WaitUs 30        '  пауза на часть импульса
        
        While in_signal
        Incr tiki: WaitUs 1                ' Пауза 10 мкс
        Wend
         
        If tiki >100 Then DATA_RX = DATA_RX Or 1 'длинный -> бит =1
        
        While in_signal: Wend         ' Ждем завершения сигнала
    Next temp3

 Return DATA_RX 
End Function

Отредактировано Александр Д. (2009-12-10 13:28:12)

+1

4

а вот исходник, в котором принятые с пульта данные выдаются на ЖК индикатор НТ-1613 по два байта
добавлена фишка: мигает свдиод при распознавании посылки от пульта, удобно и красиво :)

вот видео работы устройства:
http://narod.ru/disk/24822911000/MOV00014.3gp.html

Код:
' Считываем с фотоприемника данные ИК-пульта
' Выдаем на индикатор НТ-1613 по два байта
' Не использует прерываний и таймера

$Device= attiny2313        ' used device
$Stack = 32                ' stack depth
$Clock = 8                ' adjust for used crystal

$Def in_signal = PIND.6
$Def pinLCDdat = PORTB.0
$Def pinLCDclk = PORTB.1
$Def LED = PORTB.2

Declare Sub SendLCD(LCDdataX As Byte)
Declare Sub ScrollLCD(LCDdvigatSinvolov As Byte)
Declare Sub SendLCDstring(LCDdataX As Byte)
Declare Function RX () As Byte 

Dim temp As Byte
Dim DATA_1 As Byte, DATA_2 As Byte
Dim DATA_3 As Byte, DATA_4 As Byte
Dim stringS As String*3, stringSv As String*1

'- Инициализация всей периферии
DDRD=0: PORTD =0    ' INPut
DDRB=255: PORTB =0    ' OUTput
    
start_prog:   '  ------- НАЧАЛО ПРОГРАММЫ  --- Основной цикл ---

    WaitMs 100
    While Not in_signal: Wend
    
    aa: temp = 248                ' Ждём _длинную_ паузу в сигнале >7500 us!
    ab: If in_signal Then GoTo aa
    WaitUs 3                            ' Пауза
    Decr temp: If temp >1 Then GoTo ab
    
    bb: temp = 110                ' Ждём _длинный  сигнал
    bc: If Not in_signal Then GoTo bb
    WaitUs 3                            ' Пауза
    Decr temp: If temp >1 Then GoTo bc
    While in_signal: Wend        ' Ждем завершения сигнала
led =1
    
    DATA_1 = RX()
    DATA_2 = RX()
    DATA_3 = RX()
    DATA_4 = RX()
    
led =0
    
    ScrollLCD(10)    ' Очистим экран
    
    SendLCDstring (DATA_1)
    ScrollLCD(1)
    
    SendLCDstring (DATA_2)
    ScrollLCD(1): SendLCD (13)
    
    Wait 1
    ScrollLCD(10)    ' Очистим экран
    
    SendLCDstring (DATA_3)
    ScrollLCD(1)
    
    SendLCDstring (DATA_4)
    ScrollLCD(1): SendLCD (12)

GoTo start_prog

'-------------   символ в число   ------------
Sub SendLCDstring(LCDdataX As Byte)
Local temp4 As Byte
    stringS = Str(LCDdataX)  
    For temp4= 1 To Len (stringS)
    stringSv= Mid(stringS, temp4, 1)
    LCDdataX = Val(stringSv)
    SendLCD (LCDdataX)
    Next
End Sub


'----------   Один символ на экран  ---------
Sub SendLCD(LCDdataX As Byte)
Local tiki As Byte, temp2 As Byte, temp As Byte
    If LCDdataX =0 Then LCDdataX =10
    
    pinLCDclk =1    ' CLK
    tiki= 128
    
    Shift(Left, 4, LCDdataX)
    
    For temp2 = 0 To 3 
        temp = LCDdataX & tiki
        
        If temp =0 Then
           pinLCDdat =0    ' Data 
         Else 
           pinLCDdat =1    ' Data
        End If
          
        pinLCDclk = 0: WaitUs 1
        pinLCDclk = 1: WaitUs 1
            
        Shift(Right, 1, tiki):    If tiki =0 Then tiki = 128
    Next
End Sub


'===================== примем 8 бит ============
Function RX() As Byte
 Local tiki As Byte, temp3 As Byte, DATA_RX As Byte

    For temp3 = 7 To 0 Step -1
        tiki=0
        Shift(Left, 1, DATA_RX)
        
        While Not in_signal: Wend ' Ждем 1 
        WaitUs 30        '  пауза на часть импульса
        
        While in_signal
        Incr tiki: WaitUs 1                ' Пауза 10 мкс
        Wend
         
        If tiki >100 Then DATA_RX = DATA_RX Or 1 'длинный -> бит =1
        
        While in_signal: Wend         ' Ждем завершения сигнала
    Next

 Return DATA_RX 
End Function


' ---------  Скроллинг экрана на X символов  --------
Sub ScrollLCD(LCDdvigatSinvolov As Byte)
Local temp2 As Byte, temp As Byte
    pinLCDdat =0    ' Data
    For temp = 1 To LCDdvigatSinvolov    
        For temp2 = 0 To 3
            pinLCDclk = 0: WaitUs 1    ' CLK  
            pinLCDclk = 1: WaitUs 1    ' CLK 
        Next
    Next
End Sub

Отредактировано Александр Д. (2010-09-13 13:24:39)

0

5

А нет ли рабочего кода для обмена данными по RS232 и динамической индикации на таймере?

0

6

не понял вопрос, а именно "по таймеру"
поподробнее :)

0

7

Работу со светодиодными индикаторами обычно организовывают на прерываниях таймера. Допустим каждую 1/100 секунды срабатывает таймер и изменяет информацию на выходах порта.

0

8

хм
это две задачи: прием из UART и обновление на индикатор
проблем не вижу, но как реализовать и ЗАЧЕМ _ТАК_ извращаться :) пришли данные - принял и выдал, а потом обновляй время от времени...
так можно

0

9

вот еще исходник, сегодня сделал
программа иммитирует нажатие кнопок пульта спутникового ресивера: выдает определённую последовательность кнопок.
Устройство подключается к выходу ИК-приемника в подчиненном устройстве (в моем случае - спутниковый ресивер) через резистор 400-600 Ом.

Код:
' Устройство иммитирует нажатия клавиш ИК пульта
' сп. ресивера Golden Interstar-8001
' "нажимает" Menu-OK-0000-KeyRight-Info-Info
' Подключать через резистор на выход ИК-приемника в ресивере

$Device= attiny13    ' used device
$Stack = 32         ' stack depth
$Clock = 4.8        ' adjust for used crystal

$Def LED = PORTB.3
$Def SenderPult = PORTB.2
$Def my_Key = PINB.0

Declare Sub SendStart()
Declare Sub Senddata(baitD As Byte)
Declare Sub SendEnd()

Dim  temp22 As Byte

Const Down = 0, Up = 1

Const adrPult_1=32, adrPult_2=8
Const Menu_1=48, Menu_2=207
Const OK_1=168, OK_2=87
Const Move_Right_1=200, Move_Right_2=55
Const Info_1=248, Info_2=7
Const Null_1=0, Null_2=255

DDRB=255: PORTB =0    ' OUTput


' ---- Начало программы ----
LED = 0

SenderPult = Up: WaitMs 255
    
SendStart()    ' Передаем преамбулу
        Senddata (adrPult_1) '    Передаем данные 
        Senddata (adrPult_2)
        Senddata (Menu_1)
        Senddata (Menu_2)
SendEnd()

SendStart()    ' Передаем преамбулу
        Senddata (adrPult_1)    '    Передаем данные 
        Senddata (adrPult_2)
        Senddata (OK_1)
        Senddata (OK_2)
SendEnd()

For temp22 = 0 To 3    ' "Вводим" PIN - 0000
SendStart()    ' Передаем преамбулу
        Senddata (adrPult_1)    '    Передаем данные
        Senddata (adrPult_2)
        Senddata (Null_1)
        Senddata (Null_2)
SendEnd()
Next
        
SendStart()    ' Передаем преамбулу
        Senddata (adrPult_1)    '    Передаем данные
        Senddata (adrPult_2)
        Senddata (Move_Right_1)
        Senddata (Move_Right_2)
SendEnd()

SendStart()    ' Передаем преамбулу    
        Senddata (adrPult_1)    '    Передаем данные
        Senddata (adrPult_2)
        Senddata (OK_1)
        Senddata (OK_2)
SendEnd()

SendStart()    ' Передаем преамбулу
        Senddata (adrPult_1)    '    Передаем данные
        Senddata (adrPult_2)
        Senddata (Info_1)
        Senddata (Info_2)
SendEnd()

SendStart()    ' Передаем преамбулу
        Senddata (adrPult_1)    '    Передаем данные
        Senddata (adrPult_2)
        Senddata (Info_1)
        Senddata (Info_2)
SendEnd()

LED = 1


Do
    LED = 1
    WaitMs 50
    LED = 0
    WaitMs 50
Loop
'=========  Передаем преамбулу ==========

Sub SendStart()
    SenderPult = Down
    WaitMs 8: WaitUs 65
    SenderPult = Up        ' ____/----\____
    WaitMs 4: WaitUs 28
    SenderPult = Down
    WaitUs 57
End Sub

'=========  Передаем 8 импульсов ==========

Sub Senddata(baitD As Byte)
 Dim tiki As Byte, temp2 As Byte, temp As Byte

 tiki= 128
 For temp2 = 0 To 7 
    temp = baitD & tiki
    
    SenderPult = Up
    WaitUs 51
    
    temp = temp & tiki
    If temp <>0 Then WaitUs 106

    SenderPult = Down    
     
    Shift(Right, 1, tiki)
    If tiki =0 Then tiki = 128
    
    WaitUs 59
 Next

End Sub

'========  Передаем импульс завершения ========

Sub SendEnd()
    SenderPult = Up
    WaitMs 45
    SenderPult = Down
    WaitMs 9
    
    SenderPult = Up
    WaitMs 2
    SenderPult = Down
    WaitUs 58
    SenderPult = Up
    
    WaitMs 500    '    Пауза между нажатиями кнопок пульта            
End Sub

Отредактировано Александр Д. (2009-12-12 14:56:37)

0

10

Александр Д. написал(а):

хм
это две задачи: прием из UART и обновление на индикатор
проблем не вижу, но как реализовать и ЗАЧЕМ _ТАК_ извращаться  пришли данные - принял и выдал, а потом обновляй время от времени...
так можно

Так я и хочу два куска кода по двум задачам, а получилось, что описал как одну...

0

11

надо подумать, у меня есть старые исходники, но там ВРОДЕ не по таймеру было сделано...

нет, такого нет
С таким не работаю, хотя как закончу разводить плату, могу и подумать над этим :)

вот рабочий пример: мигает свдиод по таймеру

Код:
$Device= attiny2313
$Stack = 32
$Clock = 8

$Timer1= Timer, Prescale=256

$Def pinLed = PORTB.2
Declare Interrupt Ovf1()

Dim tiki As Byte

  '- Инициализация всей периферии
    DDRD=0: PORTD =255        ' INPut
    DDRB=255: PORTB =255    ' OUTput

Timer1=&h85ee            ' 1 sec time @ 8MHz
Enable Ovf1
Enable Interrupts
Start Timer1


Start_prog:  '  ------- НАЧАЛО ПРОГРАММЫ  --- Основной цикл ---


GoTo Start_prog 


'/////////////////////////////////////////////////////////
Interrupt Ovf1(), Save All
Timer1=&h85ee            ' 1 sec time @ 8MHz
Toggle pinLed
End Interrupt

Отредактировано Александр Д. (2009-12-12 16:53:00)

0

12

А где есть не глючный FastAVR?
У меня 4.3.0 при нажатии кнопки програматор всегда закрываеться....

Отредактировано AlexandrM (2009-12-14 11:16:45)

0

13

:)
проблема не в FastAVR, а в том что ВЫ НЕ УКАЗАЛИ программе программу- программатор

сделать так:
Tools - Find Programmer
в открывшемся окне указать на файл .exe программы-программатора

После этого Ваша "проблема" исчезнет ;)

Отредактировано Александр Д. (2009-12-14 14:29:35)

0

14

доброго всем дня
Пропадал: дела, дела :)

вот, новенькое для новичков:
Программа управления двумя разрядами 7-сегментного индикатора. Но подключен индикатор через сдвиговый регистр 74HC595, а сегменты индикатора подключена не out1=a, out2=b...out7=точка, а так, как было удобно разводить плату

вот сам код и схема:
индикатор с общим анодом, т.е.. диодики загорятся при подаче нуля с выхода сдвигового регистра

Код:
$Device= mega8
$Stack = 32
$Clock = 4

$Def Led7_1 = PORTB.5
$Def Led7_2 = PORTB.4
$Def Led7Load = PORTB.1

$Def Led = PORTB.3

$ShiftOut Data=PORTB.0, Clock=PORTB.2, Lsb 

Dim n As Byte                   

'- Инициализация всей периферии
DDRD=0: PORTD =255      ' INPut
DDRB=255: PORTB =0       ' OUTput
DDRC=0: PORTC =0        ' INput

For n = 0 To 4
 Toggle Led
 WaitMs 100
Next n

Led7_1 = 0 ' Выключили оба индикатора
Led7_2 = 0

n = 164 ' Это данные символа, который необходимо вывести на индикатор

ShiftOut n ' Выдаём байт в регистр

Led7Load = 0 ' Низкий уровень на "загрузка" регистра
WaitMs 1
Led7Load = 1 ' Загружаем регистр, вывод данных на ножки регистра
WaitMs 1
Led7Load = 0

Do

 Led7_1 = 1 ' Включаем первый индикатор
 WaitMs 1
 Led7_1 = 0
 WaitMs 10

  
  Toggle Led: WaitMs 10 ' Мигнём св диодом
Loop

'1 = 238
'2 = 146 
'3 = 162 
'4 = 228
'5 = 161
'6 = 129
'7 = 234
'8 = 128
'9 = 160
'0 = 136

'- = 247
'A = 192
'b = 133
'С = 153
'с = 151
'd = 134
'E = 145
'F = 209
'G = 137
'H = 196
'h = 197
'I = 221
'J = 138
'L = 157
'n = 199
'O = 136
'o = 135
'P = 208
'r = 215
'S = 161
't = 149
'U = 140
'u = 143
'y = 164

0

15

Александр Д. Повторил исходник в 11 посте и эмулировал в протеусе. На тамере1 все работает. Меняю на таймер0, протеус виснет. Тот же код (с необходимыми изменениями) в Bascom'е работает без проблем. Проверить в железе возможности нет.
У вас таймер0 на тиньке 2313 нормально работает от FastAVR?

0

16

Вполне возможно что ошибка в коде.
Нужно было выложить вариант с использованием таймера 0.

0

17

Жаль это всё не развивается больше, нет поддержки новых кристаллов.

0

18

Да, собственно, вместо 1 написал 0 и предустановку таймера изменил на &h64:

Код:
$Device= attiny2313
$Stack = 32
$Clock = 8

$Timer0= Timer, Prescale=256

$Def pinLed = PORTB.2
Declare Interrupt Ovf0()

Dim tiki As Byte

  '- Инициализация всей периферии
    DDRD=0: PORTD =255        ' INPut
    DDRB=255: PORTB =255    ' OUTput

Timer0=&h64            ' 
Enable Ovf0
Enable Interrupts
Start Timer0


Start_prog:  '  ------- НАЧАЛО ПРОГРАММЫ  --- Основной цикл ---


GoTo Start_prog 


'/////////////////////////////////////////////////////////
Interrupt Ovf0(), Save All
Timer1=&h64            ' 
Toggle pinLed
End Interrupt

Хочется верить, что это только глюк протеуса

Отредактировано MACTEPok (2012-07-06 16:25:16)

0

19

FastAVR решил помучать только из за того, что Bascom слишком объемные прошивки компилит для маленьких кристаллов. На тиньке 2313 написал проект в Bascom'е, получилось впритык. А понадобилось добавить обработку нажатия одной кнопки, и все, места уже нет. Надеюсь в FastAVR втолкать.

0

20

На меге8 прерывания от таймера0 обрабатываются корректно. на тиньке2313 висит.

0

21

Мда, в общем сам нарыл

Пишет :

Код:
;-Line--0050----Enable Ovf0                
sbrzl,0x01
outTIMSK,zl

А нужно:

Код:
;-Line--0050----Enable Ovf0                
 sbrzl,0x02
outTIMSK,zl

Регистры в библиотеке прописаны правильно:

Код:
;***** TIMSK ******
.equ TOIE1      = 7
.equ OCIE1A     = 6
.equ OCIE1B     = 5
.equ ICIE1      = 3  
.equ OCIE0B     = 2  
.equ TOIE0      = 1
.equ OCIE0A     = 0
.equ TICIE      = 3

Меня интересует бит TOIE0 
Товарищи, как заставить компилятор правильно устанавливать биты?

Менял значение вручную, прошивка в протеусе начинает нормально работать.

Отредактировано MACTEPok (2012-07-09 14:24:09)

0

22

Здравствуйте. Проблема с прерываниями в Мега 8.
Мега 8 управляет модулем SIM900D по UART.
Если код без цикла, то прерывание, в данном случае Urxc, работает.

Код:
$Device= m8
$Clock = 16.0
$Baud = 19200
$Stack = 32

Declare Interrupt Urxc()
Declare Interrupt Int0()
Declare Sub Sendsms()
Declare Sub Balanse()

.......................

DDRD.1=1 	'Порт на выход
PORTD.1 = 0 
DDRD.0=0 	'Порт на вход       
PORTD.0=1

Balanse()


Enable Urxc
Enable Int0
Enable Interrupts 

'###########################################################################
'Основная программа
'###########################################################################
'Do 

........................

'Loop 
End
'============================================================================
'============================================================================
Sub Balanse()
Print  "AT+CUSD=1,";Chr(34);"#101#";Chr(34) 
WaitMs 100
End Sub
 

'подпрограмма для разбора сообщения модуля
'=============================================================================
Interrupt Urxc(),Save All

     S = ""
       Do
InputBin B                                       'берем символ из буфера 
    If B=0 Then
     Exit Do
     End If  
   
     If B>31 Then
     S=S+Chr(B)
     End If  
   Loop
 Otvet = S
 Sendsms()
 
End Interrupt

'подпрограмма отправки смс
'=============================================================================
Sub Sendsms()
K=&h1A
Print "AT+CMGS=";Chr(34);Phonenumber;Chr(34) 
WaitMs 200
Print Otvet
PrintBin K
WaitMs 100
End Sub

Если просто запустить цикл, без Balanse() в начале, то после принятия сообщения по UART. скажем "RING", когда звонишь модулю, никакого прерывания не происходит. Внешнее перывание по INT0 не срабатывает. Такое впечатление что прерывания вообще не работают, если запущен бесконечный цикл......  Что делать?

0

23

какая версия компилятора?
как изначально инициализируете gsm-модуль? как настраиваете в плане выдачи сообщений о поступлении звонка и/или SMS?

0

24

Версия 4.1.3. Пробывал 4.3.0. Не помогает. Изначально модуль через терминал настроен на работу со скоростью 19200 бод, в GSM кодировке и через терминал все работает, в смысле позвонить, СМС и все такое...  В плане выдачи сообщений предполагалось читать содержимое буфера по прерыванию Urxc и принимать дальнейшее решение что делать дальше. Но, в процессе отладки, выяснилось, что на прерывания,когда программа в цикле  не реагирует.

0

25

хм
а что выдатся в asm файл? там подробная расшифровка. Не смотрели, есть разница в инициализации прерывания?
может баг какой у компилятора?

0

26

Вот и я хм... Компиляторов использовал две версии 4.1.3 и 4.3.0. В asm выдает

Код:
;-Line--0117----Enable Interrupts--
sei

;-Line--0118----Enable Urxc--
sbiUCSRB,7

И все вроде так, как надо. И в AVR Simulator IDE 2.39 все бегает и в SREG бит I устанавливается. И при имитации Urxc переходит на подпрограмму прерывания. Все есть, только не в реале, а если в реале, то не в цикле... Шайтан-железяка какая-то.

Отредактировано Alexlon (2015-11-11 23:55:52)

0

27

В коде нет подпрограммы с именем Int0().

0

28

Согласен, нет. Просто убрал из листинга. По INT0() должна отправляться  СМСка. Отправки нет.

Отредактировано Alexlon (2015-11-12 00:27:12)

0


Вы здесь » Программирование ATMEL в BASCOM. » FastAVR » Исходники FASTa