Нужен простецкий таймер привязанный к реальному времени. Программа в Протеус работает без проблем. В железе часы стоят на установленном времени. Не считает таймер. Как это реализовать?
Код:
$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