Нужна помощь. Секундомер на PIC16F84A

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Родился
Сообщения: 1
Зарегистрирован: Чт апр 26, 2018 17:51:09

Сообщение AXZONA »

В общем согласно задания я должен был сделать секундомер на PIC16F84A. По нажатию на кнопку START секундомер активизируется, при нажатии на STOP соответственно останавливается, а также при нажатии на кнопку ZAPOMINANIE происходит запоминание текущего времени на секундомере(интервал), количество таких запоминаний должно быть 4. Ну и при одновременном нажатии STOP и START(1 раз - первый интервал, 2 раз - второй, и т.д). В общем вот такой код я смог набрасать, но почему-то он не работает так как должен. Буду очень благодарен помощи. Ниже приведу код программы.
LIST p=16F84A
#include <p16f84a.inc>
INDICATOR4 equ 0x1C
INDICATOR3 equ 0x1D
INDICATOR2 equ 0x1E
INDICATOR1 equ 0x1F
COUNT equ 0x2C
Reg_1 equ 0x0C
Reg_2 equ 0x0D
Reg_3 equ 0x0E
DlyaIND4 equ 0x3C
DlyaIND3 equ 0x3D
DlyaIND2 equ 0x3E
DlyaIND4_1 equ 0x3C
DlyaIND3_1 equ 0x3D
DlyaIND2_1 equ 0x3E
DlyaIND4_2 equ 0x3F
DlyaIND3_2 equ 0x4C
DlyaIND2_2 equ 0x4D
DlyaIND4_3 equ 0x4E
DlyaIND3_3 equ 0x4F
DlyaIND2_3 equ 0x5C
COUNTERS equ 0x5E
org 0x00
bsf STATUS,RP0
movlw b'10000000'
movwf TRISB
movlw b'11000'
movwf TRISA
bcf STATUS,RP0
Proverka1 movlw .0
movwf INDICATOR4
movwf INDICATOR3
movwf INDICATOR2
movwf INDICATOR1
movlw .1
movwf COUNT
;0000
movlw b'11111111'
movwf PORTB
btfss PORTB,7
goto two
btfss PORTA,3
call abcf
goto START
two
btfsc PORTA,4
goto out
goto P1
P1 btfss PORTB,7
goto P1
goto START

ZAPOMINANIE movf INDICATOR4,w ;ЗАПОМИНАНИЕ
movwf DlyaIND4
movf INDICATOR3,w
movwf DlyaIND3
movf INDICATOR2,w
movwf DlyaIND2
incf COUNTERS,f
RETURN

ZAPOMINANIE1 movf INDICATOR4,w ;ЗАПОМИНАНИЕ
movwf DlyaIND4_1
movf INDICATOR3,w
movwf DlyaIND3_1
movf INDICATOR2,w
movwf DlyaIND2_1
incf COUNTERS,f
RETURN

ZAPOMINANIE2 movf INDICATOR4,w ;ЗАПОМИНАНИЕ
movwf DlyaIND4_2
movf INDICATOR3,w
movwf DlyaIND3_2
movf INDICATOR2,w
movwf DlyaIND2_2
incf COUNTERS,f
RETURN

ZAPOMINANIE3 movf INDICATOR4,w ;ЗАПОМИНАНИЕ
movwf DlyaIND4_3
movf INDICATOR3,w
movwf DlyaIND3_3
movf INDICATOR2,w
movwf DlyaIND2_3
incf COUNTERS,f
RETURN

abcf addwf PCL,f
goto ZAPOMINANIE
goto ZAPOMINANIE1
goto ZAPOMINANIE2
goto ZAPOMINANIE3
decf COUNTERS,f
return
goto VIVOD1
nop
goto VIVOD2
nop
goto VIVOD3
nop
goto VIVOD4
nop
decf COUNTERS,f
decf COUNTERS,f
return

out incf COUNTERS,F
incf COUNTERS,F
call abcf

VIVOD1 movlw DlyaIND4
movwf PORTB
bsf PORTA,0
movlw DlyaIND3
movwf PORTB
bsf PORTA,1
movlw DlyaIND2
movwf PORTB
bsf PORTA,2
BTFSS PORTB,7
return
VIVOD2 movlw DlyaIND4_1
movwf PORTB
bsf PORTA,0
movlw DlyaIND3_1
movwf PORTB
bsf PORTA,1
movlw DlyaIND2_1
movwf PORTB
bsf PORTA,2
BTFSS PORTB,7
return

VIVOD3 movlw DlyaIND4_2
movwf PORTB
bsf PORTA,0
movlw DlyaIND3_2
movwf PORTB
bsf PORTA,1
movlw DlyaIND2_2
movwf PORTB
bsf PORTA,2
BTFSS PORTB,7
return

VIVOD4 movlw DlyaIND4_3
movwf PORTB
bsf PORTA,0
movlw DlyaIND3_3
movwf PORTB
bsf PORTA,1
movlw DlyaIND2_3
movwf PORTB
bsf PORTA,2
BTFSS PORTB,7
return

START
Proverka2 btfsc PORTA,4
goto Proverka1
movf INDICATOR4,w
call tablica
movwf PORTB
movlw b'0001'
movwf PORTA
call delay;
bcf PORTA,0
movf INDICATOR3,w
call tablica
movwf PORTB
bsf PORTA,1
call delay;
bcf PORTA,1
movf INDICATOR2,w
call tablica
movwf PORTB
bsf PORTA,2
call delay
bcf PORTA,2
decfsz COUNT,F;0
goto START
movlw .30
movwf COUNT ;5
incf INDICATOR4,f
bcf STATUS,2
movlw .10
subwf INDICATOR4,w
btfsc STATUS,2
goto Obnulenie_4
goto START
delay
movlw .221
movwf Reg_1
movlw .13
movwf Reg_2
decfsz Reg_1,F
goto $-1
decfsz Reg_2,F
goto $-3
nop
nop
return
tablica addwf PCL,f
retlw b'01000000';0 ;return call
retlw b'11111001';1
retlw b'00100100';2
retlw b'00110000';3
retlw b'00011001';4
retlw b'00010010';5
retlw b'00000010';6
retlw b'11111000';7
retlw b'00000000';8
retlw b'00010000';9

Obnulenie_4 movlw .0
movwf INDICATOR4
incf INDICATOR3,f
bcf STATUS,2
movlw .6
subwf INDICATOR3,w
btfsc STATUS,2
goto Obnulenie_3
goto START
Obnulenie_3 clrf INDICATOR3
incf INDICATOR2,f
bcf STATUS,2
movlw .10
subwf INDICATOR2,w
btfsc STATUS,2
goto Obnulenie_2
goto START
Obnulenie_2 clrf INDICATOR2
goto START
end
Вложения
1.png
Сама схема секундомера
(72.26 КБ) 629 скачиваний
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Напишите мне в личку.
Docendo discimus
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15752
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Какой ДЯТЕЛ дает студню учебную задачу с активным уровнем кнопок равным 1??
:facepalm:
Потрогал лапой паяльник
Сообщения: 399
Зарегистрирован: Сб авг 08, 2009 23:02:57
Откуда: Ростов-на-Дону

Сообщение driver_gv »

Возможно и не дятел. В ответственных системах контакты ставят на размыкание. Например грибок аварийной остановки оборудования. Вот и высокий активный уровень.
Это связано с тем, что при нажатии контакты могут и не замкнуться, а вот разомкнутся всегда. И если провод оборван , то тоже не запустится.
__________________
Все, что нельзя запрограммировать на ассемблере, приходится паять
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Сообщение musor »

а кто сказал чтоэто было в ТЗ ? дум аю это он так решил сам кстати резисторы в сегмеентах надо ставить еще
насчнт кнопок думаю это на усмотрение разработчика (а не заказчика) в ряде случаев вообше делается дин опрос одновремено с разверткой индикатора *(тоесть всесто 3 портов нужен 1!) если будет фыотофинишь то там уже не кнопка будет а оптрон
что до размыкания это опционално можно реншить в програме выбрав инверсию наприер через ичейку ипром или минюшку калибровок

Добавлено after 3 minutes 39 seconds:
кстати на схеме нет ккварка неясно неужели на внутренем генке можно чтото замерять в интервалах или периодах обычно нужен не простой мусорный кварц 12-14м а нацело деляший ся на 2 в степени Эн
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15752
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Если подать внешнее тактирование, то можно заставить МК работать и без кварца. А так да - ПИК 84й БЕЗ КВАРЦА НЕ РАБОАЕТ.
8)
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

[uquote="musor",url="/forum/viewtopic.php?p=3364194#p3364194"]...кстати на схеме нет ккварка...[/uquote]
Не забываем, что это протеус и у него всё в свойствах.
Docendo discimus
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15752
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Нашел транзистор. Понюхал.
Сообщения: 152
Зарегистрирован: Пн мар 06, 2017 18:53:23
Откуда: Казань.

Сообщение vk696 »

пишите на С. в глазах зарябило.
Друг Кота
Аватара пользователя
Сообщения: 15752
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

А чем это так ассемблер не понравился?
8)
На Си только библиотеки скрыты, а ежли читать с полным составом, включая те библиотеки... :facepalm: .
в моих прожках также сделано - вот ВЕСЬ основной файл (ежли нет желания лазить по "пристежным библиотекам" - не читайте их)
Спойлер;**********************************************************************
; This file is a basic code template for object module code *
; generation on the PIC16F628A. This file contains the *
; basic code building blocks to build upon. *
; *
; Refer to the MPASM User's Guide for additional information on *
; features of the assembler and linker (Document DS33014). *
; *
; Refer to the respective PIC data sheet for additional *
; information on the instruction set. *
; *
;**********************************************************************
; *
; Filename: ktp.asm *
; Date: 14.07.2017 - *
; File Version: *
; *
; Author: BORIS A KRUTITSKIY *
; Company: KOBRA SOFT *
; *
; *
;**********************************************************************
; *
; Files required: P16F628A.INC *
; *
;**********************************************************************
; *
; Notes: *
; *
;**********************************************************************
;
list p=16F628A ; list directive to define processor
#include <p16F628A.inc> ; processor specific variable definitions

errorlevel -302 ; suppress message 302 from list file

__CONFIG _CP_OFF & DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT

; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file.
; See data sheet for additional information on configuration word settings.

; -----------------------------------------------------
#include <librus\def_ktp.txt> ; файл объявленных имен, бит и констант
#include <librus\mac_ktp.txt> ; файл описания макросов
; вместо name project подставляется имя файла соответствующего проекта
; шаблоны имеют name project = proto
;________________________
;
;**********************************************************************
; участок размещения программ общего применения
; может быть также представлен подключаемыми файлами
;
;
;--------------------------------------------------------
;
#include <librus\irq_ktp.txt> ; файл описания
; вектор аппаратного сброса по RESET
; и участки входа и выхода в/из
; процедур обслуживания вызова прерывания
; вместо name project подставляется имя файла соответствующего проекта
; шаблоны имеют name project = proto
;--------------------------------------------------------
#include <librus\libr_ktp.txt> ; файл описания секции типовых
; библиотек-утилит общего применения прикладного программного обеспечения МК
; вместо name project подставляется имя файла соответствующего проекта
; шаблоны имеют name project = proto
;
;--------------------------------------------------------
;
#include <librus\kasdis_c.txt> ; файл обработчика обслуживания дисплея
#include <librus\tabls_ktp.txt> ; файл знакогенератора для kasdis_c
#include <librus\termo_ktp.txt> ; файл математики bin->dec и обработчика данных от DS18B20
#include <librus\tmm_ktp.txt> ; файл обработчика таймеров
;--------------------------------------------------------
#include <librus\hd_ktp.txt> ; файл описания секции начальной инициализации и/или
; конфигурации внутренней периферии МК
; вместо name project подставляется имя файла соответствующего проекта
; шаблоны имеют name project = proto
;--------------------------------------------------------
#include <librus\sfi_ktp.txt> ; файл описания секции начальной инициализации и/или
; конфигурации прикладного программного обеспечения МК
; вместо name project подставляется имя файла соответствующего проекта
; шаблоны имеют name project = proto
;
;---------------------------------------------------------
#include <librus\ee_ktp.txt> ; файл описания карты размещения
; данных в EEPROM МК
; вместо name project подставляется имя файла соответствующего проекта
; шаблоны имеют name project = proto
;---------------------------------------------------------
END ; directive 'end of program'
ежли удалить комментарии то останется всего-то:

Код: Выделить всё

;    Filename:        ktp.asm                                         *
    list      p=16F628A           ; list directive to define processor
    #include <p16F628A.inc>       ; processor specific variable definitions
    errorlevel  -302       ; suppress message 302 from list file
  __CONFIG   _CP_OFF & DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT
  #include <librus\def_ktp.txt> ; файл объявленных имен, бит и констант
  #include <librus\mac_ktp.txt> ; файл описания макросов
  #include <librus\irq_ktp.txt> ; файл описания   вектор аппаратного сброса по RESET
;  и участки входа и выхода в/из процедур обслуживания вызова прерывания
  #include <librus\libr_ktp.txt> ; файл описания секции типовых
; библиотек-утилит общего применения прикладного программного обеспечения МК
  #include <librus\kasdis_c.txt> ; файл обработчика обслуживания дисплея
  #include <librus\tabls_ktp.txt> ; файл знакогенератора для kasdis_c
  #include <librus\termo_ktp.txt> ; файл математики bin->dec и обработчика данных от DS18B20
  #include <librus\tmm_ktp.txt> ; файл обработчика таймеров
  #include <librus\hd_ktp.txt> ; файл описания секции начальной инициализации и/или
; конфигурации внутренней периферии МК
  #include <librus\sfi_ktp.txt> ; файл описания секции начальной инициализации и/или
; конфигурации прикладного программного обеспечения МК
  #include <librus\ee_ktp.txt> ; файл описания карты размещения  данных в EEPROM МК
        END                       ; directive 'end of program'
Неуж-то читать тяжко?
:wink:
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Если уж на то пошло, то:

Код: Выделить всё

    #include <p16F628A.inc>       ; processor specific variable definitions
  __CONFIG   _CP_OFF & DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT
  #include <myprog.txt>
        END
Docendo discimus
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15752
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

АГА! значится и всю начинку внутри закопал!
Я ж тоже могу все файлы в один запрятать.
:twisted:
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Зато читать левым читателям удобно. :)
Docendo discimus
Контактная информация:
OKF
Это не хвост, это антенна
Сообщения: 1445
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

[uquote="pyzhman",url="/forum/viewtopic.php?p=3385784#p3385784"]Если уж на то пошло, то:

Код: Выделить всё

    #include <p16F628A.inc>       ; processor specific variable definitions
  __CONFIG   _CP_OFF & DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT
  #include <myprog.txt>
        END
[/uquote]

Нет много. Пусть так:

Код: Выделить всё

#include <myprog.txt>  
END
Я фигею дорогая редакция. Кто как хочет так и дрочит.(
Друг Кота
Аватара пользователя
Сообщения: 15752
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Главное, чтоб в результате получилось работоспособное устройство.
:hunger:
А касательно правил - оные определяются в описаниях компиляторов и практическим удобством готовки.
8)
Нашел транзистор. Понюхал.
Сообщения: 152
Зарегистрирован: Пн мар 06, 2017 18:53:23
Откуда: Казань.

Сообщение vk696 »

Си и хороший компилятор нереально облегчают адаптацию кода под другой камень.
да и вообще, давайте в машинных кодах писать...;)
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

[uquote="vk696",url="/forum/viewtopic.php?p=3387208#p3387208"]...под другой камень...[/uquote]
Часто было?
Docendo discimus
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 152
Зарегистрирован: Пн мар 06, 2017 18:53:23
Откуда: Казань.

Сообщение vk696 »

"другой камень" имел ввиду PIC другой серии.
да часто использую части своих программ в проектах на разных PIC контроллерах.
OKF
Это не хвост, это антенна
Сообщения: 1445
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

[uquote="pyzhman",url="/forum/viewtopic.php?p=3387260#p3387260"]Часто было?[/uquote]
Не часто, но было. Вообще из другого семейства. При этом ничего не меняя, автоматом.
Друг Кота
Аватара пользователя
Сообщения: 25613
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Если код примитивен и сводится к ногодрыгу, то менять ничего не требуется ни в Си, ни в АСМе.
А если используются специфические особенности конкретного МК, то прямой перенос не прокатит ни в Си, ни в АСМе.
Использовать готовые куски кода так же можно в любом варианте.
Ответить

Вернуться в «PIC»