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

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

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

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

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

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

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Закрытая тема
Опции темы
Непрочитано 28.02.2010, 20:23   #1
sasha_popov
Прохожий
 
Регистрация: 07.09.2009
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sasha_popov на пути к лучшему
По умолчанию Косвенная адресация данных в PIC16F690

Ситуация такая , при косвенной записи в регистры банка 2 , pic16f690 работает неустойчиво, ( динамическая индикация на 4 индикатора ) высвечиваются лишние сегменты , могут три индикатора погаснуть. При записи в банки 0 и 1 работает отлично.
Реклама:
sasha_popov вне форума  
Непрочитано 28.02.2010, 20:35   #2
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,530
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: косвенная адресация данных в PIC16F690

Приведите код. Телепаты в отпуске.
realid вне форума  
Непрочитано 28.02.2010, 20:36   #3
Popeye
Почётный гражданин KAZUS.RU
 
Аватар для Popeye
 
Регистрация: 05.08.2007
Адрес: Болгария Перник
Сообщений: 1,771
Сказал спасибо: 74
Сказали Спасибо 357 раз(а) в 245 сообщении(ях)
Popeye на пути к лучшему
По умолчанию Re: косвенная адресация данных в PIC16F690

Давайте код. При так поставленом вопросе ответить затруднительно.
__________________
Мыслю, следовательно существую
Popeye вне форума  
Непрочитано 28.02.2010, 22:20   #4
sasha_popov
Прохожий
 
Регистрация: 07.09.2009
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sasha_popov на пути к лучшему
По умолчанию Re: Косвенная адресация данных в PIC16F690

Вот фрагмент кода записи 0x03FF в регистры 1 и 2 банка

;+++++++++++ ПРОВЕРКА РАБОТЫ ++++++
;++++++++++++++++++++++++++++++++++++++++++++++++
clrf temp_cp
movlw 0x20
movwf temp_cp
movlw 0xB0 ; начало блока банк 1
movwf FSR

bcf STATUS , IRP ; == 0,1 банки
_aa_

movlw 0x03 ; ADRESH
movwf INDF ; старший байт
incf FSR

BANK1
movlw 0xFF ; ADRESL
BANK0


movwf INDF ; младший байт
incf FSR

decfsz temp_cp
goto _aa_

movlw 0x32
movwf FSR
movlw 0x20
movwf temp_cp


_bb_
BANK0

movlw 0x03 ; ADRESH ;

bsf STATUS , IRP ; ==2,3 банки
movwf INDF
bcf STATUS , IRP
incf FSR

BANK1
movlw 0xFF ; ADRESL ;
BANK0

bsf STATUS , IRP ; ==2,3 банки
movwf INDF
bcf STATUS , IRP ; bank 0 , 1
incf FSR

decfsz temp_cp
goto _bb_

;+++ выводим на индикатор первые два регистра второго банка

bsf STATUS , RP1 ; bank 2
movfw 0x32
bcf STATUS , RP1 ;bank 0
movwf NumH

bsf STATUS , RP1 ; bank 2
movfw 0x33
bcf STATUS , RP1 ; bank 0
movwf NumL

далее переводим в десятичное число и в прерывании выводим на
индикатор 1023 , регистр temp_cp отображён во всех банках,
работает крайне нестабильно ( подсветка сегментов ) , если
убрать строки bsf STATUS , IRP ; ==2,3 банки и
bcf STATUS , IRP ; bank 0 , 1 и произвести запись в банк 0
то работает отлично . спасибо
sasha_popov вне форума  
Непрочитано 01.03.2010, 01:49   #5
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Косвенная адресация данных в PIC16F690

Сообщение от sasha_popov Посмотреть сообщение
Вот фрагмент кода записи 0x03FF в регистры 1 и 2 банка
далее переводим в десятичное число и в прерывании выводим на
индикатор 1023 , регистр temp_cp отображён во всех банках,
работает крайне нестабильно ( подсветка сегментов ) , если
убрать строки bsf STATUS , IRP ; ==2,3 банки и
bcf STATUS , IRP ; bank 0 , 1 и произвести запись в банк 0
то работает отлично . спасибо
Где то вы ошибаетесь с битами банков, не пользуйтесь таким методом, это приводит к частым ошибкам.
Пользуйтесь специальными командами выбора банков.
Код:
BANKSEL	0
BANKSEL	80
BANKSEL	100
BANKSEL	180
BANKISEL	00
BANKISEL	100
Компилятор сам подставит необходимые биты для данного МК. А вы можете где то пропустить.
моно сделать и так:
Код:
#define BANK0	BANKSEL	0
#define BANK1	BANKSEL	80
#define BANK2	BANKSEL	100
#define BANK3	BANKSEL	180
#define BANKI0	BANKISEL	00
#define BANKI1	BANKISEL	00
#define BANKI2	BANKISEL	100
#define BANKI3	BANKISEL	100
а в тексте программы писать:
BANK0
или
BANKI1
здесь у вас лишние переключения, не нужно переключать банки для записи в FSR и INDF.
посмотрите в даташите распределение памяти, эти регистпы доступны ИЗ ЛЮБОГО БАНКА.
Код:
	BANKSEL	0	;выбор 0 банка
	clrf temp_cp
	movlw 0x20
	movwf temp_cp 
	movlw 0xB0 ; начало блока банк 1
	movwf FSR
;	bcf STATUS , IRP ; bank 0 , 1	;переключение банков здесь ЛИШНЕЕ
_aa_
	movlw 0x03 ; ADRESH 
	movwf INDF ; старший байт
	incf FSR
;	BANK1	;переключение банков здесь ЛИШНЕЕ
	movlw 0xFF ; ADRESL
;	BANK0	;переключение банков здесь ЛИШНЕЕ 
	movwf INDF ; младший байт
	incf FSR
	decfsz temp_cp
	goto _aa_
здесь то же самое, для загрузки W не еужно переключать банки, он так же доступен из любого банка
Код:
	movlw 0x32
	movwf FSR
	movlw 0x20
	movwf temp_cp
_bb_
;	BANK0	;переключение банков здесь ЛИШНЕЕ 
	movlw 0x03 ; ADRESH ;
;	bsf STATUS , IRP ; ==2,3 банки	;переключение банков здесь ЛИШНЕЕ
	movwf INDF 
;	bcf STATUS , IRP ; bank 0 , 1	;переключение банков здесь ЛИШНЕЕ
	incf FSR
;	BANK1	;переключение банков здесь ЛИШНЕЕ
	movlw 0xFF ; ADRESL ; 
;	BANK0	;переключение банков здесь ЛИШНЕЕ 
;	bsf STATUS , IRP ; ==2,3 банки	;переключение банков здесь ЛИШНЕЕ
	movwf INDF 
;	bcf STATUS , IRP ; bank 0 , 1	;переключение банков здесь ЛИШНЕЕ
	incf FSR
	decfsz temp_cp
	goto _bb_
Код:
;+++ выводим на индикатор первые два регистра второго банка
;bsf STATUS , RP1 ; bank 2 ;бита два(RP0 и RP1) , а вы переключаете всего один
BANKSEL	100 или BANK2	
movfw 0x32
;bcf STATUS , RP1 ;bank 0 ;бита два(RP0 и RP1) , а вы переключаете всего один
BANKSEL	00 или BANK0	
movwf NumH

;bsf STATUS , RP1 ; bank 2 ;бита два(RP0 и RP1) , а вы переключаете всего один
BANKSEL	100 или BANK2	
movfw 0x33
;bcf STATUS , RP1 ; bank 0 ;бита два(RP0 и RP1) , а вы переключаете всего один
BANKSEL	00 или BANK0	
movwf NumL
picavr вне форума  
Непрочитано 01.03.2010, 14:40   #6
MisterDi
Почётный гражданин KAZUS.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: Косвенная адресация данных в PIC16F690

Вместо цифровых значений в BANKSEL можно указывать имя переменной, так может быть проще.
MisterDi вне форума  
Непрочитано 01.03.2010, 19:14   #7
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,530
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: Косвенная адресация данных в PIC16F690

Сообщение от MisterDi Посмотреть сообщение
Вместо цифровых значений в BANKSEL можно указывать имя переменной, так может быть проще.
Так оно будет правильней.
realid вне форума  
Непрочитано 01.03.2010, 22:05   #8
sasha_popov
Прохожий
 
Регистрация: 07.09.2009
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sasha_popov на пути к лучшему
По умолчанию Re: Косвенная адресация данных в PIC16F690

Директиву BANKSEL я не использовал , сейчас попробую , но мало верится так как косвенная запись даже одного регистра в банке номер-2 сбивает работу мк. Спасибо
sasha_popov вне форума  
Непрочитано 02.03.2010, 16:26   #9
Paveel
Временная регистрация
 
Регистрация: 10.10.2009
Сообщений: 54
Сказал спасибо: 10
Сказали Спасибо 26 раз(а) в 10 сообщении(ях)
Paveel на пути к лучшему
По умолчанию Re: Косвенная адресация данных в PIC16F690

Я в Пиках далеко не спец, ну так баловался когда-то, изучил по даташиту все эти "банки" и пр. …. Ой я намучился, с отладкой. Смотрю ну простые шаги, всё должно работать, а оно ….."такое сякое" то пишется но не читается, то читается но не пишется, то вроде как читается из ОЗУ но непонятно что там вычитывает. Эти косяки были с ячейками ОЗУ как бы доступными из любого банка. ( 16f628 ) Психанул, переписал прожку. Стало сложнее но работало зачем они вообще зашифровали ОЗУ с этими банками я так и не понял, что нельзя было сделать одним массивом? Кто бы объяснил.

Вопрос к picavr :
А где можно почитать, так чтоб для чайника было понятно про это чудо: BANKSEL
Paveel вне форума  
Непрочитано 02.03.2010, 17:53   #10
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Косвенная адресация данных в PIC16F690

Сообщение от realid Посмотреть сообщение
Так оно будет правильней.
Сообщение от MisterDi Посмотреть сообщение
Вместо цифровых значений в BANKSEL можно указывать имя переменной, так может быть проще.
Если честно не совсем понял о переменных, это ведь директивы препроцессора.
объёвляем
Код:
#define BANK0	BANKSEL	0
#define BANK1	BANKSEL	80
#define BANK2	BANKSEL	100
#define BANK3	BANKSEL	180
#define BANKI0	BANKISEL	00
#define BANKI1	BANKISEL	00
#define BANKI2	BANKISEL	100
#define BANKI3	BANKISEL	100
и пользуем имена банков
Код:
BANK0
BANK1
BANK2
BANK3
Сообщение от Paveel Посмотреть сообщение
А где можно почитать, так чтоб для чайника было понятно про это чудо: BANKSEL
В документе Mpasm, есть у меня на русском.

Применение директив позволяет не думать о том в каких банках располагается переменная.

Код:
BANKSEL	EEDATA
MOVWF 	EEDATA
для PIC12F629 компилируется:
Код:
BSF STATUS,RP0
MOVWF 	EEDATA
а для PIC16F877 компилируется:
Код:
BSF STATUS,RP0
BСF STATUS,RP1
таким образом при смене процессора асмемблер сам меняет команды выбора банков и программа работает в обоих процесорах без изменения кода. Так же можно использовать и для своих переменных:

Код:
#define TEMP 0x30;0 банк
#define TEMP_CUNTER 0xA7;1 банк
#define SAVE_CUNTER 0xA7;2 банк


BANK0
MOVLW 10
MOVWF TEMP

BANKSEL TEMP_CUNTER
DECFSZ  TEMP_CUNTER
GOTO    LABEL1
GOTO    LABEL2

LABEL1
MOVF 	TEMP_CUNTER,W
BANKSEL SAVE_CUNTER
MOVWF   SAVE_CUNTER

LABEL2
BANK0
;код далее
Таким образом не задумываемся о битах переключения банков и сколько их в нужном нам процессоре....

в 1,2,3 банках обычно располгагаются переменные к которы обращаемся очень редко, всякие счётчики секунд минут итд, или буферы, например буфер УСАРТ буфер АЦП к которым обращаемся через INDF не требующие переключения банков.

Страницы програмной памяти я переключаю макросами:
Код:
PAGESEL000	MACRO
	CLRF	PCLATH
	ENDM
PAGESEL400	MACRO
	CLRF	PCLATH
	BSF	PCLATH,2
	ENDM
PAGESEL800	MACRO
	CLRF	PCLATH
	BSF	PCLATH,3
	ENDM
PAGESEL1400	MACRO
	PAGESEL400
	BSF	PCLATH,4
	ENDM

;вызов в 1 страницу
	PAGESEL800
	CALL	CUNTER_TIME
RETURN_ADRES_PAGE0

;переход на 1 страницу 
	PAGESEL800
	GOTO	CUNTER_TIME

;задание адреса страницы
RUTIN_PAGE_800  CODE  0x800
CUNTER_TIME

;исполняемый код

;возврат в 0 страницу
RETURN_FROM_PAGE1_TO_PAGE0
	PAGESEL000
	RETURN

;переход  в 0 страницу
	PAGESEL000
	GOTO	RETURN_ADRES_PAGE0
Вложения:
Тип файла: pdf MpasmRus.pdf (920.6 Кб, 88 просмотров)
picavr вне форума  
Закрытая тема

Закладки


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

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

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


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


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