Jump to content
RIMUS1989i

Ассемблерная вставка atmel studio 6.2

Recommended Posts

Здравствуйте. Вопрос к гуру, на сколько будет меньше разрыв данных при посылке через SPI 16бит, если ожидание готовности написать на ассемблере? И сразу второй вопрос, как правильно её вставить?

void sendWord(uint16_t data)
{
	SPDR = data;
	while(!(SPSR & (1<<SPIF))); // это заменить на ассемблерную вставку
	//вот тут видно задержку
	SPDR = data>>8;
	while(!(SPSR & (1<<SPIF))); // и это заменить на ассемблерную вставку
}

Этот код не работает (ассемблерная вырезка из даташита). Я не соображаю...:(

asm volatile(
     "Wait_Transmit: in r16, SPSR sbrs r16, SPIF rjmp Wait_Transmit ret"
	);

Пока писал сообщение, понял свой косяк, регистр r16 в строке выше у меня не соответствует data.Тогда еще вопрос, как полностью этот кусок "sendWord" написать на ассемблере?

Заранее Спасибо!

Share this post


Link to post
Share on other sites

помести свои 16 бит в два регистра - в r16 и r17.

сначала передай r16, потом передай r17.


Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Share this post


Link to post
Share on other sites

@Starichok Хорошо. А как это правильно сделать? Я в поиске нашел примеры ассемблерных вставок но по примерам даже бесконечный цикл не компилируется.

asm(
	"loop_top_%=:\n"
	"rjmp loop_top_%=\n"
	);

 

Share this post


Link to post
Share on other sites

Оценка точности измерения тока интеллектуальными силовыми ключами PROFET

Интеллектуальные силовые ключи PFOFET производства Infineon могут измерять ток нагрузки с разной точностью, зависящей как от абсолютной величины потребляемого тока, так и от технологии производства конечной продукции, в частности – от наличия или отсутствия этапа калибровки. В статье подробно разбирается расчет коэффициента передачи тока на примере ключа BTS7004-1EPP.
Подробнее

я для МК пишу ТОЛЬКО на ассемблере. поэтому не знаю, как писать на Си с ассемблерными вставками.

14 часов назад, RIMUS1989i сказал:

на сколько будет меньше разрыв данных при посылке через SPI 16бит, если ожидание готовности написать на ассемблере?

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

поэтому смысла делать вставки нет никакого.

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


Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Share this post


Link to post
Share on other sites

STMicroelectronics: электростатический разряд больше не проблема

Защита от статического электричества необходима каждому современному устройству. Компания STMicroelectronics представляет решения, соответствующие стандарту IEC61000-4-2, а также специальное приложение PROTECTION FINDER, которое поможет легкого и эффективно подобрать необходимые компоненты. Рассмотрим практические примеры защиты от ESD, отраслевые стандарты и ряд ключевых параметров важных при проектировании электростатической защиты устройств.

Подробнее

Posted (edited)

Я бы Вам посоветовал прежде чем что-то городить на ассемблере посмотреть какой именно набор инструкций выдал компиллятор в этом месте. И потом уже решать, стоит ли оно того. Он не настолько глуп, чтобы сгенерировать в таком простом месте дикую дичь. А выигрыш в несколько инструкций едва-ли даст что-то существенное.

И вообще, что значить "разрыв данных в 16 бит"? Как это понимать?

Edited by El-Shang

Share this post


Link to post
Share on other sites

Удалось ли сделать резервную копию? Обеспечение бесперебойного питания

Для работы портативных электронных устройств с постоянным или длительным включением необходим резервный источник питания. Микросхемы диспетчеров питания производства Analog Devices LTC4040 или LTC4041 позволяют легко подключить резервное питание в виде Li-Ion-аккумулятора или суперконденсатора соответственно в случае сбоя или потери основного питания. Рассмотрим решения по резервированию питания на основе этих микросхем.
Подробнее

17 часов назад, RIMUS1989i сказал:

если ожидание готовности написать на ассемблере?

соображение не от гуру .

Где искать косяк в передаче данных  может помочь осциллограф с декодированием цифры . Мне помог .

Share this post


Link to post
Share on other sites
2 часа назад, Starichok сказал:

я для МК пишу ТОЛЬКО на ассемблере. поэтому не знаю, как писать на Си с ассемблерными вставками.

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

поэтому смысла делать вставки нет никакого.

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

Я уже об этом и подумал, чтобы передачу написать на аасемблере. Но нужно обернуть в си, т.к. Весь код будет на си. 

 

1 час назад, El-Shang сказал:

И вообще, что значить "разрыв данных в 16 бит"? Как это понимать?

Так как мега328 не умеет посылать 16 бит одним словом, то приходится посылать два по 8, и вот после первой отправки на осциллограф видно на 8м бите задержку. 

1 минуту назад, colorad сказал:

соображение не от гуру .

Где искать косяк в передаче данных  может помочь осциллограф с декодированием цифры . Мне помог .

Искать тут нечего, в коде только функции инициализации spi и отправки 16бит которая в 1м посте, без сигнала ss. А в вечном цикле уже вызывается функция отправки с одним и тем же числом. Так самое интересное что задержка именно там большая,где я его прокомментировал. Между концом и началом отправки разрыв меньше в два раза. 

Прошу прошения за ошибки, пишу с телефона. 

Share this post


Link to post
Share on other sites

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

и на фоне больших затрат процессорного времени (на Си) твоя задержка во время отправки - сущая мелочь, о которой нечего беспокоиться.


Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Share this post


Link to post
Share on other sites
10 часов назад, RIMUS1989i сказал:

после первой отправки на осциллограф видно на 8м бите задержку

И что ? Ну видно её, ну есть она. В чём проблема то ?

Share this post


Link to post
Share on other sites
12 часов назад, RIMUS1989i сказал:

самое интересное что задержка именно там большая,где я его прокомментировал.

Могу ошибаться, давно это было. И по вставкам в СИ не подскажу.

Как-то тоже было нужно пакет отправить по SPI за минимально возможное время.

На ассемблере,  после записи первого байта в регистр данных делал паузу в тактах МК на один такт больше чем необходимо для отправки 8-бит и потом следующий байт без всяких опросов готовности.

Частота SPI была максимально возможной CLKCPU/2, паузу делал 17 тактов.

Share this post


Link to post
Share on other sites
Posted (edited)

То есть вы предлагаете вставить 17 "nop" ов?

Edited by RIMUS1989i

Share this post


Link to post
Share on other sites
Posted (edited)

Ну да. При условии что частота SPI вдвое меньше частоты МК.

И почему обязательно NOPов? я эти такты использовал с пользой.

Главное на записать следующий байт раньше чем...

Edited by AvrAsm

Share this post


Link to post
Share on other sites
Posted (edited)
21 hours ago, RIMUS1989i said:

Так как мега328 не умеет посылать 16 бит одним словом, то приходится посылать два по 8, и вот после первой отправки на осциллограф видно на 8м бите задержку. 

И что с  того? :-) Ну задержка. Ну есть. Она в любом случае будет иметь место, как отметили выше. Ибо необходимо будет записать следующий байт для отправки в регистр. В чем соль проблемы-то? Эстетическое несовершенство осциллограммы? ;-)

Edited by El-Shang

Share this post


Link to post
Share on other sites

Похоже, ТС даже не понимает, для чего ему это нужно. Увидел задержку и началась паника :lol:
А почитать спецификацию на SPI - религия не позволяет B)

Share this post


Link to post
Share on other sites

Да ладно Вам.

Я когда первый раз в жизни снюхивался с 12-ти битным АЦП по тому же спаю, тоже боялся, что не получится нормально считать данные, ибо на атмелах он 8-ми битный. :-)

Share this post


Link to post
Share on other sites

Автор даже не может ответить на главный вопрос темы, созданный им. О чём тут можно вообще дискутировать ? Что-то обсуждать ... Предлагать какие-то идеи ...

Прежде, чем что-то использовать, нужно понимать, как это "что-то" работает. А не бездумно тыкаться осциллографами и наводить панику на форумах.
Какой смысл использовать осцил там, где ты ни черта не понимаешь ?

Share this post


Link to post
Share on other sites

Для того, чтобы начать задавать умные вопросы нужно немного позадовать глупых. ;-)

Share this post


Link to post
Share on other sites

Речь не о глупости вопросов, а о непонимании их сущности.
Зачем задавать вопрос, если тебе пофиг на результат ответа ? Просто, ради поболтать ?

Share this post


Link to post
Share on other sites
19 часов назад, Alex сказал:

И что ? Ну видно её, ну есть она. В чём проблема то ?

Проблема в том, что при посылке большого объема данных, вот эта мелкая задержка суммируется и вытекает в большую. Отсюда и логическое соображение, почему бы её здесь не ликвидировать.

Код, как я писал выше, состоит только из "в коде только функции инициализации spi и отправки 16бит которая в 1м посте, без сигнала ss. А в вечном цикле уже вызывается функция отправки с одним и тем же числом", если тут уже задержка то что будет дальше?

Понятное дело, если отсылать не большие пакеты, то пусть имеет место быть.

 

10 часов назад, El-Shang сказал:

В чем соль проблемы-то? Эстетическое несовершенство осциллограммы? ;-)

Ответил в первом предложении.

 

6 часов назад, Alex сказал:

Похоже, ТС даже не понимает, для чего ему это нужно. Увидел задержку и началась паника :lol:
А почитать спецификацию на SPI - религия не позволяет B)

 

5 часов назад, Alex сказал:

Автор даже не может ответить на главный вопрос темы, созданный им. О чём тут можно вообще дискутировать ? Что-то обсуждать ... Предлагать какие-то идеи ...

Прежде, чем что-то использовать, нужно понимать, как это "что-то" работает. А не бездумно тыкаться осциллографами и наводить панику на форумах.
Какой смысл использовать осцил там, где ты ни черта не понимаешь ?

А вы, уважаемый @Alex просто походу этими постами накручиваете себе счетчик публикаций.

17 часов назад, AvrAsm сказал:

И почему обязательно NOPов? я эти такты использовал с пользой.

Главное на записать следующий байт раньше чем...

Ход ваших мыслей понял, но как правильно реализовать? 

Share this post


Link to post
Share on other sites
Posted (edited)

А можно размер задержки? В тактах, us, осциллограмме?  Вот дизассемблер вашего куска кода. Проверка готовности SPI - две инструкции, три такта. Куда быстрее?

Я если что, только нюхаю Си, тоже иногда пугает  раздувание кода, но тут все прилично.

6:        {
+0000001C:   B81F        OUT       0x0F,R1        Out to I/O location
8:        	while(!(SPSR & (1<<SPIF)));  
+0000001D:   9B77        SBIS      0x0E,7         Skip if bit in I/O register set
+0000001E:   CFFE        RJMP      PC-0x0001      Relative jump
10:       	SPDR = 8;
+0000001F:   E088        LDI       R24,0x08       Load immediate
+00000020:   B98F        OUT       0x0F,R24       Out to I/O location
11:       	while(!(SPSR & (1<<SPIF))); 
+00000021:   9B77        SBIS      0x0E,7         Skip if bit in I/O register set
+00000022:   CFFE        RJMP      PC-0x0001      Relative jump
13:       }

 

Edited by godrik

Share this post


Link to post
Share on other sites
2 часа назад, RIMUS1989i сказал:

Ход ваших мыслей понял, но как правильно реализовать? 

Что реализовать, 17-ть NOP-ов записать?

Share this post


Link to post
Share on other sites
41 минуту назад, AvrAsm сказал:

Что реализовать, 17-ть NOP-ов записать?

Значит я не правильно вас понял:D

Share this post


Link to post
Share on other sites
Posted (edited)
4 hours ago, godrik said:

Я если что, только нюхаю Си, тоже иногда пугает  раздувание кода, но тут все прилично.

Не забивайте этим голову. На чистом ассемблере пишут или ретрограды или очень начинающие любители, зачастую попавшие под влияние первых. Никаких разумных причин писать код целиком на ассембреле нет. За исключением, пожалуй, личных предпочтений и узкой ниши "особых случаев". Да и у самих сей вполне достаточно инструментов, чтобы сгенерировать код не уступающий творениям среднестатистического "ассемблерщика".

 

5 hours ago, RIMUS1989i said:

Проблема в том, что при посылке большого объема данных, вот эта мелкая задержка суммируется и вытекает в большую. Отсюда и логическое соображение, почему бы её здесь не ликвидировать.

"Большой" объем данных это сколько? Один килобайт? Два? Мегабайт? И потом, правильно говорить не о суммировании, а о доле (в процентах, если угодно) этой задержки в общем времени передачи данных. А это величина неизменная.

Что же касается непосредственно "ассембреной" вставки в сях, то если Вам так уж хочется её вставить, то проще сделать это по следующему алгоритму:

  1. Создать отдельный .c файл, в который Вы пропишите пустую функцию. Пустую, означает вот так: void sendWord(uint16_t data) {}
  2. Компилируете его с опцией -s -O0. Можете это сделать ручками в командной строке, можете изменить в настройках файла в дереве проекта, это как больше нравится;
  3. На выходе получится ассемблерный файл с тем же именем, что .c но расширением .s (как ни странно). 
  4. Заменяете исходный .c в дереве проекта полученным и заполняете его содержимым, он полностью в вашей власти.

Правда, это получается не совсем "вставка" но зато таким образом Вы сможете создавать и вызывать любые свои функции, написанные на ассемблере из сишных  и при этом ничего не сломаете из-за несоблюдения calling convention и прочего. Хотя риск остаётся. :-)

Edited by El-Shang

Share this post


Link to post
Share on other sites
6 часов назад, RIMUS1989i сказал:

А вы, уважаемый @Alex просто походу этими постами накручиваете себе счетчик публикаций.

Не болтайте ерундой. Этот счётчик на форуме не даёт абсолютно ничего....

А Вам, если не хватает скорости SPI, нужно заниматься не всякими вставками, а просто взять камушек пошустрей, и с DMA. И все Ваши проблемы улетят как страшный сон.
Впихнуть "с ноги" почти невпихуемое, понатыкав говно-костылей в код и сэкономив микросекунду между байтами,  а потом ходить и гордиться этим - глупый поступок.
Сейчас Вы воткнули костыль, и, возможно, он заработал, а через неделю обернётся Вам боком. И будете плясать вокруг платы вприпрыжку, хотя бы даже потому, что тупо не знаете, как этот костыль работает и что из-за него может случится.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Что то конденсаторы в питании маловаты. 
    • Сейчас эфир так забит, что эта система связи уже практически не скажется. Вот включил смартфон на настройку Вай-Фай - вижу 17 работающих сетей, + моя 18-я. Плюс сигналы как минимум от 9 базовых станций мобильной связи (по 3 от каждого оператора). Они как тот суслик - я их не вижу, а они есть. Плюс  на работе посмотрел, что там в эфире по анализатору спектра - 7 телевизионных передатчиков излучают, причем от них сигнал мощнее, чем от базовых станций, хоть до телевышки километров 10, и больше 20-и ФМ-овских станций, + какие-то неизвестные сигналы от служебных каналов. Так что этот канал связи добавит в общей картине какую-то долю процента.
    • Продолжаешь утверждать что корпуса у 744 - совпадают по функционалу? Приведи в доказательство хоть ОДИН факт, довод. А не поливай желчью только потому, что тебе такое доказательство  как раз привели. Или кроме аскорбинок тебе нечего сказать больше? И забавно это твоё требование верить не программе, (мультисиму) а почему то - тебе лично. Не в даташит разработчика а в ничтожное мнение некоего любителя неподкреплённое ничем о проге, которой пользуются и в ВУЗах и тысячи радиолюбителей и о ошибках в даташите) При том что  мультисим в целом ведёт себя предсказуемо и не врёт, а ты - наоборот) Странно видеть в таком простом и очевидном, детском вопросе, так активно J_Ohm, вращаться блохой на сковороде. )) Или вопрос уже стоит не в технической области, и эмоции отключают ганглий? )) Ты разберись))  
    • если для дома и семьи - можно пользоваться. если для производства - тоже можно пользоваться. если потребуется заключение по проведенным измерениям - нет. хоть для дома, хоть для производства. до тех пор пока к тебе не предьявляют претензий - пользуйся чем желаешь. когда предьявят претензии прав будет тот, кто будет иметь занесенный в реестр прибор, поверенный и не нарушивший регламент измерений (сиречь имеющий сертификат, а следовательно специально обученный для таких измерений). кстати по международным стандартам. наши стандарты более жесткие. и главное (были) едины. все равно где, в детсаду или на стартовой площадке в космос , требования были одинаковые к одним и тем же вещам. на западе у каждого (на соседних производствах) были свои требования. 
    • На цели реагирует. Только-что подкрутил  на плате резистор и пороговый тон появился...
    • С экранировкой от наводок китайцы вообще не заморачиваются. 
  • Similar Content

    • By Rasal
      Можно пожалуйста, комментарий к каждой строчке кода
       
      #include <P16F628A.INC>
                  LIST        p=16F628A     ; директива для указания типа МК
                  __CONFIG    03F10H     ; директива установки битов конфигурации
      Sec0        equ         20h
      Sec1        equ         21h
      shet1       equ         22h
      smehen      equ         23h
      shet        equ         24h
      kar         equ         25h
      var         equ         26h
      shet2       equ         27h
       
      #define     rb7         PORTB,7  
       
                  org         0           ; Начать выполнение программы с адреса 0 PC.
                  goto        Start
      Start     movlw       .255  ;копирования 255 в указанный регистр w
                  movwf        PORTB
                  movlw        .0
                  movwf         PORTA
                  movlw        .7             ;копирования 7 в указанный регистр w
                  movwf        CMCON
                  bsf         STATUS,5   ;переход в Банк 1
                  movlw       .0          ;
                  movwf       TRISB
                  movlw       .0       ;
                  movwf       TRISA
                  bsf         PCON,3           
                  bcf         STATUS,5 ;переход назад в Банк 0
                  clrf        shet
      nac         movlw       .10    ;вращ. стрелки
                  movwf       shet2
       
      gif1        movlw       .0
                  movwf       smehen
                  call        pod
                  movlw       .7
                  movwf       smehen
                  call        pod
                  movlw       .14
                  movwf       smehen
                  call        pod
                  movlw       .21
                  movwf       smehen
                  call        pod
                  decfsz      shet2,F
                  goto        gif1     
           
                  movlw       .10      ; бьющ. сердце
                  movwf       shet2
       
      gif2        movlw       .28
                  movwf       smehen
                  call        pod
                  movlw       .35
                  movwf       smehen
                  call        pod
                  movlw       .28
                  movwf       smehen
                  call        pod
                  movlw       .28
                  movwf       smehen
                  call        pod
                  decfsz      shet2,F
                  goto        gif2 
                 
                  movlw       .6      ; пульсир. звезда
                  movwf       shet2
                  movlw       .42
                  movwf       smehen
                  call        pod1
                  movlw       .42
                  movwf       smehen
                  call        pod1
                  movlw       .49
                  movwf       smehen
                  call        pod1
                  movlw       .56
                  movwf       smehen
                  call        pod1
                  movlw       .63
                  movwf       smehen
                  call        pod1
       
    • By Miwago
      Всем доброго дня!  На данном сайте (http://smartep.ru/index.php?page=avr_asm_examples)  нашел пример управления сервоприводом SG90 с помощью микроконтроллера Atmega16 на Ассемблере.  С помощью программатора AVRasp, макетной платы и программы avrdude_prog-v.3.3 я прошил свой микроконтроллер Atmega16A. Все завершилось удачно. Я выставил в фьюзах 8Мгц частоты от внутреннего генератора, как указывал автор примера. Авто указывает - линия ШИМ сервопривода подключена к каналу А аппаратного ШИМ. Кнопки поворота подключены к линиям PD2 и PD3. Кнопка на линии PD2 увеличивает длительность импульса, кнопка на линии PD3 уменьшает длительность импульса. Схему подключения автор не дает. У меня собрать рабочую схему не получается. Может кто подскажет, как исходя из кода Ассемблера собрать схему?  Полный код программы в прикрепленном файле "Пример". Моя предположительная схема и фрагмент кода на фото.


      Пример Пример
    • By LiSiY5
      Работаю в Mplab X 5.40, написал основной код программы для Pic16 на Си и есть небольшой код на ассемблере. Так вот, подскажите как правильно сделать переход на подпрограмму с Си на ассемблер и назад. Может на каком либо примере где-то есть. Заранее всем спасибо.
    • By n_angelo
      Привет, знатоки. Написал свою первую программу для контроллера STM8L152C6T6 (STM8L-Discovery). Это, собственно, моя первая программа для контроллеров вообще. Я многого не знаю и не понимаю. Возможно ваш ответ на мой вопрос будет банален.
      Используемая периферия: DAC, DMA, TIM4, CLK, GPIO
      Задача у программы такая:
      В EEPROM зашит один период синусоиды с дискретизацией 44100Гц. Период занимает ровно 101 байт, что по сути должно быть равно 2,29мс (1/44100*101). В коде программы только конфигурация периферии, одно прерывание на кнопке и пустой бесконечный цикл, который ничего не делает. Всю работу выполняет таймер, который настроен выдавать запрос к DMA на каждые 1/44100 (ядро тактируется 2мГц, таймер считает до 45). В свою очередь DMA забирает из EEPROM по одному байту на каждый запрос от таймера и передаёт его в DAC. Далее DAC выводит бесконечную синусоиду на ногу PF0. Прерывание на кнопке запускает весь этот механизм и зажигает светодиод.
      Проблема:
      Измеряя ногу PF0 осциллографом было замечено, что период синусоиды занимает около ≈4мс. Фото под катом.
      Меня это расстроило. Экспериментально выяснилось, что стоит только вписать в бесконечный цикл какую-нибудь проверку, например, [если значение текущего байта синусоиды = 0xFF, то зажечь светодиод, если 0x00, то потушить], то осциллограф показывает правильный тайминг в 2(с копейками)мс. В принципе в теле цикла может быть что угодно, кроме пустоты, и тайминг налаживается.
      Я не могу отдебажить дизассемблер, т.к. его не знаю. Это у меня в планах. Но я очень хочу понять, что происходит и почему пустой цикл рушит тайминг.
      Спасибо.
       
       
       
       
    • By CUBE
      Не могу запустить асинхронный режим. 
      Ниже будет представлен код которым пытаюсь отладить. Там в 1 коде идёт работа от внутреннего источника таков (стоит 1МГц).  После 5 миганий таймер должен перейти в асинхронный режим и мигать с частотой в 1 Гц. У меня происходит 5 миганий потом ничего. Фьюзы менять пробовал, ничего не дало, сейчас дефолт. Корпус кварца к земле тянуть пробовал - безрезультатно. 
      Возможно что-то в подключении накосячил, если не видно на фото ниже, спрашиваете, нужно будет - нарисую схему. 
      Компилятор Atmel Studio 7
      Шью через Sind Prog 2.1.1 + USBasp 2.0
      Вот код: 
      .macro outi 
       ldi r16, @1 
       out @0, r16 
      .endm 
      .org $000 
      rjmp reset 
      .org $001 
      reti 
      .org $002 
      reti 
      .org $003 
      reti 
      .org $004 
      rjmp timer2_ovf 
      .org $005 
      reti 
      .org $006 
      reti 
      .org $007 
      reti 
      .org $008 
      reti 
      .org $009 
      reti 
      .org $00A 
      reti 
      .org $00B 
      reti 
      .org $00C 
      reti 
      .org $00D 
      reti 
      .org $00E 
      reti 
      .org $00F 
      reti 
      .org $011 
      reti 
      .org $012 
      reti 
      .ORG INT_VECTORS_SIZE 
       
      reset: 
      .equ portout=portd 
      .equ ddrout=ddrd 
      .def led=r17 
      .def mask=r18 
      .def counter=r19 
       outi spl,low(ramend) 
       outi sph,high(ramend) 
       
       outi ddrout, 0xff 
       
       outi tccr2, 0b00000111 
       outi timsk, 1«toie2 
       
        
       
        
       ldi led,1«5 
       ldi mask,1«5 
       sei 
      cycle: 
      cpi counter, 10 
      breq offtim 
       rjmp cycle 
       
      timer2_ovf: 
      inc counter 
       out portout, led 
       eor led, mask 
      reti 
        
      offtim: 
      outi timsk, 0«toie2 
      rjmp asinxron 
       
      asinxron: 
       outi assr, 0b00001000 
      back: 
       in r16, assr 
       cpi r16, 0b00001000 
       brne back 
       
        outi tccr2, 0b00000101 
        outi tcnt2, 0 
        outi ocr2, 0 
        outi timsk, 1«toie2 
       
       
      m1: 
      rjmp m1


      Верх меги на фото слева. 
×
×
  • Create New...