Например TDA7294

Форум РадиоКот • Просмотр темы - Программа для PIC16F837A
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Сб апр 27, 2024 15:45:24

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Программа для PIC16F837A
СообщениеДобавлено: Пн апр 17, 2023 20:04:12 
Родился

Зарегистрирован: Пн апр 17, 2023 19:59:16
Сообщений: 6
Рейтинг сообщения: 0
Всем привет. Задали заполнить РОН банка номер 1 кадрами двоично-десятичных числе от 15 до 0. У меня получилось заполнить только первую строку. Подскажите, как заполнить остальные 5.
Код:
#include p16f873a.inc
   __CONFIG _HS_OSC
SIZE_MAS equ h'B0'
_DATA equ h'B1'
START_ADR equ h'A6'
SIZE_MAS2 equ h'B2'
_DATA2 equ h'B3'
START_ADR2 equ h'A0'
   ORG 8
   bsf STATUS, RP0
   bcf STATUS, RP1
   movlw d'6'
   movwf SIZE_MAS2
   movlw d'21'
   movwf _DATA2
   movlw START_ADR2
   movwf FSR
loop:
   movf _DATA2,W
   movwf INDF
   decf _DATA2, F
   incf FSR, F
   decf SIZE_MAS2, F
   movf SIZE_MAS2, W
   btfss STATUS, Z
   goto loop
   bsf STATUS, RP0
   bcf STATUS, RP1
   movlw d'10'
   movwf SIZE_MAS
   movlw d'9'
   movwf _DATA
   movlw START_ADR
   movwf FSR
loop2:
   movf _DATA,W
   movwf INDF
   decf _DATA, F
   incf FSR, F
   decf SIZE_MAS, F
   movf SIZE_MAS, W
   btfss STATUS, Z
   goto loop2


Последний раз редактировалось nikita_kepp Вт апр 18, 2023 12:42:30, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа для PIC16F837A
СообщениеДобавлено: Пн апр 17, 2023 22:54:50 
Родился

Зарегистрирован: Пн апр 17, 2023 22:47:38
Сообщений: 4
Рейтинг сообщения: 0
Т.е. у вас с А0 по АF hex числа с 15 по 0, исключая А, B, C, D, E, F?
И надо такими же числами заполнить еще 5 "строк" B0-BF, C0-CF, D0-DF, E0-EF и F0-FF?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа для PIC16F837A
СообщениеДобавлено: Вт апр 18, 2023 11:22:58 
Родился

Зарегистрирован: Пн апр 17, 2023 19:59:16
Сообщений: 6
Рейтинг сообщения: 0
Т.е. у вас с А0 по АF hex числа с 15 по 0, исключая А, B, C, D, E, F?
И надо такими же числами заполнить еще 5 "строк" B0-BF, C0-CF, D0-DF, E0-EF и F0-FF?
Да всё верно, потом нужно переписать в EEPROM (по порядку следования адресов) числа кратные 5-ти.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Программа для PIC16F837A
СообщениеДобавлено: Вт апр 18, 2023 12:39:42 
Держит паяльник хвостом

Карма: 10
Рейтинг сообщений: 99
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 968
Рейтинг сообщения: 0
Никита, ты бы код научился правильно вставлять. Сначала.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Программа для PIC16F837A
СообщениеДобавлено: Вт апр 18, 2023 12:43:08 
Родился

Зарегистрирован: Пн апр 17, 2023 19:59:16
Сообщений: 6
Рейтинг сообщения: 0
Никита, ты бы код научился правильно вставлять. Сначала.
Исправил


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Программа для PIC16F837A
СообщениеДобавлено: Вт апр 18, 2023 12:59:08 
Друг Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 1329
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 10548
Рейтинг сообщения: 0
А что, преподаватель запрещает обращаться за помощью? Или лекции тихо читал?

Судя по тому, что данный вопрос всплывает эпизодически, это - задание студента. Пущай сам выполняет.

_________________
добавь radiokot.ru##.tablebg > tbody > tr:has(td>a[href*="?f=17"]) в адблок, сделай форум чище!
"Э-э-э-хей... растёт правосознание!"


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа для PIC16F837A
СообщениеДобавлено: Вт апр 18, 2023 16:39:33 
Опытный кот

Карма: -2
Рейтинг сообщений: 35
Зарегистрирован: Пн сен 10, 2018 19:16:28
Сообщений: 818
Рейтинг сообщения: 0
Помощь студентам отлажена по тарифной сетке.:) Никита смекнул, что мир не без добрых людей.:)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа для PIC16F837A
СообщениеДобавлено: Вт апр 18, 2023 20:21:54 
Родился

Зарегистрирован: Пн апр 17, 2023 22:47:38
Сообщений: 4
Рейтинг сообщения: 0
Так как у вас один и тот же код скорей всего будет использоваться 6 раз (если продолжать заполнение массива данных в вашем стиле) то логично использовать отдельную подпрограмму для
шести строк - fill_nums и "скармливать" ей адреса всех шести строк по очереди в главном цикле программы. Конец программы надо завершать директивой END. Если мы часть действий выполняем подпрограммой, то главный год надо зациклить пусть и пустым циклом MAIN_LOOP: NOP - Goto MAIN_LOOP.
Если избавиться от дублирующих переменных, константы вынести в заголовок и предположить что вся работа будет происходить в Банке данных 0, дополнить слово конфигурирования (не только выбор тактового генератора) то программа может выглядеть как-так:
Спойлер
Код:
#include p16f873a.inc
   __CONFIG _HS_OSC & _WDTE_OFF & _PWRTE_ON & _BOREN_ON & _LVP_OFF & _CPD_OFF & _CP_OFF & _WRT_OFF  & _DEBUG_OFF
; выбраны:
; высокоскоростной генератор
; сторожевой таймер выключен
; задержка при включении питания активирована
; выключение при снижении питания включено
; низковольтное программирование не задействовано
; защита данных программ, ПЗУ, записи отключено
; отладка отключена

; Стартовые адреса шести строк в памяти данных
START_ADR1_6 equ h'A0'
START_ADR2_6 equ h'B0'
START_ADR3_6 equ h'C0'
START_ADR4_6 equ h'D0'
START_ADR5_6 equ h'E0'
START_ADR6_6 equ h'F0'

; massive pointer
;- Вместо переменных SIZE_MAS2 и SIZE_MAS одна переменная
;- mas_p, т.к. они использовались по очереди. Переменная в Банке 0,
; потому что Банк 1 будет полностью использован
mas_p      equ    h'20'   
; Константы для вычисления длины массива
SIZE_MAS2   equ      d'6'
SIZE_MAS1   equ      d'10'
; - Вместо _DATA и _DATA2 - _data в Банке 0
_data   equ         h'21'   ;
; Константы для вычисления hex числа
_DATA2   equ      d'21'
_DATA1   equ      d'9'

   ORG 0
Goto   START
   ORG 8
START
   Movlw   START_ADR1_6      ; 1-ый из 6
   Call   fill_nums
   Movlw   START_ADR2_6      ; 2-ой из 6
   Call   fill_nums
   Movlw   START_ADR3_6      ; 3-ий из 6
   Call   fill_nums
   Movlw   START_ADR4_6      ; 4-ый из 5
   Call   fill_nums
   Movlw   START_ADR5_6      ; 5-ый из 6
   Call   fill_nums
   Movlw   START_ADR6_6      ; 6-й из 6
   Call   fill_nums
MAIN_LOOP
   NOP               ; Главный цикл ничегонеделанья
   Goto   MAIN_LOOP   
;********************************************************
;          ***       fill_nums       ***            *
; Заполняем 16 ячеек начиная со стартового адреса в    *
;  аккумуляторе в обратном порядки числами:            *
;  15,14,13,12,11,10,9 ... 4,3,2,1,0 в hex виде         *   
;********************************************************
fill_nums
;- Работа с регистрами FSR и INDF возможна из любого банка      
   movwf   FSR
   movlw    SIZE_MAS2
   movwf    mas_p
   movlw    _DATA2
   movwf    _data
loop:
   movf    _data,W
   movwf    INDF
   decf    _data, F
   incf    FSR, F
   decf    mas_p, F   
;- Дополнительно запихивать переменную в раб. аккумулятор
;-  не надо, т.к. результат команды влияет на Z      
   btfss    STATUS, Z
   goto loop
         
   movlw SIZE_MAS1
   movwf mas_p
   movlw _DATA1
   movwf _data
      
loop2:
   movf _data,W
   movwf INDF
   decf _data, F
   incf FSR, F
   decf mas_p, F
   btfss STATUS, Z
   goto loop2

   Return

END

Вот окно памяти данных после выполнения основной программы:
Изображение
PS
Насчет записи в ПЗУ чисел кратных 5 попробуйте сами, по идее можно загнать в FSR начальный адресс - A0 и двигаясь до конца - А0+(6*16) проверять на кратность пяти и при успешной проверке запихивать в ПЗУ (хотя какой смысл проверять все строки если данные отличаются только в пределах "строки" а между строками - нет).
Все числовые константы советую выносить в шапку и давать им отличающиеся имена (например в верхнем регистре через нижнее подчеркивание) это облегчает восприятие вашей команды проверяющем


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа для PIC16F837A
СообщениеДобавлено: Вт апр 18, 2023 20:29:43 
Родился

Зарегистрирован: Пн апр 17, 2023 19:59:16
Сообщений: 6
Рейтинг сообщения: 0
Цитата:
Так как у вас один и тот же код скорей всего будет использоваться 6 раз (если продолжать заполнение массива данных в вашем стиле) то логично использовать отдельную подпрограмму для шести строк - fill_nums и "скармливать" ей адреса всех шести строк по очереди в главном цикле программы. Конец программы надо завершать директивой END. Если мы часть действий выполняем подпрограммой, то главный год надо зациклить пусть и пустым циклом MAIN_LOOP: NOP - Goto MAIN_LOOP.

Спасибо, за помощь, но я целый день изучал флаги STATUS и вышла такая штука:
Код:
#include p16f873a.inc
   __CONFIG _HS_OSC
   ORG 3
   bcf STATUS, RP0
   bcf STATUS, RP1
      MOVLW   h'A0'
      movwf   FSR
LOOP1:      
      MOVLW   h'15'
LOOP2:   
      MOVWF   INDF
      INCF   FSR,F
      BTFSC   STATUS,Z
      GOTO   LOOP3   ; If FSR=0
      ADDLW   h'FF'      ; X->X-1
      BTFSS   STATUS,C
      GOTO   LOOP1      ; If 0->0FFh
      BTFSS   STATUS,DC ; Проверяем десятичный перенос
      ADDLW   -6      ; If 10h->0Fh
      GOTO   LOOP2
LOOP3:END

С EEPROMом пока как то очень туго :cry: :cry:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа для PIC16F837A
СообщениеДобавлено: Вт апр 18, 2023 20:44:46 
Родился

Зарегистрирован: Пн апр 17, 2023 22:47:38
Сообщений: 4
Рейтинг сообщения: 0
Оригинально :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа для PIC16F837A
СообщениеДобавлено: Ср апр 19, 2023 00:53:22 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 17
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Сообщений: 124
Откуда: не с Уфы
Рейтинг сообщения: 0
Код:
B0   
   MOVLW   0x0A0
   MOVWF   FSR
   ;
B0.IT1   
   MOVLW   0Fh
   XORWF   FSR,W
   ANDLW   0Fh
   MOVWF   INDF
   INCFSZ   FSR,F
   GOTO   B0.IT1
   ;
   ;

8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа для PIC16F837A
СообщениеДобавлено: Ср апр 19, 2023 11:17:06 
Родился

Зарегистрирован: Пн апр 17, 2023 19:59:16
Сообщений: 6
Рейтинг сообщения: 0
8)
Было бы неплохо, если бы не нужно было пропускать A, B, C, D, E, F :)). Может подскажешь как переписать в EEPROM числа кратные 5 в таком же порядке с сохранением адресов?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа для PIC16F837A
СообщениеДобавлено: Ср апр 19, 2023 14:09:32 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 17
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Сообщений: 124
Откуда: не с Уфы
Рейтинг сообщения: 0
Всего лишь увидел картинку выше и представил свой вариант. По крайней мере по ней видно какую именно задачу решал человек. А что касается твоих заданий, то я тупо не понимаю такие неоднозначные формулировки. Взять к примеру вот это "пропустить A, B......". В смысле, вообще их не писать? ........ но тогда зачем вообще упоминать про них (15.....0), если можно просто написать: мол, надо циклично заполнить числами [10......0] пространство [0x0A0..........0x0FF]. Но в этом случае тогда также нет смысла упоминать про строки, но про них речь все же идёт........ получается abcdef не пропускать хотят, а тогда что? Может заменить чем-то, но чем.........? То же самое с этим ипромом. Я, например, понимаю слово "кратно", но совершенно не въезжаю, что и как тебе надо заполнить. "числа кратные 5" - из какого диапазона? "в том же порядке" - это как? Есть какой-то "порядок"/формат, где он описан? "с сохранением адресов" - в смысле сохранять адреса как данные? по какому принципу?...
Ну и во-вторых, - ты создаёшь тему, представляешь какой-то код (особо не вникал) и типа ты сделал для одной строки, а для остальных сделать тоже самое уже почему то не в силах. Что довольно странно....... Чуть позже ("изучив флаги") ты публикуешь решение, тоже сильно не вникал в саму математику, но в котором явно ощущается подход ....... И если этот код реализует описанное в задании и ты самостоятельно и осмысленно его написал, то тогда какие у тебя могут быть проблемы с ипром.......?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа для PIC16F837A
СообщениеДобавлено: Ср апр 19, 2023 16:59:28 
Родился

Зарегистрирован: Пн апр 17, 2023 22:47:38
Сообщений: 4
Рейтинг сообщения: 0
8)
Может подскажешь как переписать в EEPROM числа кратные 5 в таком же порядке с сохранением адресов?

А что значит с сохранением адресов? Вот допустим ячейка А0 содержит 15h, которое не кратно 5, значит в ЕЕПРОМ записываем 0 в нулевую ячейку? А затем 14h делится на 5, значит надо записать в ЕЕПРОМ 14h в первую ячейку?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа для PIC16F837A
СообщениеДобавлено: Пт апр 21, 2023 11:30:53 
Родился

Зарегистрирован: Пн апр 17, 2023 19:59:16
Сообщений: 6
Рейтинг сообщения: 0
8)
Может подскажешь как переписать в EEPROM числа кратные 5 в таком же порядке с сохранением адресов?

А что значит с сохранением адресов? Вот допустим ячейка А0 содержит 15h, которое не кратно 5, значит в ЕЕПРОМ записываем 0 в нулевую ячейку? А затем 14h делится на 5, значит надо записать в ЕЕПРОМ 14h в первую ячейку?
Как то вот так должно получиться


Вложения:
Скриншот 21-04-2023 132846.jpg [144.36 KiB]
Скачиваний: 42
Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y