Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2011, 00:11   #1
dimkoo
 
Регистрация: 15.12.2009
Сообщений: 4
По умолчанию Расчитать задержку (PIC)

Расчитать задержку.Вот пример как надо:
Вычислим время выполнения подпрограммы задержки 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
dimkoo вне форума Ответить с цитированием
Старый 27.12.2011, 00:12   #2
dimkoo
 
Регистрация: 15.12.2009
Сообщений: 4
По умолчанию

нужны подставленные в формулы мои значения..
dimkoo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать задержку вывода изображения 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