Суббота, 20.04.2024, 18:37
progPROTON
Главная | статьи | Регистрация | Вход
Меню сайта
Категории раздела

ПРОСТОЙ ТАЙМЕР НА PIC16F630 ВРЕМЯ ЗАДАЁТ РЕЗИСТОР

Доработка ранее изготовленного более простого таймера
17,02,2021 ссылка: добавил кварцевый генератор и динамик

В устройстве время задается двумя резисторами, одним часы, другим минуты. 
На индикаторе высвечивается заданное время. После нажатия кнопки пуск,

включается реле и происходит обратный отсчет времени.

Отключается реле по истечении заданного 
времени или при повторном нажатии кнопки. 
При программировании Jp1, Jp2, отключить. 
Программа на ProtonIDE. 
Шил программатором по схеме из Радио 2004 №2 стр.31 ПО icprog 1,05с 

В протеусе при увеличении времени комп подвисает, зато в железе все работает хорошо. 

схема:

схема задающего генератора:

код:

 '******************************************************************
    '*  Name    : TIMER_164_i_R.BAS                                  *
    '*  Автор   : Лобзанюк К.П.                                      *
    '*          :                                                    *
    '*          :                                                    *
    '*  Дата    : 06.02.2021                                         *
    '*  Версия  : 2.00                                               *
    '*   :       *
    '*          :                  *
    '*****************************************************************
Device 16F676 
Xtal 4 
'----------------------------Предустановки---------------------------------------------------------- 
Config CP_OFF, CPD_OFF, MCLRE_OFF ,BODEN_OFF, PWRTE_ON, WDT_OFF , INTRC_OSC_NOCLKOUT 

OPTION_REG = %00100110      'бит 5: T0CS: Выбор тактового сигнала для TMR0
                              '1 = внешний тактовый сигнал с вывода T0CKI  (32.768k )
                               '0 = внутренний тактовый сигнал CLKOUT
    INTCON = %10100000      'TMR0 активизирован  

'----------------------------------Настройки портов------------------------------------------------- 
 Declare  All_Digital = On   ;Установить все порты цифровыми входами/выходами 
TRISA = %00001100
TRISC = %00000110
'-----------------------------------Конфигурация переменных----------------------------------------- 
 Symbol ZBUK PORTA.0
Symbol Clock  PORTA.4 'Вывод для тактовых импульсов для сдвигового регистра 
Symbol DTA  PORTA.5 'Вывод для передачи данных для сдвигового регистра 
Symbol KH  PORTA.3      
Symbol RELE  PORTA.1
Symbol TOIF  INTCON.2    ' TOIF - cимвол флага прерывания по переполнению таймера TMRO       
Dim Value As Byte 'Переменная для осуществления табличного конвертирования числа 
Dim n As Byte 'Переменная для выделения из числа нужного разряда 
Dim Sec As Byte  'Переменная для секунд
Dim minut As Byte  'Переменная для минут
Dim chas As Byte    'Переменная для часов   
Dim flag As Bit
Dim x As Bit
'-------------------Инициирование прерываний-------------------
 On_Interrupt GoTo EvriSec  ' Включить обработку програмных прерываний  
'-------------------------------------Главная программа--------------------------------------------- 
   flag = 0 

 main:
   RELE = 0 
    Sec = 0

   minut = Pot PORTC.1, 23 ' Считываем значение на выводе PORTC.1     10 это24ч  23это 60мин  
   chas = Pot PORTC.2, 10
   If minut  > 59 Then minut  = 59 
    If chas  > 99 Then chas  = 99  ' 
     GoSub DI
 If KH = 0 And flag = 0 Then  DelayMS 150 : flag = 1   : GoTo triger  :  EndIf      ; пуск    
     GoTo main 
triger: 
    If KH = 1 And flag = 1 Then  DelayMS 150  :GoTo Label1 :  EndIf 
     GoTo triger
  
Label1:
      RELE = 1 
'    minut = Pot PORTC.1, 23 ' Считываем значение на выводе PORTC.1     10 это24ч  23это 60мин  
'    chas = Pot PORTC.2, 10    '                 

'    GoSub DI

    Label2: 
      GoSub Stop1
      GoSub DI
      
     If  flag = 0 Then   GoTo Label3  
     If Sec > 59 Then Sec = 0: Dec minut   :  EndIf    
    If minut = 0 And chas > 0 Then minut = 60: Dec chas   :  EndIf 
    If chas > 0 Then GoTo Label2 
     
    If minut > 0 Then GoTo Label2 
 Label3:         
      RELE = 0 
   GoSub DI
 Sound ZBUK,[125,20,0,10] 
   If KH = 0  Then   GoTo triger2  
    GoTo Label3
   triger2: 
   
   DelayMS 150 
    If KH = 1  Then  DelayMS 150: flag = 0   :GoTo main :  EndIf 
    GoTo triger2: 
     
     

Stop1:

  If KH = 0 And flag = 1 Then   GoTo triger1  :  EndIf
   
     GoTo tr
triger1: 
   
   DelayMS 150 
    If KH = 1 And flag = 1 Then  DelayMS 150: flag = 0   :GoTo tr :  EndIf 
   GoTo triger1
tr:     

Return 

   '------------------------прерывание---------------------------------------- 
  EvriSec:              
  Context Save
     Inc Sec         ' увеличение Sec
   x = ~ x           ' Переключить в противоположное состояние
'     If Sec = 60 Then Sec = 0 :Inc minut 


  TOIF = 0                    ' сбросить флаг прерываний TOIF регистра TMRO
Context Restore             ' Восстановить регистры и выйти из обработки прерываний

;------------------------------Подпрограмма динамической индикации---------------------------------- 

DI: 
n =  Dig minut, 0 'Выделяем из числа единицы

GoSub Convert 'и отправляем на табличную конвертацию 
 SHOut DTA, Clock, MsbFirst, [Value] 'Проталкиваем в регистр сконвертированный код для единиц 
 PORTC.0 = 0
DelayMS 1 'Задержка для отображения разряда 4 
PORTC.0 = 1
n =  Dig minut, 1 'Выделяем из числа десятки 


GoSub Convert 'и отправляем на табличную конвертацию 

 SHOut DTA, Clock, MsbFirst, [Value] 'Проталкиваем в верхний регистр сконвертированный код для десятков 
  PORTC.3 = 0
DelayMS 1 'Задержка для отображения разряда 3 
  PORTC.3 = 1
  n =  Dig chas, 0
If x = 0 And RELE = 1 Then   GoSub Convert1 :GoTo Label4  
GoSub Convert 
  Label4:
 SHOut DTA, Clock, MsbFirst, [Value] '
  PORTC.4 = 0
DelayMS 1 'Задержка для отображения разряда 2 
  PORTC.4 = 1
  n =  Dig chas, 1
 
GoSub Convert '
 SHOut DTA, Clock, MsbFirst, [Value] 
 PORTC.5 = 0
DelayMS 1 'Задержка для отображения разряда 1 
 PORTC.5 = 1
'-------------------------------Подпрограмма табличной конвертации числа---------------------------- 
Convert: 
Value = LookUpL n, [192,249,164,176,153,146,130,248,128,144] 
Return 
Convert1: 
Value = LookUpL n, [64,121,36,48,25,18,2,120,128,16] 
Return 
 
 

 

архив в протеусе

 

Категория: о proton и не только | Добавил: Konstantin (16.05.2021)
Просмотров: 182 | Теги: pic16f630, Таймер, Простой | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Вход на сайт
Поиск
Друзья сайта

  • Cайт,BASCOM AVR
  • Информер
    Под стеклом
    Настольная книга если показывает кракозябру в браузере ставлю кодировку UTF-8
  • ПРОГРАММИРОВАНИЕ PIC-МИКРОКОНТРОЛЛЕРОВ В PROTON+IDE на PicBasic