Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
Организация обратного отсчета времени в чч:мм:сс
S_moke Дата: Пт, 20.07.2012, 12:04  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Новенький
Сообщений: 17
Репутация: 1   ±
Замечания:   ±
На сайте с 16.08.2011

Статус: Offline

Добрый день форумчане!
Знающие (возможно уже сталкивающиеся с данной задачей) люди, помогите разложить произвольное число, например 7777 т.о. чтобы происходил обратный отсчет времени в формате остаток: чч:мм:сс.
Имеется код прямого счета для 876А на TMR0:

Device = 16F876A
Xtal = 4
Config CP_OFF, DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_OFF, BODEN_On, PWRTE_ON, WDT_OFF, XT_OSC
'-------------------------- Настройки подключения ЖКИ ------------------------
Declare LCD_Type ALPHA ' Тип ЖКИ - буквенно -цифровой
Declare LCD_RSPin PORTC.2 ' Управление линией RS
Declare LCD_ENPin PORTC.3 ' Управление линией E
Declare LCD_DTPin PORTC.4 ' Порт данных ЖКИ
Declare LCD_Interface 4 ' Разрядность шины данных
Declare LCD_CommandUs 2000 ' Задержка перед посылкой команды
Declare LCD_DataUs 50 ' Задержка перед посылкой данных
Declare LCD_Lines 2 ' Количество строк ЖКИ
Declare All_Digital = On ' Каждый порт выполняет свою функцию по умолчанию
TRISA = %00000000
TRISB = %00001111
TRISC = %00000000
PORTA = %00000000
PORTB = %00000000
PORTC = %00000000
ADCON1 = %00000110
Symbol GIE = INTCON.7 ' Global Interrupt Enable Bit
Symbol TMR0_uS = 256 ' Set time interval of TMR0
Symbol TMR0_Enable = INTCON.5 ' This option enables TMR0 interrupts
Symbol TMR0_Overflow = INTCON.2 ' This is the TMR0 overflow flag
Dim uS As Word
Dim mS As Word
Dim S As Byte
Dim M As Byte
Dim H As Byte
Dim D As Word
Dim SS As Word
Dim Minute As Byte
Dim Hourse As Byte

On_Interrupt Int_Sub
GoTo Initialization
Int_Sub:
GIE = 0
If TMR0_Overflow = 1 And TMR0_Enable = 1 Then TMR0_Overflow = 0: uS = uS + TMR0_uS: EndIf
If uS >= 1000 Then uS = 0: mS = mS + 1: EndIf
If mS >= 962 Then mS = 0: S = S + 1: SS = SS + 1: EndIf
If S >= 60 Then S = 0: M = M + 1: EndIf
If SS >= 60 Then SS = 0: EndIf
If M >= 60 Then M = 0: H = H + 1: EndIf
If H >= 24 Then H = 0: D = D + 1: EndIf
GIE = 1
Context Restore
Initialization:
TMR0_Enable = 0 ' Disable TMR0 interrupts
S = 0 'Clear timer registers
OPTION_REG.0 = 0 '000 - 1 : 2
OPTION_REG.1 = 0 '
OPTION_REG.2 = 0
OPTION_REG.5 = 0 ' Select Internal Clock Source
TMR0 = 0 ' Clear the TMR0 register
TMR0_Enable = 1 ' Enable TMR0 Interrupts
GIE = 1 ' Enable Global Interrupts

Main:
Cls

obr:

GoTo obr

Сообщение отредактировал S_moke - Пт, 20.07.2012, 12:05
ЯНДЕКС Дата: 20.07.2012
Broka Дата: Пт, 20.07.2012, 19:17  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 253
Репутация: 9   ±
Замечания:   ±
На сайте с 30.09.2009

Статус: Offline

On_Interrupt Int_Sub
GoTo Initialization
Int_Sub:
GIE = 0
If TMR0_Overflow = 1 And TMR0_Enable = 1 Then TMR0_Overflow = 0: uS = uS + TMR0_uS: EndIf
If uS >= 1000 Then uS = 0: mS = mS + 1: EndIf
If mS >= 962 Then mS = 0: S = S + 1: SS = SS + 1: EndIf`
If S >= 60 Then S = 0: M = M + 1: EndIf
If SS >= 60 Then SS = 0: EndIf
If M >= 60 Then M = 0: H = H + 1: EndIf
If H >= 24 Then H = 0: D = D + 1: EndIf
GIE = 1
Context Restore

У меня вопрос ... почему в 7 строке If mS >= 962 then mS = 0:Inc S:Inc SS:Endif
стоит число 962, почему не 1000?
Желательно описать все переменные, какая и для чего ..., так проще будет для всех!


Наладчик КИП и А
Сообщение отредактировал Broka - Пт, 20.07.2012, 19:20
S_moke Дата: Пн, 23.07.2012, 11:07  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Новенький
Сообщений: 17
Репутация: 1   ±
Замечания:   ±
На сайте с 16.08.2011

Статус: Offline

962 стоит потому, что в реальном устройстве была недопустимая для устройства спешка по времени. Путем подгона константы удалось определить ее на уровне 962
DAlexV Дата: Вт, 24.07.2012, 12:05  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (S_moke)
люди, помогите разложить произвольное число, например 7777 т.о. чтобы происходил обратный отсчет времени в формате остаток: чч:мм:сс.
До кучи добавил еще дни. Все в архиве.
Quote (Broka)
У меня вопрос ... почему в 7 строке If mS >= 962 then mS = 0:Inc S:Inc SS:Endif стоит число 962, почему не 1000?

Quote (S_moke)
962 стоит потому, что в реальном устройстве была недопустимая для устройства спешка по времени. Путем подгона константы удалось определить ее на уровне 962
А не проще четко выставить прерывание ???? Вот исходник. Сколько раз про это твержу, ни кто не слышит. В прерывании все по минимуму. А если еще кучу условий проверять, и счетом заниматься (так и будем в прерывании крутиться)
Прикрепления: ConstToDHMS.rar (27.4 Kb)


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
S_moke Дата: Пт, 10.08.2012, 15:25  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Новенький
Сообщений: 17
Репутация: 1   ±
Замечания:   ±
На сайте с 16.08.2011

Статус: Offline

Спасибо, DAlexV, совет помог и все получилось
DAlexV Дата: Сб, 11.08.2012, 11:40  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (S_moke)
совет помог и все получилось
Позвольте полюбопытствовать, что помогло ????
Quote (DAlexV)
четко выставить прерывание ????


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
  • Страница 1 из 1
  • 1
Поиск: