Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 21.12.2016, 07:43  
saymon
Прохожий
 
Регистрация: 21.12.2016
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
saymon на пути к лучшему
По умолчанию Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?

Код:
LIST p=PIC16F84A
	#include ‹p16f84a.inc›
	__CONFIG 0x3FF1

;============================

	TEMPSTATUS equ 0x4E
	TEMPW equ 0x4F

	cblock  0x20      ;присвоение имён: первая запись, далее +1
	TMR_COUNT         ;вторая запись
	IMP_COUNT_LO      ;третья запись
	IMP_COUNT_HI      ;4 запись
	RESULT_LO         ;5 запись
	RESULT_HI         ;6 запись
	endc              ;конец присовоения имён

;============================

	org 0x00          ;адрес начала программы
	goto PIC_Initial
	org 0x04          ;подпрограмма обработки прерываний
	goto Interrupt
	org 0x05

;============================

Interrupt:                   ;прерывание
	movwf TEMPW          ;поместить значение W в TEMPW
	swapf STATUS, W      ;поменять местами полубайты в STATUS, результат в W
	movwf TEMPSTATUS     ;поместить значение W в TEMPSTATUS

	btfsc INTCON, T0IF   ;если T0IF=0 (переполнения не было) в регистре INTCON, то пропустить след. каманду
	goto Intrpt_of_T0
	btfsc INTCON, INTF   ;если INTF=0 (прерывания не было) в регистре INTCON, то пропустить след. каманду
	goto Intrpt_of_INT

;============================

end_interrupt:
	swapf TEMPSTATUS, W  ;поменять местами полубайты в TEMPSTATUS, результат в W
	movwf STATUS         ;поместить значение W в статус
	swapf TEMPW, F       ;поменять местами полубайты в TEMPW, результат в TEMPW
	swapf TEMPW, W       ;поменять местами полубайты в TEMPW, результат в W
	retfie               ;возврат из подпрограммы обработки прерываний

;============================

PIC_Initial:	
	clrf PORTA
	clrf PORTB
	clrf TMR_COUNT
	clrf IMP_COUNT_HI
	clrf IMP_COUNT_LO	
	clrf RESULT_HI
	clrf RESULT_LO

	bsf STATUS, RP0         ;установить бит RP0 в регистре STATUS - выбираем 1 банк
	movlw b'11010111'       ;записать слово в W, инициализация TMR0
	movwf OPTION_REG        ;поместить значение W в OPTION_REG
	bcf INTCON, T0IF        ;очистить бит T0IF в регистре INTCON
	bcf STATUS, RP0         ;очистить бит RP0 в регистре STATUS
	clrf TMR0               ;очистить TMR0 (Configuration Interrupt)
	movlw 0xF0              ;записать слово в W
	movwf INTCON            ;поместить значение W в INTCON

;============================

start nop
      nop
      nop
      goto start

;============================

Intrpt_of_T0:
	bcf INTCON, T0IF          ;очистить бит T0IF в регистре INTCON
	incf TMR_COUNT            ;инкремент TMR_COUNT (увеличение)

	movf TMR_COUNT, W         ;перемещение содержимого TMR_COUNT в W
	xorlw .16                 ;исключающее ИЛИ над словом и W (десятичное число 16)
	btfsc STATUS, Z           ;если Z = 0 в регистре STATUS, то пропустить след. команду
	goto End_Sec

	movf TMR_COUNT, W         ;перемещение содержимого TMR_COUNT в W
	xorlw .15                 ;исключающее ИЛИ над словом и W
	btfss STATUS, Z           ;если Z = 1 в регистре STATUS, то пропустить след. команду
	goto end_interrupt

	movlw .190                ;записать слово в W
	movwf TMR0                ;поместить значени W в TMR0
	goto end_interrupt

;============================

End_Sec:
	clrf TMR_COUNT            ;очистить TMR_COUNT
	movf IMP_COUNT_HI, W      ;перемещение содержимого IMP_COUNT_HI в W
	movwf RESULT_HI           ;Поместить значение W в RESULT_HI
	movf IMP_COUNT_LO, W      ;перемещение содержимого IMP_COUNT_LO в W
	movwf RESULT_LO           ;Поместить значение W в RESULT_HI
	clrf IMP_COUNT_HI
	clrf IMP_COUNT_LO	
	goto end_interrupt

;============================

Intrpt_of_INT:
	bcf INTCON, INTF          ;очистить бит INTF в регистре INTCON
	incf IMP_COUNT_LO         ;инкремент IMP_COUNT_LO (увеличение)
	btfsc STATUS, Z           ;если Z = 0 в регистре STATUS, то пропустить след. команду
	incf IMP_COUNT_HI         ;инкремент incf IMP_COUNT_HI
	
	goto end_interrupt

;============================

	end
Реклама:

Последний раз редактировалось realid; 21.12.2016 в 11:04.
saymon вне форума  
Непрочитано 21.12.2016, 15:42  
RECTO
Супер-модератор
 
Регистрация: 09.06.2011
Сообщений: 2,633
Сказал спасибо: 73
Сказали Спасибо 1,793 раз(а) в 647 сообщении(ях)
RECTO на пути к лучшему
По умолчанию Re: Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?

Сообщение от saymon Посмотреть сообщение
Код:
	org 0x04          ;подпрограмма обработки прерываний
	goto Interrupt
	org 0x05

;============================

Interrupt:                   ;прерывание
Гениально!...
..
RECTO вне форума  
Эти 2 пользователя(ей) сказали Спасибо RECTO за это сообщение:
AR_Favorit (21.12.2016), mike-y-k (22.12.2016)
Непрочитано 22.12.2016, 00:31  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?

А прочитать DS и использовать его для анализа приведённого текста программы?
Описание языка ассемблера, описание работы используемого ассемблера и описание системы команд в качестве дополнительных материалов.
Сделав это Вы приобретёте огромное количество знаний о предмете, а там уже только в совсем тупиковых ситуациях вопросы можно задать.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 22.12.2016 в 00:34.
mike-y-k вне форума  
Сказали "Спасибо" mike-y-k
udav66 (22.04.2017)
Непрочитано 22.12.2016, 00:47  
jump
Почётный гражданин KAZUS.RU
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,981
Сказал спасибо: 0
Сказали Спасибо 4,939 раз(а) в 2,369 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?

Сообщение от mike-y-k Посмотреть сообщение
Вы приобретёте огромное количество знаний
а зачем - распи"дяйствовать проще
jump вне форума  
Непрочитано 22.12.2016, 01:22  
pasha_zv
Прописка
 
Аватар для pasha_zv
 
Регистрация: 14.12.2006
Адрес: Ставрополь - Донское
Сообщений: 252
Сказал спасибо: 111
Сказали Спасибо 186 раз(а) в 76 сообщении(ях)
pasha_zv на пути к лучшему
По умолчанию Re: Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?

какой ужаснах

это стиль программирования и комментирования "по Корабельниковски"

2ТС. пойдите на microchip.su и поройтесь там.
там сидят нормальные разработчики и студенты и исходников там до .опы
pasha_zv вне форума  
Непрочитано 22.04.2017, 01:57  
kiv69
Прописка
 
Регистрация: 26.02.2010
Адрес: Брест
Сообщений: 241
Сказал спасибо: 10
Сказали Спасибо 41 раз(а) в 31 сообщении(ях)
kiv69 на пути к лучшему
По умолчанию Re: Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?

Просто ржал.
Листинг - иллюстрация того, как не надо писать программы.
Скорее всего, специально так написали для ТС, чтобы препод увидел и оценил. Даже при условии работоспособности программы, к "автору" у препода вопросов будет масса.
__________________
Program Memory Words Used: 4048
Program Memory Words Free: 48
kiv69 вне форума  
Непрочитано 22.04.2017, 12:58  
udav66
Временная регистрация
 
Регистрация: 12.03.2007
Сообщений: 71
Сказал спасибо: 331
Сказали Спасибо 29 раз(а) в 12 сообщении(ях)
udav66 на пути к лучшему
По умолчанию Re: Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?

Этот листинг наверное такой-же старый как и проц, а
Коменты неизвестно ХтО писал.
Прогу в IDE и чуток напрячь моск
udav66 вне форума  
Непрочитано 22.04.2017, 15:57  
OakRidge
Почётный гражданин KAZUS.RU
 
Аватар для OakRidge
 
Регистрация: 16.05.2015
Адрес: Болгария
Сообщений: 1,460
Сказал спасибо: 286
Сказали Спасибо 1,125 раз(а) в 540 сообщении(ях)
OakRidge на пути к лучшему
По умолчанию Re: Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?

PIC16F84A 2001 Microchip Technology Inc.
Даже я, заядлый пиковод не буду этим заниматся. Хотя еще In Production. Много чего на нем сделано. Железнейший чип. Как тук-тук примерно
Смею предложить PIC16F1938 2$ за штуку. У производителя в наличии 200 тысяч чипов. Имеется ....
5 CCP модулей, T1GATE, разрешение захвата импульсов 31нС. Питание 2,5-5,5V если гнать на 32МГц
Разумеется Только если товаром Микрочипа приходится обходится. По аборигенским причинам.
Удачи !
OakRidge вне форума  
Непрочитано 22.04.2017, 17:24  
Bill
Гражданин KAZUS.RU
 
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
Bill на пути к лучшему
По умолчанию Re: Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?

Сообщение от kiv69 Посмотреть сообщение
Листинг - иллюстрация того, как не надо писать программы.
Скорее всего, специально так написали для ТС, чтобы препод увидел и оценил. Даже при условии работоспособности программы, к "автору" у препода вопросов будет масса.
Хм... Когда я работал со студентами, такие вопросы были всегда неизбежны. В комментариях нужно пояснять не что именно делается в той или иной инструкции, а для чего это делается.
PS: Есть книги на эту тему. Например,
http://padabum.com/d.php?id=174327

Последний раз редактировалось Bill; 22.04.2017 в 18:01.
Bill вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с кодом на СИ для ATmega8 Dimitrij Микроконтроллеры, АЦП, память и т.д 31 07.08.2012 14:08
Помогите разобраться с кодом _grey_ Микроконтроллеры, АЦП, память и т.д 1 23.07.2010 19:16
mega8 помогите разобраться с кодом AGAT0365 Микроконтроллеры, АЦП, память и т.д 10 27.05.2010 16:08
Блок питания 0....30В, помогите разобраться!! d.a.denisov Источники питания и свет 33 14.05.2010 09:23
Помогите разобраться с кодом Micro C for AVR deeman30rus Электроника - это просто 7 09.02.2010 11:46


Часовой пояс GMT +4, время: 05:42.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot