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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Таймеры, ШИМ и все про них » Вопрс про TIMER2 в режиме Clock на Atmega8.


Вопрс про TIMER2 в режиме Clock на Atmega8.

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

1

Нужен простецкий таймер привязанный к реальному времени. Программа в Протеус работает без проблем. В железе часы стоят на установленном времени. Не считает таймер. Как это реализовать?

Код:
$regfile = "m8adef.dat"                                     ' тип МК
$crystal = 4000000                                          ' выбор кристала для расчета задержек
$baud = 9600
$hwstack = 160
$swstack = 160
$framesize = 70

'-------------------конфигурируем АЦП-------------------------------------------
 Config Adc = Single , Prescaler = Auto , Reference = Avcc
 Dim R As Word
 Dim L As Word
 Start Adc                                                 
'===========================================================================================
 Config Timer0 = Timer , Prescale = 256
 On Timer0 Счет
'===========================================================================================
 Config Portb.3 = Output
 Движка Alias Portb.3 : Движка = 0
'-----------------------------------------------------------------------------------------------------
 Config Pinb.4 = Input
 Свет Alias Pinb.4 : Portb.4 = 1
'-------------------------------------------------------------------------------------------------
 Dim Seco_last As Byte
 Dim Час As Byte : Час = 0
 Dim Секунда As Byte : Секунда = 0
 Dim Секунда2 As Word : Секунда2 = 0
 Dim T As Byte
 Dim Flag As Bit : Flag = 0
 Dim Импульс As Byte : Импульс = 1
 Dim Период As Byte : Период = 1

 Enable Interrupts                                         
 Enable Timer0 : Start Timer0
 Enable Timer2
 Config Clock = Soft                                        ' асинхронный режим таймера Т2
 Time$ = "12:00:00"                                         ' начальное значение времени
 '_hour
 '_min
'===========================================================================================

Do

 L = Getadc(1)
 R = Getadc(2)

 Select Case L
   Case 0 To 50 : Импульс = 1
   Case 51 To 100 : Импульс = 2
   Case 101 To 150 : Импульс = 3
   Case 151 To 200 : Импульс = 4
   Case 201 To 250 : Импульс = 5
   Case 251 To 300 : Импульс = 6
   Case 301 To 350 : Импульс = 7
   Case 351 To 400 : Импульс = 8
   Case 401 To 450 : Импульс = 9
   Case 451 To 500 : Импульс = 10
   Case 501 To 550 : Импульс = 11
   Case 551 To 600 : Импульс = 12
   Case 601 To 650 : Импульс = 13
   Case 651 To 700 : Импульс = 14
   Case 701 To 750 : Импульс = 15
   Case 751 To 800 : Импульс = 16
   Case 801 To 850 : Импульс = 17
   Case 851 To 900 : Импульс = 18
   Case 901 To 950 : Импульс = 19
   Case Else : Импульс = 20
 End Select

 Select Case R
   Case 0 To 50 : Период = 1
   Case 51 To 100 : Период = 2
   Case 101 To 150 : Период = 3
   Case 151 To 200 : Период = 4
   Case 201 To 250 : Период = 5
   Case 251 To 300 : Период = 6
   Case 301 To 350 : Период = 7
   Case 351 To 400 : Период = 8
   Case 401 To 450 : Период = 9
   Case 451 To 500 : Период = 10
   Case 501 To 550 : Период = 11
   Case 551 To 600 : Период = 12
   Case 601 To 650 : Период = 13
   Case 651 To 700 : Период = 14
   Case 701 To 750 : Период = 15
   Case 751 To 800 : Период = 16
   Case Else : Импульс = 17
 End Select


 If Свет = 0 Then
    Секунда2 = 0
    Секунда = 0
    Час = 0
    Flag = 0
    Движка = 0
 End If

 If _sec < Seco_last Then Incr Час

 If Свет = 1 And Flag = 0 Then Движка = 1

 If Flag = 1 And Час < Период Then Секунда = 0

 If Flag = 1 And Час = Период Then Движка = 1

 If Движка = 1 And Секунда => Импульс Then
    Движка = 0 : Час = 0 : Flag = 1
 End If

 Print "Period=" ; Период ; " Impuls=" ; Импульс
 Print _hour ; ":" ; _min ; ":" ; _sec

 Seco_last = _sec
 Waitms 300

 Loop
End
'------------------------------------------------------------------------------------------------------
Счет:

  Incr T
  If T = 61 Then
    Incr Секунда2
    Incr Секунда : T = 0
  End If

' If Секунда2 = 60 Then
'    Incr Час : Секунда2 = 0
' End If

Return

0

2

Здесь посмотрите.

0

3

Andrusha
Схему чужую увидел вспомнил, что очень давно тоже асинхронный таймер не работал. Кондюки на кварц надо вешать. Без них с большинством кварцев не работает.
Спасибо.

0


Вы здесь » Программирование ATMEL в BASCOM. » Таймеры, ШИМ и все про них » Вопрс про TIMER2 в режиме Clock на Atmega8.