Нативный Blink

Тема в разделе "Микроконтроллеры AVR", создана пользователем Felix102, 17 дек 2019.

  1. Felix102

    Felix102 Нерд

    Доброго времени суток.

    Готовлю мастер класс. Нужна помощь - как целиком выглядел код мигания 13 светодиодом до появления Arduino IDE и Wiring ?
     
  2. KindMan

    KindMan Гуру

    13 светодиод появился вместе с Ардуино.
     
    Airbus нравится это.
  3. Felix102

    Felix102 Нерд

    ну тогда просто любым пином регистра
     
  4. Asper Daffy

    Asper Daffy Иксперд

    Ну, если ты мастер, так напиши сам!
     
  5. issaom

    issaom Гуру

    Это Вам сюда:
    [​IMG]
     
  6. akl

    akl Гуру

    наверно как-то так
    Код (C++):

    #define F_CPU 16000000UL
    #include <avr/io.h>
    #include <util/delay.h>
    int main(void)
    {
        DDRB |= (1 << 5);
        while (1==1)
        {
            PORTB |= (1 << 5);
            _delay_ms(500);
            PORTB &= ~(1 << 5);
            _delay_ms(500);
        }
        return 0;
    }
     
    вот даже статья есть на вики http://wiki.amperka.ru/программирование:работа-с-attiny-через-stk500-и-чистый-си
     
    SergeiL и issaom нравится это.
  7. akl

    akl Гуру

    DetSimen и issaom нравится это.
  8. Daniil

    Daniil Гуру

    Вот мой курсач 12-го года на камушке PIC18F2520. Если правильно помню, то это реализация мигания светодиода программным шимом, но с(или на, сложно уже проанализировать) аппаратным таймером.
    Код (Text):
    ;******************************************************************************
    ;   This file is a basic template for creating relocatable assembly code for  *
    ;   a PIC18F2520. Copy this file into your project directory and modify or    *
    ;   add to it as needed.                                                      *
    ;                                                                             *
    ;   The PIC18FXXXX architecture allows two interrupt configurations. This     *
    ;   template code is written for priority interrupt levels and the IPEN bit   *
    ;   in the RCON register must be set to enable priority levels. If IPEN is    *
    ;   left in its default zero state, only the interrupt vector at 0x008 will   *
    ;   be used and the WREG_TEMP, BSR_TEMP and STATUS_TEMP variables will not    *
    ;   be needed.                                                                *
    ;                                                                             *
    ;   Refer to the MPASM User's Guide for additional information on the         *
    ;   features of the assembler and linker.                                     *
    ;                                                                             *
    ;   Refer to the PIC18Fxx20 Data Sheet for additional                         *
    ;   information on the architecture and instruction set.                      *
    ;                                                                             *
    ;******************************************************************************
    ;                                                                             *
    ;    Filename: Kursovoj proekt po kursu CU&MP                                 *
    ;    Date: 21.12.12                                                           *
    ;    File Version: 1.0                                                        *
    ;                                                                             *
    ;    Author: SuperGenius                                         *
    ;    Company: Home                                                            *
    ;                                                                             *
    ;******************************************************************************
    ;                                                                             *
    ;    Files required: P18F2520.INC                                             *
    ;                                                                             *
    ;******************************************************************************

        LIST P=18F2520, F=INHX32 ;directive to define processor and file format
        #include <P18F2520.INC>     ;processor specific variable definitions

    ;******************************************************************************
    ;Configuration bits
    ;Microchip has changed the format for defining the configuration bits, please
    ;see the .inc file for futher details on notation.  Below are a few examples.



    ;   Oscillator Selection:
    ;    CONFIG    OSC = LP             ;LP
        ;CONFIG     OSC = INTIO67,
        CONFIG WDT = OFF,PBADEN = OFF                ;LP
        CONFIG   LVP = OFF,  XINST = OFF  ,DEBUG = ON

    ;******************************************************************************
    ;Variable definitions
    ; These variables are only needed if low priority interrupts are used.
    ; More variables may be needed to store other special function registers used
    ; in the interrupt routines.

            UDATA

    WREG_TEMP    RES    1    ;variable in RAM for context saving
    STATUS_TEMP    RES    1    ;variable in RAM for context saving
    BSR_TEMP    RES    1    ;variable in RAM for context saving

            UDATA_ACS

    EXAMPLE        RES    1    ;example of a variable in access RAM
    KOL            RES 1
    KOLA        RES 1
    KOLB        RES 1
    DEV         RES 1
    SUML        RES 1
    SUMH        RES 1
    ;******************************************************************************
    ;EEPROM data
    ; Data to be programmed into the Data EEPROM is defined here

    DATA_EEPROM    CODE    0xf00000

            DE    "Test Data",0,1,2,3,4,5

    ;******************************************************************************
    ;Reset vector
    ; This code will start executing when a reset occurs.

    RESET_VECTOR    CODE    0x0000

            goto    Main        ;go to start of main code

    ;******************************************************************************
    ;High priority interrupt vector
    ; This code will start executing when a high priority interrupt occurs or
    ; when any interrupt occurs if interrupt priorities are not enabled.

    HI_INT_VECTOR    CODE    0x0008

            bra    HighInt        ;go to high priority interrupt routine

    ;******************************************************************************
    ;Low priority interrupt vector
    ; This code will start executing when a low priority interrupt occurs.
    ; This code can be removed if low priority interrupts are not used.

    LOW_INT_VECTOR    CODE    0x0018

            bra    LowInt        ;go to low priority interrupt routine

    ;******************************************************************************
    ;High priority interrupt routine
    ; The high priority interrupt code is placed here.

            CODE
    HighInt:
    ;    *** high priority interrupt code goes here ***
            btfsS PIR1,TMR1IF
                RESET
    bCf T1CON,TMR1ON           ;вџключаю таймер
        movlw 0xEC
            movwf TMR1H
        movlw 0x77
            movwf TMR1L
    bsf ADCON0, GO
    M2:
    BTFSS ADCON0, GO
        BRA M2
    MOVFF ADRESL, INDF0
    MOVLW .255
        CPFSLT FSR0L
            INCF FSR0H
        INCF FSR0L
    MOVFF ADRESH, INDF0
    MOVLW .255
        CPFSLT FSR0L
            INCF FSR0H
        INCF FSR0L
            retfie    FAST

    ;******************************************************************************
    ;Low priority interrupt routine
    ; The low priority interrupt code is placed here.
    ; This code can be removed if low priority interrupts are not used.

    LowInt:
            movff    STATUS,STATUS_TEMP    ;save STATUS register
            movff    WREG,WREG_TEMP        ;save working register
            movff    BSR,BSR_TEMP        ;save BSR register

    ;    *** low priority interrupt code goes here ***


            movff    BSR_TEMP,BSR        ;restore BSR register
            movff    WREG_TEMP,WREG        ;restore working register
            movff    STATUS_TEMP,STATUS    ;restore STATUS register
            retfie

    ;******************************************************************************
    ;Start of main program

    MY_INC0:
        MOVLW .255
        CPFSLT FSR0L
            INCF FSR0H
        INCF FSR0L
    RETURN

    MY_INC1:
        MOVLW .255
        CPFSLT FSR1L
            INCF FSR1H
        INCF FSR1L
    RETURN

    DEVIDE_BY_16: ;процедура делени¤ на 4 с сохранением делимое и записью результата в акк
    MOVLW .5
    MOVWF KOLB
    REPEAT3:
        BCF STATUS,C
        RRCF SUMH
        RRCF SUML
        DECFSZ KOLB,F
            BRA REPEAT3
    RETURN

    Main:
    ; The main program code is placed here.
            bcf OSCCON,IRCF0     ; Fclk=4Mhz
        bsf OSCCON,IRCF1
      bsf OSCCON,IRCF2
     
         
    ;конфигурирую ј÷ѕ
    bsf ADCON0, ADON ;¬ Ћ ј÷ѕ
    BCF ADCON0, GO ; Ќј ¬—я »… —Ћ”„ј… ¬џ Ћ
    MOVLW b'00001110';
    MOVWF ADCON1
    MOVLW b'10011100';
    CLRF ADRESH
    CLRF ADRESL


    clrf T1CON   ;регистр конфигурации 1ого таймера очищаем
        bsf  T1CON,RD16  ;таймер в 16 разр¤дном режиме
       
            bcf  T1CON,T1CKPS1 ; 1/8
            bsf  T1CON,T1CKPS0 ; 1/8
       
        movlw 0xEC
            movwf TMR1H
        movlw 0x77
            movwf TMR1L     ;обнулил значение таймера

                bcf    PIR1,TMR1IF    ;сбросил флаг прерывани¤ таймера1
                bsf PIE1,TMR1IE ;разрешаю прерывани¤ от таймера1
                bsf IPR1,TMR1IP ;low priority приоритет высокий прерываний таймера1

                bsf RCON,IPEN    ;разрешение приоритетной системы прерываний(совместимость с PIC16Cxxx не нужна)              
                bsf INTCON,GIEH         ;√лобально разрешаю прерывани¤

    ;при таких параметрах 1 изменение таймера = 2мкс, т.е. 5000 изменений = 2 мс
    ;поэтому надо счетсчик предзаполн¤ть 0хFFFF-0x1388=65535-5000=60535=0xec77
    bsf T1CON,TMR1ON           ;включаю таймер  

    LFSR FSR0,0x100;-;0x2FF
    MOVLW .255
    MOVWF KOL


    ;считываем 100H с 100L значений
    REPEAT1:
    BTFSS PIR1,TMR1IF
        BRA REPEAT1
    bsf T1CON,TMR1ON           ;включаю таймер  
    BCF PIR1,TMR1IF
    DECFSZ KOL,F        ;уменьшаю KOL на 1 и сравниваю с нулем, если
        BRA REPEAT1
    bCf T1CON,TMR1ON           ;вџключаю таймер

    ;ќЅ–јЅј“џ¬ј≈ћ ѕќЋ”„≈ЌЌџ≈ «Ќј„≈Ќ»я
    LFSR FSR0,0x100;-;0x2FF
    LFSR FSR1,0x400;-;0x6FF
    MOVLW .255
    MOVWF KOL
    REPEAT2:

    CLRF INDF1
        MOVLW .16
        MOVWF KOLA
        REPEATa:
    MOVF POSTINC0,W
    ADDWF SUML,F
    MOVF POSTINC0,W
    ADDWFC SUMH,F
        DECFSZ KOLA,F
            BRA REPEATa
    CALL DEVIDE_BY_16
    MOVFF SUMH,INDF1
    CALL MY_INC1
    MOVFF SUML,INDF1
    CALL MY_INC1
    DECFSZ KOL,F        ;уменьшаю KOL на 1 и сравниваю с нулем, если
        BRA REPEAT2      ; не 0, тогда к началу цикла
    ENDpr: bra ENDpr    ; иначе(т.е. 0) зацикливаю программу на 1ой строке
    ;******************************************************************************
    ;End of program
    END
    К сожалению, сохранились только исходники. Помню меня уже тогда затянуло в технику и делал всё на совесть и был красивый отчёт, но увы.
     
    Airbus и issaom нравится это.
  9. Airbus

    Airbus Радиохулиган Модератор

    Шимом тоже можно мигать.Причем плавно и красиво
     
  10. a1000

    a1000 Гуру

    Ну на крайняк можно и на асме замутить
    Код (C++):
    // Для Atmega8 на 8 МГц
    .include "m8def.inc" // Подключаем заголовочный файл с адресами
    .def temp = r16 // Присваиваем символические имена регистрам общего назначения

    .dseg // Сегмент ОЗУ, он нам не нужен, но все равно оставим
    // на случай вдруг если в голову взбредет использовать его
    .cseg // Программный сегмент, все что тут есть, записывается в память программ
    .org 0 // Вектор прерывания Reset, раздел Interrupt в технической документации
    rjmp Reset // "rjmp" команда перехода на метку, в данном случае на метку Reset

    Reset: // Метка Reset
    ldi temp, high(RAMEND) //Инициализация стека
    out sph, temp
    ldi temp, low(RAMEND)
    out spl, temp

    sbi DDRB,5 // 5 нога порта В (D13 Arduino) на выход

    Proga: // Основная программа

    sbic PORTB, 5   //если светодиод отключен, пропустить следующую строку
    rjmp Otkl   //переход на отключение светодиода
    sbi PORTB, 5 // включаем светодиод
    rjmp Delay  //переход на задержку

    Otkl:   //отключение светодиода
    cbi PORTB, 5 // гасим светодиод


    Delay:      //задержка 1 сек
    ldi  R17, $48
    WGLOOP0:  ldi  R18, $BC
    WGLOOP1:  ldi  R19, $C4
    WGLOOP2:  dec  R19
              brne WGLOOP2
              dec  R18
              brne WGLOOP1
              dec  R17
              brne WGLOOP0
    ; -----------------------------
    ; delaying 6 cycles:
              ldi  R17, $02
    WGLOOP3:  dec  R17
              brne WGLOOP3
    ; -----------------------------
    ; delaying 2 cycles:
              nop
              nop
    rjmp Proga  //возврат на начало
     
    Daniil нравится это.
  11. Daniil

    Daniil Гуру

    Так это не я такой, а задание;)
    Вот ещё нашёл цикл на асме:
    Код (Text):
    ;СУММА{от 1 до 10}[(хi+7)and(87)]

    ;MOVF INDF0,0 ;
    ;Содержимое регистра f пересылается в регистр W, если d = 0, и в тот же регистр f,
    ;если d = 1. Назначение d=1 имеет смысл использовать для проверки регистра на ноль,
    ;покскольку команда изменяет флаг Z.

    MOVLW .10 ;запись в акк число 10, кол-во эл-тов по заданию
    MOVWF KOL ;записываю число 10 в регистор KOL
    clrf SUM ;обнуляю регистр SUM
    lfsr FSR0, 0x0100 ;Назначаю начало считывания эл-тов, адресс 1ого эл-нта 0х0100     ,29 получим ответ 10
    repeat: ;начало цикла суммирования
        MOVLW .7 ;в акк записывается цифра 7
        ADDWF INDF0,W ;складываю акк с регистром INDF0
        ANDLW .87 ;осуществляю логическое умножение акк на цифру 87, ответ в акк
        ADDWF SUM,F ;прибавляю к значению регистра SUM полученное значение и записываю в регистр SUM
      INCF FSR0L,F ;увеличиваю значение младшей квадратуры регистра FSR0, т.е. меняю адресс на следующий
          DECFSZ KOL,F ;уменьшаю KOL на 1 и сравниваю с нулем, если
            BRA repeat ; не 0, тогда к началу цикла
    ENDprogr: bra ENDprogr ; иначе(т.е. 0) зацикливаю программу на 1ой строке
    (перед этим выполняется какое-то шаманство, но я не понимаю уже что оно делает, поэтому не выкладываю). Кажется регистр INDF0 указывает на данные ячейки с адресом, который хранится в регистре FSRO0. Меняя ФСРО0 организуется перебор массива.
     
    a1000 нравится это.
  12. parovoZZ

    parovoZZ Гуру

    У меня он так выглядел
    http://forum.amperka.ru/threads/msp430fr-поморгаем.18740/
    Это с шимом, если че)
     
  13. Daniil

    Daniil Гуру

    чо мы все культурные такие и ни у кого нет делея на нопах?
     
  14. parovoZZ

    parovoZZ Гуру

    У атмела в библиотеках есть. Но туда надо тактовую частоту передавать, чтобы библиотека правильное количество нопов вставила.
     
  15. Daniil

    Daniil Гуру

    Ну так не интересно с чужими библиотеками.
    Вот нашёл ещё, код просто мимими. По нажатию на кнопку "псевдорандомно" (АЦП) зажигается 1 из 2ух светодиодов и по таймеру выключаются (ATtiny45), и да, там есть бесконечный цикл с nop. В коде очень много комментариев, это я учился аврасм:
    Код (C++):
    .include "tn45def.inc"  ;This is included in "Atmel AVR Studio"
    .include "AVR.inc"


    ;.def  _0  = r15
    ;.def  temp  = r18

    ;----------------------------------------------------------;
    ; Program Code

    .cseg
      ; Interrupt Vectors (ATtiny45)
      rjmp  reset  ; Reset
      rjmp  0  ; INT0
      rjmp  0;pcint_int  ; PCINT0
      rjmp  0  ; TC1_COMA
      rjmp  0;t1ovf_int  ; TC1_OVF
      rjmp  tmr_int  ; TC0_OVF
      rjmp  0  ; EE_RDY
      rjmp  0;comp_int; ANA_COMP
      rjmp  ADC_rdy  ; ADC
      rjmp  0  ; TC1_COMB
      rjmp  0;tmr_int  ; TC0_COMA
      rjmp  0  ; TC0_COMB
      rjmp  0;wdt_int  ; WDT
      rjmp  0  ; USI_START
      rjmp  0  ; USI_OVF


    ;--------------------------------------------------------------------;
    ; Program Code

    reset:
    ;  ATtiny25/45/85
    ;  +------+
    ;  (PCINT5/RESET/ADC0/dW) PB5  ---|*  |---  VCC
    ;(PCINT3/XTAL1/CLKI/OC1B/ADC3) PB3  ---|  |---  PB2 (SCK /USCK/SCL/ADC1/T0/INT0/  PCINT2)
    ;(PCINT4/XTAL2/CLKO/OC1B/ADC2) PB4  ---|  |---  PB1 (MISO/DO/  AIN1/OC0B/OC1A/  PCINT1)
    ;  GND  ---|  |---  PB0 (MOSI/DI/SDA/AIN0/OC0A/OC1A/AREF/PCINT0)
    ;  +------+
    ;
    ;  ATtiny85
    ;  +------+
    ;  (NoP) PB5  ---|*  |---  VCC
    ;  (Nop) PB3  ---|  |---  PB2 (On/Off work Out)
    ;  (NoP) PB4  ---|  |---  PB1 (AIN1-Holl)
    ;  GND  ---|  |---  PB0 (AIN0)
    ;  +------+
    ;
    ;********************************CLOCK*************************

    ;  outi  OSCCAL,  0b00000000 ;Oscillator Calibration Register

      outi  CLKPR,  0b10000000 ;Clock Prescale Register
    ;  ||||||||
    ;  ||||CLKPS3-(0) - prescale
    ;  |NaN
    ;  CLKPCE - clock prescale change enable
      outi  CLKPR,  0b00000110 ; fclk/64

    ;********************************POWER & INTERRUPS*************************

      outi  MCUCR,  0b00110000 ;MCU Control Register
    ;  ||||||||
    ;  ||||||ISC01-(2) реагировать на спад
    ;  |||||BODSE - BOD Sleep Enable 0 NaN
    ;  |||SM1-(0) - sleep mode - режим сна
    ;  ||SE - Sleep Enable - разрешение сна
    ;  |PUD
    ;  BODS - BOD Sleep 0 NaN
    ;********************************I/O*************************
    ;  2-вх
    ;  4 | 0-вых
    ;  5|3|1|ых
    ;  ||||||
      outi  DDRB,  0b000011  ;/
      outi  PORTB, 0b000000  ;Initalize Port B

    ;********************************TIMER0 & 1*************************

    ;  outi  GTCCR,  0b00000000  ;General Timer/Counter Control Register
    ;  ||||||||
    ;  |||||||запись 1 сбрасывать предделитель timer0
    ;  ||||||запись 1 сбрасывать предделитель timer1
    ;  |||||0 -
    ;  ||||0
    ;  |||
    ;  ||
    ;  |PWMB
    ;
      outi  TIMSK,  0b00000010
    ;  ||||||||
    ;  |||||||NaN
    ;  ||||||int overflow timer0 off
    ;  |||||int overflow timer1 on
    ;  ||||int compare ocr0B off
    ;  |||int compare ocr0A off
    ;  ||int compare ocr1B off
    ;  |int compare ocr1A off
    ;  NaN

    ;  outi  TIFR,  0b00000000
    ;  ||||||||
    ;  |||||||NaN
    ;  ||||||flag overflow timer0 off
    ;  |||||flag overflow timer1 off
    ;  ||||flag compare ocr0B off
    ;  |||flag compare ocr0A off
    ;  ||flag compare ocr1B off
    ;  |flag compare ocr1A off
    ;  NaN
    ;
    ;********************************TIMER0*************************

      outi  TCCR0A,  0b00000000  ;Timer/Counter Control Register A
    ;  ||||||||
    ;  ||||||WGM01-(0) - Waveform Generation Mode - режим работы таймера0 wgm02 в tccr0b
    ;  ||||NaN
    ;  ||COM0B1-(0) - Compare Match Output B Mode - режим сравнения по каналу В timer0
    ;  COM0A1-(0) - Compare Match Output A Mode - режим сравнения по каналу A timer0

      outi  TCCR0B,  0b00000101  ;Timer/Counter Control Register B
    ;  ||||||||
    ;  |||||CS02-(0) - Clock Select - предделитель
    ;  ||||WGM02 - Waveform Generation Mode TCCR0A
    ;  ||NaN
    ;  |FOC0B - Force Output Compare B
    ;  FOC0A - Force Output Compare A

    ;  outi  TCNT0,  0b00000000  ;Timer/Counter Register
    ;  outi  OCR0A,  0b00000000  ;Output Compare Register A
    ;  outi  OCR0B,  0b00000000  ;Output Compare Register B
    ;
    ;********************************ADC*************************

      outi  ADMUX,  0b00100011
    ;  ||||||||
    ;  ||||MUX3-0 - ADC3 = PB3
    ;  ||||REFS2 - Vcc как источник
    ;  ||ADLAR - 8! или 10 бит (направление записи)
    ;  |REFS0 - Vcc как источник
    ;  REFS1 - Vcc как источник
      outi  ADCSRB, 0b00000000
    ;  ||||||||
    ;  |||||ADTS2-0 - источник автоматического запуска АЦП
    ;  |||NaN
    ;  ||IPR - 1 бит тратится на знак
    ;  |для компаратора
    ;  BIN - двухполярный режим (выкл)
      outi  DIDR0,  0b00001000
    ;  ||||||||
    ;  ||||||для компаратора
    ;  |||||ADC1D - отключение цифрового буфера пина РВ2
    ;  ||||ADC3D - отключение цифрового буфера пина РВ3
    ;  |||ADC2D - отключение цифрового буфера пина РВ4
    ;  ||ADC0D - отключение цифрового буфера пина РВ5
    ;  NaN
      outi  ADCSRA,  0b11011111
    ;  ||||||||
    ;  |||||ADPS2-0 - делитель частоты тактирования = 128
    ;  ||||ADIE - разрешение прерывания
    ;  |||ADIF - Прерывание флаг
    ;  ||ADATE - автоматическое включение АЦП (выключено)
    ;  |ADSC - запуск одиночного АЦП-ирования
    ;  ADEN - включение АЦП
    ;********************************MAIN PROCEDURES*************************
      sei
      nop
      rjmp PC-1

    ;********************************PROCEDURES*************************
    ;********************************INTERRUP PROCEDURES*************************
    ADC_rdy:
      sbic  ADCH,0
      rjmp set_1
      rjmp set_0
    set_1:
      sbi PORTB, 1
      rjmp end
    set_0:
      sbi PORTB, 0
      rjmp end
    end:
      outi  ADCSRA,  0b00010111
      sei
      reti

    tmr_int:
      cbi PORTB, 0
      cbi PORTB, 1
      outi  PRR,  0b00001111
      sleep
      rjmp PC-1
      reti
    Надеюсь ТС что-нибудь выберет для детишек)
     
  16. parovoZZ

    parovoZZ Гуру

    Так сдернуть оттуда макрос и все. Смысл изобретать велосипед?
     
  17. Asper Daffy

    Asper Daffy Иксперд

    Ну, тогда ещё и на брейнфаке держите
    Код (C++):
    #include <BrainFuck.h>

    ///////////////////////////////////////////////////////////
    //
    //    Программа на BrainFuck
    //    Обыкновенный Blink с частотой прибл. 1гц
    // программу нужно просто вставить в loop
    //
    static char * bfBlink = (char *)
        "+<<<<<<<<<<<<[-.>>>>>>>>>>>>[-]<<<<<<<<<<<<[-]]"
        ">>>>>>>>>>>>[<<<<<<<<<<<<+.[-]]+++++++[>+++++++"
        "+[>++++++++[>++++++++[>++++++++[-]<-]<-]<-]<-]";

    void setup(void) {
        pinMode(13, OUTPUT);
    }

    void loop(void) {
        BrainFuck(bfBlink);
    }
     
    Daniil, akl и DetSimen нравится это.
  18. djmikola

    djmikola Нуб

    Доброго времени суток помогите пожалуйста в написании скетча для ардуино! задача такая мне надо чтоб ардуино считал количество нажатий на кнопку. Допустим потенциометром я выставляю 5 если нажимать на кнопку меньше пяти раз в секунду загорится зеленый светодиод а если больше пяти раз в секунду то красный. Спасибо
     
  19. DIYMan

    DIYMan Guest

    Ещё раз повторюсь здесь: показывай, что пытался сделать. Говори, что именно не получается. Выкладывай код, который пытался писать. Тогда поможем. А то сессию не сдашь, в армию надо будет топать.
     
    issaom, djmikola и DetSimen нравится это.
  20. Asper Daffy

    Asper Daffy Иксперд

    djmikola, родной, тебе ж на соседнем сайте уже всё сказали, заказывай плати, сделают.

    И нечего другой форум искать - они все одинаковые. А как поступают на форумах с просителями "написать прошивку" можешь почитать вот здесь (со слов "начинается брожение по интернетам ..."). Очень понятно написано.
     
    DetSimen, issaom и ИгорьК нравится это.