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

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

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

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



Timer

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

1

$regfile = "8H1K08.DAT"              ' STC registers list
$crystal = 11059200                  ' CPU clock frequence
$large

On Timer1 Int_tmr1                   ' назначаем подпрограмму на переполнение таймера

Const Gorit = 0 : Const Gasim = 1

Led_n Alias P3.1                     ' Выход Светодиод.  Управление нулём!
P3ie.1 = 1                           ' 1: Enable digital pins
P3pu.1 = 0                           ' 0= Disable pull-up resistor
P3m0.1 = 1 : P3m1.1 = 0              ' pins mode "Push-Pull"
'-----------------------------------------------------------------------------------

Led_n = Gorit : Waitms 255 : Led_n = Gasim

' конфигурируем таймер

Auxr = Auxr And &HBF                'Timer clock is 12T mode
Tmod = Tmod And &H0F                'Set timer work mode

' 71ms@11.0592MHz,  максимально для этой тактовой
Tl1 = 0 : Th1 = 0                   'Initial timer value

Start Timer1                        ' Tr1 = 1
Enable Timer1                       ' Et1 = 1
Enable Interrupts                   ' IE.7=1, EA=1, разрешаем прерывания

Do
Loop

' ===================  Прерывание по таймеру =================
Int_tmr1:                         
  Led_n = Not Led_n
Return

0

2

Компилятор имеет возможности создания задержек командами Delay и WaitMs
Но точность первой вообще никакая, так как не учитывается тактовая частота МК.
А вторая считает неверно из-за иной архитектуры, да еще имеет ограничение в длительность 255 mS.

Применяю таймер0 для создания пауз до 65536 mS

ps
если нужна еще бОльшая точность, то поиграйтесь с Tl0

Код:
Sub Delay_ms(my_delay As Word)      

 Do
  Auxr.7 = 1                         ' Timer0 clock is 1T mode
  Tmod = Tmod And &HF0               ' Set Timer0 work mode

  Tl0 = &HFF : Th0 = &HE8 ' Инициализация Таймера0: 1 mS при 6.0 MHz

  Tf0 = 0                            ' Tcon.5 = 0  flag clear
  Tr0 = 1                            ' Tcon.4 = 1 Start Timer0

  Do : Loop Until Tf0 = 1            
  Tr0 = 0                            ' Stop Timer0, Tcon.4 = 0

  Decr My_delay
 Loop Until My_delay = 0

End Sub

0

3

Что интересно, do:loop until timer1>=555 не работает (с while также, ). Приходится в байты играться.

0

4

так и не должно работать
Да и тут два регистра у каждого таймера

0