Форум Мастера URI

Объявление

Форум сайта: https://master-uri.narod.ru Здесь вы можете задать вопросы master-uri и не только... Новости: Внимание! В некоторых разделах Форума, оставить свои сообщения, и создать новые темы, могут и НЕ ЗАРЕГИСТРИРОВАННЫЕ ПОЛЬЗОВАТЕЛИ! Но всётаки лучше ЗАРЕГИСТРИРОВАТСЯ,хотябы для того чтобы, более полно и подробнее просматривать Темы и Ответы форума. После заполнения всех полей регистрации, и нажав кнопку Регистрация, вы сразу сможете приступить к общению на форуме. 16.10.09 В связи с наплывом рекламных сообщений, для ответов и полного просмотра обязательна регистрация, кроме раздела ОБЪЯВЛЕНИЯ.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум Мастера URI » Вопросы по разработкам и схемам maser-uri » Подпрограмма,паузы (задержки),для микроконтроллеров....


Подпрограмма,паузы (задержки),для микроконтроллеров....

Сообщений 1 страница 2 из 2

1

Вот чего неожиданно получилось:

Подпрограмма задержки (паузы).
=============================================
pauz1 movlw .3 ;(1)записать в W-.3
movwf pau1 ;(1)переслать W-регистр pau1
pa1 decfsz pau1 ;(1-2)регистр pau1 минус 1,пропуск если pau1=0
goto pauz2 ;(1)
return    ;(1)

pauz2 movlw .4 ;(1)записать в W-.3
movwf pau2 ;(1)переслать W-регистр pau2
pa2 decfsz pau2 ;(1-2)регистр pau2 минус 1,пропуск если pau2=0
goto pa2 ;(1)
goto pa1 ;(1)

Подпрограмма,разложенная по циклам (тактам).
==============================================
1 pauz1 movlw .3 ;(1)записать в W-.3
2    movwf pau1 ;(1) pau1=3
3 pa1 decfsz pau1 ;(1) pau1=pau1-1=2,пропуск если pau1=0
4    goto pauz2 ;(1)

5 pauz2 movlw .4 ;(1)записать в W-.4
6    movwf pau2 ;(1) pau2=4
7 pa2 decfsz pau2 ;(1) pau2=pau2-1=3,пропуск если pau1=0
8    goto pa2 ;(1)

9 pa2 decfsz pau2 ;(1) pau2=pau2-1=2,пропуск если pau1=0
10    goto pa2 ;(1)

11 pa2 decfsz pau2 ;(1) pau2=pau2-1=1,пропуск если pau1=0
12    goto pa2 ;(1)

13 pa2 decfsz pau2 ;(1) pau2=pau2-1=0,пропуск если pau1=0
14    nop    ;(1)

15    goto pa1 ;(1)

16 pa1 decfsz pau1 ;(1) pau1=pau1-1=1,пропуск если pau1=0
17    goto pauz2 ;(1)

18 pauz2 movlw .4 ;(1)записать в W-.4
19    movwf pau2 ;(1) pau2=4
20 pa2 decfsz pau2 ;(1) pau2=pau2-1=3,пропуск если pau1=0
21    goto pa2 ;(1)

22 pa2 decfsz pau2 ;(1) pau2=pau2-1=2,пропуск если pau1=0
23    goto pa2 ;(1)

24 pa2 decfsz pau2 ;(1) pau2=pau2-1=1,пропуск если pau1=0
25    goto pa2 ;(1)

26 pa2 decfsz pau2 ;(1) pau2=pau2-1=0,пропуск если pau1=0
27    nop    ;(1)

28    goto pa1 ;(1)

29 pa1 decfsz pau1 ;(1) pau1=pau1-1=0,пропуск если pau1=0
30    nop    ;(1)

31    return    ;(1)

формула расчёта задержки.
=========================================
A=число изначально записанное в регистр pau1,
B=число изначально записанное в регистр pau2,

((A-1)*((B*2)+5))+5=колличество тактов,
если обращение к этой подпрограмме выполняется командой call,
то необходимо прибавить ещё 2-такта,
которые съедает эта команда.
((3-1)*((4*2)+5))+5=31  и +2=33 такта,для PIC16F84 с тактовой частотой 4Мгц,
задержка составит 33 микросекунды.

Максимальная задержка,реализованная с помощью этой подпрограммы: 130815 микросекунд или 130,815 милисекунд.

Программа на QBASIC для ручного расчёта задержки
==========================================
10 CLS
15 PRINT "PIC16F84 Clock 4Mz": PRINT
20 INPUT "A=", a
30 INPUT "B=", b
40 PRINT "pauze="; ((a - 1) * ((b * 2) + 5)) + 5; "miksek,or "; (((a - 1) * ((b * 2) + 5)) + 5) / 1000; "milisek"
50 PRINT "pauze+call="; ((a - 1) * ((b * 2) + 5)) + 7; "miksek,or "; (((a - 1) * ((b * 2) + 5)) + 7) / 1000; "milisek"
60 PRINT : GOTO 20

Программа на QBASIC для автоматического расчёта задержки
==========================================
10 CLS
15 PRINT "PIC16F84 Clock 4Mz": PRINT
16 PRINT "*********************************************************"
17 PRINT
20 INPUT "pauze (miksek)=", p
21 PRINT "pauze+call (miksek)="; p + 2

30 FOR a = 0 TO 255
35 FOR b = 0 TO 255
40 l = ((a - 1) * ((b * 2) + 5)) + 5
45 IF l = p THEN GOTO 200
50 NEXT b
55 NEXT a
60 GOTO 1000
200 PRINT : PRINT "pauze:"
210 PRINT "A="; a
215 PRINT "B="; b

330 FOR c = 0 TO 255
335 FOR d = 0 TO 255
340 k = ((c - 1) * ((d * 2) + 5)) + 5
345 IF k = p + 2 THEN GOTO 400
350 NEXT d
355 NEXT c
360 GOTO 1000
400 PRINT : PRINT "pauze+call:"
410 PRINT "A="; c
415 PRINT "B="; d

500 GOTO 2000
1000 PRINT : PRINT "No variant!!!": GOTO 3000
2000 PRINT : PRINT "Ok!!!"
3000 PRINT : PRINT "*********************************************************"
3010 GOTO 17

Программы расчёта+программа+пояснения,можно скачать здесь:

http://narod.ru/disk/17406309000/PAUZA.rar.html

0

2

Вот ещё одна программа более злительной задержки,от секунд до минут:

;===================================================
;         ПП Пауза
;===================================================
pauz1 movlw .25 ;загрузить 0 в W
movwf pa4 ;пересылка W в регистр pa4

pauze4 movlw .25 ;загрузить 0 в W
movwf pa3 ;пересылка W в регистр pa3

pauze3 movlw .25 ;загрузить 0 в W
movwf pa2 ;пересылка W в регистр pa2

pauze2 movlw .25 ;загрузить 0 в W
movwf pa1 ;пересылка W в регистр pa1

pauze1 decfsz pa1,1 ;вычесть 1 из pa1 резултат в  pa1,пропуск если 0
goto pauze1

decfsz pa2,1 ;вычесть 1 из pa1 резултат в  pa2,пропуск если 0
goto pauze2

decfsz pa3,1 ;вычесть 1 из pa1 резултат в  pa3,пропуск если 0
goto pauze3

decfsz pa4,1 ;вычесть 1 из pa1 резултат в  pa4,пропуск если 0
goto pauze4
return

0


Вы здесь » Форум Мастера URI » Вопросы по разработкам и схемам maser-uri » Подпрограмма,паузы (задержки),для микроконтроллеров....


Рейтинг форумов | Создать форум бесплатно