Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Вот мой quick and dirty вариант для 11..255 тактов(+)

Отправлено MBedder 01 мая 2008 г. 15:57
В ответ на: Как сделать программную задержку на ATMega16 с дискретностью в один такт контроллера? отправлено tivocr 01 мая 2008 г. 13:22


.macro delay_ZL_cycles ;; 11 <= ZL <= 255
ldi ZH,high(noptab) ;; ZH = NOP table start address MSB
subi ZL,10 ;; Compensate for a macro execution time
neg ZL ;; ZL = compensated # of NOPs to execute
icall ;; Enter a calculated # of NOPs sequence
.endm

ldi ZL,11 ; Test code (try any value from 11 to 255)
delay_ZL_cycles ; Cycle counter will show 1 cycle more due to the ldi ZL line above
nop ; Test breakpoint placeholder


.org (PC & 0xFF00)+256 ; Align to a 256 code words boundary
noptab: ; Place at the end of a code segment for convenience
.dq 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 32 x dq 0 = 128 NOPs
.dq 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 32 x dq 0 = 128 NOPs
ret
[/pre}


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
отымите от 2 единицу:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru