![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 15.12.2009
Сообщений: 4
|
![]()
Расчитать задержку.Вот пример как надо:
Вычислим время выполнения подпрограммы задержки DELAY. Она состоит из двух команд пересылки, 255 итераций цикла (т.к. число 0xff в команде будет распознано компилятором как 16-ричное), и команды возврата из подпрограммы. Последняя итерация цикла состоит фактически из команд DECFSZ и NOP, поэтому выполняется в 2 машинных цикла. Все остальные итерации выполняются в 3 машинных цикла. Команды пересылки данных занимают 1 цикл, а команда RETURN – 2 цикла. Tподпр=2*Tmov+Tgoto+254*Tdec,goto + Tdec,nop=2*1+2+254*3+2=768 цикла Вычислим период меандра. Один период меандра включает в себя выполнение одноцикловых команд пропуска, инкремента и сдвига вправо, одного вызова подпрограммы и одного безусловного перехода. Вызов подпрограммы и безусловный переход занимают по два цикла. Поэтому период меандра равен: Tмеандра=Tgoto+2*Tbtfss+Tincf +Trrf +Tcall+Tподпр=2+2*1+1+1+2+768=778 цикла. Цикл состоит из 4 тактов, поэтому вся подпрограмма выполняется за 4*768=3072 тактов. В данной работе тактовая частота равна 20МГц, т.е. за одну секунду выполняется 20000000 тактов. Значит время подпрограммы задержки равно 3072/20000000=0,0001536 с. вот для этой программы: #INCLUDE "P16F877A.INC" ;Подключаем файл с символьными обозначениями ; специальных регистров и их битов COUNT1 EQU 20h ;Задаем символьное обозначение ячеек памяти, COUNT2 EQU 21h ; расположенных по адресам 20h, 21h, 22h COUNT3 EQU 22h KON1 EQU 23h KON2 EQU 24h __CONFIG (0x3f72) ORG 0 ;Текущий адрес в ПЗУ - 0 START: BSF STATUS,RP0 ;Делаем активной страницу 1, CLRF TRISB ;Устанавливаем все выводы порта В на вывод CLRF TRISD ;Устанавливаем все выводы порта D на вывод BCF STATUS,RP0 ;Возвращаемся на страницу 0 CLRF PORTD ; Устанавливаем все выводы порта D на вывод BSF PORTB,4 MOVLW 8 MOVWF KON1 MOVLW 0 MOVWF KON2 RUN: BTFSS PORTB,4 CALL NEXT GOTO RUN NEXT: BSF STATUS,C RLF PORTD,1 CALL DELAY INCF KON2,1 DECFSZ KON1,1 RETURN GOTO RUN1 RUN1: BTFSS PORTB,4 CALL NEXT1 GOTO RUN1 NEXT1: BCF STATUS,C RLF PORTD,1 CALL DELAY INCF KON1,1 DECFSZ KON2,1 RETURN GOTO RUN DELAY: MOVLW 255 MOVWF COUNT1 LOOP2: MOVLW 255 MOVWF COUNT2 LOOP3: MOVLW 255 MOVWF COUNT3 DECFSZ COUNT3,1 GOTO $-1 DECFSZ COUNT2,1 GOTO LOOP3 DECFSZ COUNT1,1 GOTO LOOP2 RETURN END |
![]() |
![]() |
![]() |
#2 |
Регистрация: 15.12.2009
Сообщений: 4
|
![]()
нужны подставленные в формулы мои значения..
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как сделать задержку вывода изображения | pupilMartyr | Общие вопросы Delphi | 9 | 03.05.2011 21:57 |
Красный свет светофора: на сколько секунд ставить задержку? | Blondy | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 3 | 25.03.2011 10:58 |
Pic creator | ++i | Софт | 9 | 03.06.2010 18:31 |
как сделать паузу (или задержку) в цыкле : с# | Natok | Помощь студентам | 7 | 30.05.2009 12:55 |
Как организовать задержку выполнения?? | Kenifer | Общие вопросы Delphi | 12 | 03.09.2007 21:56 |