Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

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

Чт апр 26, 2018 18:16:47

В общем согласно задания я должен был сделать секундомер на 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 KiB) Скачиваний: 600

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

Пт апр 27, 2018 11:00:02

Напишите мне в личку.

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

Пт апр 27, 2018 14:21:03

Какой ДЯТЕЛ дает студню учебную задачу с активным уровнем кнопок равным 1??
:facepalm:

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

Пт апр 27, 2018 14:26:15

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

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

Пт апр 27, 2018 14:34:22

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

Добавлено after 3 minutes 39 seconds:
кстати на схеме нет ккварка неясно неужели на внутренем генке можно чтото замерять в интервалах или периодах обычно нужен не простой мусорный кварц 12-14м а нацело деляший ся на 2 в степени Эн

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

Пт апр 27, 2018 19:45:41

Если подать внешнее тактирование, то можно заставить МК работать и без кварца. А так да - ПИК 84й БЕЗ КВАРЦА НЕ РАБОАЕТ.
8)

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

Сб апр 28, 2018 07:19:20

...кстати на схеме нет ккварка...

Не забываем, что это протеус и у него всё в свойствах.

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

Сб апр 28, 2018 10:09:47

Нате, КУШАЙТЕ!
viewtopic.php?p=3153788#p3153788
:beer:

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

Пт май 25, 2018 15:33:27

пишите на С. в глазах зарябило.

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

Сб май 26, 2018 05:55:01

А чем это так ассемблер не понравился?
8)
На Си только библиотеки скрыты, а ежли читать с полным составом, включая те библиотеки... :facepalm: .
в моих прожках также сделано - вот ВЕСЬ основной файл (ежли нет желания лазить по "пристежным библиотекам" - не читайте их)

ежли удалить комментарии то останется всего-то:
Код:
;    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:

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

Сб май 26, 2018 06:23:04

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

Код:
    #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

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

Сб май 26, 2018 17:32:15

АГА! значится и всю начинку внутри закопал!
Я ж тоже могу все файлы в один запрятать.
:twisted:

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

Вс май 27, 2018 15:29:20

Зато читать левым читателям удобно. :)

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

Пн май 28, 2018 04:15:24

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

Код:
    #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


Нет много. Пусть так:
Код:
#include <myprog.txt> 
END

Я фигею дорогая редакция. Кто как хочет так и дрочит.(

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

Пн май 28, 2018 08:13:39

Главное, чтоб в результате получилось работоспособное устройство.
:hunger:
А касательно правил - оные определяются в описаниях компиляторов и практическим удобством готовки.
8)

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

Пн май 28, 2018 08:45:49

Си и хороший компилятор нереально облегчают адаптацию кода под другой камень.
да и вообще, давайте в машинных кодах писать...;)

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

Пн май 28, 2018 11:01:32

...под другой камень...

Часто было?

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

Пн май 28, 2018 11:14:19

"другой камень" имел ввиду PIC другой серии.
да часто использую части своих программ в проектах на разных PIC контроллерах.

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

Пн май 28, 2018 12:28:07

Часто было?

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

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

Вт май 29, 2018 11:10:00

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