Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

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

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



waitus и переменная

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

1

Здравствуйте.
Есть такая программа:

Код:
$regfile = "m8def.dat"
$crystal = 8000000

Config Portd.6 = Output
Dim Wtime As Integer

Wtime = 100

Do
 Set Portd.6
  Waitus Wtime
 Reset Portd.6
  Waitus Wtime
Loop

Не правильно работает, какое бы я значение не назначал Wtime, на выходе PORTD.6 всегда частота 827кГц
Если в цикле пишу Waitus=100 то все ок, работает нормально.

0

2

попробуйте эту переменную сделать как Word или Byte
Dim Wtime As Word
Dim Wtime As Byte

+1

3

Как Word пробовал, не работает. А Byte не пойдет, нужно значение больше 255. Хотя для интереса попробую.

Нет, как Byte тоже не работает. Waitms работает без проблем.

Отредактировано kms (2010-11-27 13:14:34)

0

4

Нашел в справке

The WAITUS is used internal by some statements. It was added to the BASCOM statements but it does NOT accept a variable. Only a constant is accepted.

:(

+1

5

значит тезис "Вначале читаем инструкцию" - вечен :)

могу дать кусок кода, на ассме, из FastAVR - проверен
но пределы микросекунд должны быть кратны 10
Т.е, 10, 20, 30 ... 90, 100, 110...

и задаются без нуля, т.е., для 10 будет 1, для 50 - 5, для 100 - 10 и тд

Код:
    $asm                                                   ' Вызов паузы us    = waitus 10
       ldi  zl, 1
       rcall _waitus
    $end Asm

а в конце программы (или другом месте) вставить код:

Код:
$asm ; Waitus * 10
_waitus:
  ldi  r22,25
_wus1:
     dec  r22
     brne _wus1
     dec  zl
     brne _waitus
  ret
$end Asm

это для 8 мгц

Отредактировано Александр Д. (2010-11-27 15:44:08)

0

6

значит тезис "Вначале читаем инструкцию" - вечен
Ну это да :)
Спасибо за пример, сохраню в памятках.

0

7

Стесняюсь спрашивать :) Но как теперь менять задержку? Имею ввиду программно.

0

8

если я не ошибаюсь, то вместо цифры указать переменную с таких скобках {Переменная}
я еще это не перевёл, не знаю :)
сейчас...

да, так и есть!
Для загрузки адреса переменной вы должны использовать её имя в скобках - {}

0

9

может пригодится?

Код:
$regfile = "m48DEF.dat"                                     ' >>> BASCOM <<<
$crystal = 8000000


Config Portd = Output

 Config Timer0 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1
 Ocr0a = 190                                                ' Настройки для частоты 22 кгц
 Start Timer0

waitms 500

 Stop Timer0
 Config Timer0 = Timer , Prescale = 1 , Compare A = Disconnect , Clear Timer = 1

0

10

Спасибо всем :)
Конкретно пока ничего не делаю, просто только начал изучать, ну и пробую всякие простенькие вещи. Светодиодами помигал, с дисплеем тоже поигрался, вот теперь хочу собрать генератор :)

0

11

Я как то в цикл ставил
For I =1 to y
Waitus 1
Next

Y меняет время задержки

0

12

Pasha написал(а):

Я как то в цикл ставил

Погрешность будет большая!

0