Понедельник, 06.05.2024, 16:43
progPROTON
Главная | статьи | Регистрация | Вход
Меню сайта
Категории раздела

ПРОСТОЙ ТАЙМЕР НА PIC16F630

Доработка ранее изготовленного более простого таймера

25,12,17 ссылка:

Таймеру можно задавать время от 1 минуты до 21 часа с дискретностью 1 минута. 
В устройстве 12 выключателей, каждому соответствует своя выдержка времени,

сложив цифры на выключателях, которые включили, получим заданное время. 
схема:

 

Использую данный таймер для зарядных устройств, и для паяльника

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

код:

    '****************************************************************
    '*  Name    : TIMER ON.BAS                                      *
    '*  Автор   : Лобзанюк К.П.                                     *
    '*          :                                                   *
    '*          :                                                   *
    '*  Дата    : 18.04.2017                                        *
    '*  Версия  : 2.00                                              *
    '*          :                                                   *
    '*          :                                                   *
    '****************************************************************
     
'     Declare  Optimiser_Level 1    ' Включить оптимизацию программы           
    Device = 16F630 
 Config CP_OFF, CPD_OFF, MCLRE_OFF ,BODEN_OFF, PWRTE_ON, WDT_OFF , INTRC_OSC_NOCLKOUT 

OPTION_REG = %00100110      'бит 5: T0CS: Выбор тактового сигнала для TMR0
                              '1 = внешний тактовый сигнал с вывода T0CKI
                               '0 = внутренний тактовый сигнал CLKOUT
    INTCON = %10100000      'TMR0 активизирован  
                               
    '--------------------Настройки портов-----------------------
 
     Declare  All_Digital = On   ;Установить все порты цифровыми входами/выходами  
    TRISA = %00101111   '  RА0...RА4 вход
    TRISC = %00000111          ' RC3,RC5 выход
   
'    ;==========================================================================
   
                    
   Symbol TOIF INTCON.2    ' TOIF - cимвол флага прерывания по переполнению таймера TMRO 
   Symbol PIN = PORTA.4
    Dim minut As Byte
    Dim chas As Byte
    Dim  Sec As Byte
    Dim  min1 As Byte 
    Dim flag As Bit 
    Dim flag1 As Bit
    Dim flag2 As Bit
    Dim flag3 As Bit
    Dim flag4 As Bit
    Dim flag5 As Bit
    Dim flag6 As Bit
    Dim flag7 As Bit
    Dim flag8 As Bit
    Dim flag9 As Bit
    Dim flag10 As Bit
    Dim flag11 As Bit
    Dim flag12 As Bit
   '-------------------Инициирование прерываний-------------------
 On_Interrupt GoTo EvriSec  ' Включить аппаратную обработку  прерывания 
    '--------------------------Главная программа-------------------------- 
main:

    PORTC.4 = 1
    PORTC.3 = 0                                'опрос выключателей для звуковой сигнализации их включения 

    If PORTA.0 = 1 Then  flag1 = 1  : EndIf 
    If PORTA.0 = 0 And flag1 = 1 Then  GoSub Bee : flag1 = 0 :  EndIf
    If PORTA.1 = 1 Then  flag2 = 1  : EndIf 
    If PORTA.1 = 0 And flag2 = 1 Then  GoSub Bee : flag2 = 0 :  EndIf 
    If PORTA.5 = 1 Then  flag3 = 1  : EndIf 
    If PORTA.5 = 0 And flag3 = 1 Then  GoSub Bee : flag3 = 0 :  EndIf 
    If PORTA.3 = 1 Then  flag4 = 1  : EndIf 
    If PORTA.3 = 0 And flag4 = 1 Then  GoSub Bee : flag4 = 0 :  EndIf 
    If PORTC.1 = 1 Then  flag5 = 1  : EndIf 
    If PORTC.1 = 0 And flag5 = 1 Then  GoSub Bee : flag5 = 0 :  EndIf 
    If PORTC.2 = 1 Then  flag6 = 1  : EndIf 
    If PORTC.2 = 0 And flag6 = 1 Then  GoSub Bee : flag6 = 0 :  EndIf      
    
       PORTC.3 = 1
      
       PORTC.4 = 0

    If PORTA.0 = 1 Then  flag7 = 1  : EndIf 
    If PORTA.0 = 0 And flag7 = 1 Then  GoSub Bee : flag7 = 0 :  EndIf
    If PORTA.1 = 1 Then  flag8 = 1  : EndIf 
    If PORTA.1 = 0 And flag8 = 1 Then  GoSub Bee : flag8 = 0 :  EndIf 
    If PORTA.5 = 1 Then  flag9 = 1  : EndIf 
    If PORTA.5 = 0 And flag9 = 1 Then  GoSub Bee : flag9 = 0 :  EndIf 
    If PORTA.3 = 1 Then  flag10 = 1  : EndIf 
    If PORTA.3 = 0 And flag10 = 1 Then  GoSub Bee : flag10 = 0 :  EndIf 
    If PORTC.1 = 1 Then  flag11 = 1  : EndIf 
    If PORTC.1 = 0 And flag11 = 1 Then  GoSub Bee : flag11 = 0 :  EndIf 
    If PORTC.2 = 1 Then  flag12 = 1  : EndIf 
    If PORTC.2 = 0 And flag12 = 1 Then  GoSub Bee : flag12 = 0 :  EndIf
       
DelayMS 150
    '   Sec = 0 
      minut = 0
      min1 = 0
      chas = 0
    PORTC.5 = 0 
    PORTC.3 = 0
    PORTC.4 = 0 
    If PORTC.0 = 0  Then DelayMS 150 : flag = 1 : GoTo triger : EndIf           ; пуск
     GoTo main 
triger: 
 
    If PORTC.0 = 1 And flag = 1 Then  DelayMS 150  :GoTo Label1 :  EndIf 
      GoTo triger                                                             
Label1:
     

    PORTC.4 = 1
    PORTC.3 = 0

      
    If PORTA.0 = 0 Then  DelayMS 50: minut = 1  :  EndIf     'опрос выключателей
    If PORTA.1 = 0 Then  DelayMS 50: minut = minut+2  : EndIf
    If PORTA.5 = 0 Then  DelayMS 50: minut = minut+2 :  EndIf
    If PORTA.3 = 0 Then  DelayMS 50: minut = minut+5 : EndIf
    If PORTC.1 = 0 Then  DelayMS 50: minut = minut+10 : EndIf
    If PORTC.2 = 0 Then  DelayMS 50: minut = minut+20 : EndIf   
       PORTC.3 = 1
      
       PORTC.4 = 0

    If PORTA.0 = 0 Then DelayMS 50: minut = minut+20   :  EndIf         
    If PORTA.1 = 0 Then DelayMS 50: chas = 1  :  EndIf
    If PORTA.5 = 0 Then DelayMS 50: chas = chas+2   :  EndIf
    If PORTA.3 = 0 Then DelayMS 50: chas = chas+2  :  EndIf
    If PORTC.1 = 0 Then DelayMS 50:chas = chas+5 :  EndIf
    If PORTC.2 = 0 Then DelayMS 50: chas = chas+10 : EndIf
      PORTC.4 = 1  
      PORTC.5 = 1 
       Sec = 0
Label2: 
      GoSub Stop1
     If  flag = 0 Then   GoTo Label3  :  EndIf
     If Sec = 60 Then Sec = 0: Inc min1   :  EndIf    
    If min1 = 60 Then min1 = 0: Dec chas   :  EndIf 
    If chas > 0 Then GoTo Label2 : EndIf
     
    If min1 < minut Then GoTo Label2 : EndIf 
 Label3:         
      PORTC.5 = 0
     GoTo main
     
'Pusk:                   

  
Stop1:

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

Return
Bee:
Sound PIN, [98,20]    ' звуковой сигнал

Return
'------------------------прерывание---------------------------------------- 
  EvriSec:              

     Inc Sec         ' увеличение Sec
     Toggle PORTC.3             ' Переключить светодиод в противоположное состояние
    
     TOIF = 0                    ' сбросить флаг прерываний TOIF регистра TMRO
Context Restore             ' Восстановить регистры и выйти из обработки прерываний
 

 

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

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

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