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

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

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

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

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

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

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

 
Опции темы

Проблема с PIC16F73

Непрочитано 02.10.2009, 15:30  
tolyanv8
Прописка
 
Аватар для tolyanv8
 
Регистрация: 29.09.2007
Адрес: Донецк, ????
Сообщений: 199
Сказал спасибо: 21
Сказали Спасибо 19 раз(а) в 15 сообщении(ях)
tolyanv8 на пути к лучшему
По умолчанию Проблема с PIC16F73

subj, привожу пример кода:
Код:
i2c_send_byte
		bsf     STATUS,RP0 ;bank1
                          bcf     STATUS,RP1 ;bank1
		bcf     SDA_SET ; SDA - вывод 
		bcf     SCL_SET ;SCL - на вывод
		bcf     STATUS,RP0        ;bank 0
		bcf	SCL_PIN  ; SCL - 0
		call	i2c_wait
		movlw	0x08
---------------------//--------------------------------
                         return;
происходит подвисание PIC-а
после первой же команды вызванной функции(причем независимо, что это за команда, пытался подставлять разные
если попробовать заглушить функцию
Код:
i2c_send_byte
                   return;
то выполнение функции нормально завершается и программа
идет дальше :о
Мрак какой-то никто с похожим не сталкивался???
Я уже не знаю что и думать
Реклама:
tolyanv8 вне форума  
Непрочитано 02.10.2009, 18:46  
otest
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.01.2005
Адрес: Воронеж
Сообщений: 1,384
Сказал спасибо: 24
Сказали Спасибо 245 раз(а) в 183 сообщении(ях)
otest на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

С этим МК плотно не работал но что то с банками мудрено.
otest вне форума  
Непрочитано 02.10.2009, 19:25  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,578
Сказал спасибо: 175
Сказали Спасибо 1,567 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

Это чисто программная ошибка. Копайте свою прогу или приводите здесь весь текст.
realid вне форума  
Непрочитано 02.10.2009, 19:55  
tolyanv8
Прописка
 
Аватар для tolyanv8
 
Регистрация: 29.09.2007
Адрес: Донецк, ????
Сообщений: 199
Сказал спасибо: 21
Сказали Спасибо 19 раз(а) в 15 сообщении(ях)
tolyanv8 на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

Цитата:
Это чисто программная ошибка. Копайте свою прогу или приводите здесь весь текст.
Все бы было ничего, но виснет даже на совсем невинных
командах типа:
bsf STATUS,RP0 ;
причем сразу же после захода в функцию, т.е.
даже банк переключить не могу :о
Часть кода: (причем первые три функции работают нормально)
Код:
i2c_init
		bsf     STATUS,RP0 ;bank1
		bcf     STATUS,RP1
                bcf     SDA_SET ;SDA - сначала на вывод данных
		bcf     SCL_SET ;SCL - тоже
		bcf     STATUS,RP0        ; set file register bank to 0
                bcf	SCL_PIN ;SCL - низкий уровень
		bsf     SDA_PIN
		call	i2c_wait
		bsf	SCL_PIN ;SCL - высокий уровень
		call	i2c_wait
		bcf     SDA_PIN ;инициируем нисходящий фронт
		call	i2c_wait
		bcf	SCL_PIN ;SCL - низкий уровень
		return;

i2c_close
		bsf     STATUS,RP0 ;bank1
		bcf     STATUS,RP1
                bcf     SDA_SET ;SDA - сначала на вывод данных
		bcf     SCL_SET ;SCL - тоже
		bcf     STATUS,RP0        ;bank 0
		bcf     SDA_PIN
		bsf	SCL_PIN
		call	i2c_wait
		bsf     SDA_PIN ;инициируем восходящий фронт
		return;

i2c_wait
		nop
		return;
		movlw	0x02
;		movlw	0x32
		movwf	i2c_count
wait		nop
		decfsz	i2c_count,1
		goto	wait
		return;

i2c_send_byte
		bsf     STATUS,RP0 ;bank1
		bcf     STATUS,RP1
		btfsc	SDA_SET
		bcf     SDA_SET ; SDA - вывод 
		btfsc	SCL_SET
		bcf     SCL_SET ;SCL - на вывод
		bcf     STATUS,RP0        ;bank 0
		bcf	SCL_PIN  ; SCL - 0
		call	i2c_wait
		movlw	0x08
		movwf	i2c_tmp
send_bit
		bcf     STATUS,RP0        ;bank 0
		bcf     STATUS,RP1
		btfsc	i2c_byte,7	; бит данных - 0?
		bsf	SDA_PIN	; нет,выводим 1 на SDA

		bsf     STATUS,RP0 ;bank1
		bcf     STATUS,RP1
		bsf     SCL_SET ;SCL - на вход!!!

;;		bcf     STATUS,RP0 ;bank0
;;		bcf     STATUS,RP1
;;		bsf	SCL_PIN	; нет,выводим 1 на SCL
get_scl_write	btfss	SCL_PIN ; и ожидаем, пока ведомое устройство не попустит :)
		goto	get_scl_write
		; попустило :)))
		call	i2c_wait ; ждем-ссс

		rlf	i2c_byte,1	; сдвигаем влево байт данных
		bsf     STATUS,RP0 ;bank1
		bcf     STATUS,RP1
		bcf     SCL_SET ;SCL - на выход
		bcf     STATUS,RP0        ;bank 0
		bcf     STATUS,RP1
		bcf	SCL_PIN	; выводим 0 на SCL 
		bcf	SDA_PIN	; выводим 0 на SDA 

		call	i2c_wait

		decfsz	i2c_tmp,1	; конец цикла ?
		goto	send_bit	; нет - переход

		bsf     STATUS,RP0 ;bank1
		bcf     STATUS,RP1
		bsf     SDA_SET	; SDA - ввод
		bsf     SCL_SET ;SCL - на вход!!!
		bcf     STATUS,RP0        ;bank 0
get_scl_ack	btfss	SCL_PIN ;	ожидаем подтверждения SCL!!!
		goto	get_scl_ack

get_ack		btfsc	SDA_PIN	; читаем  АСК, и идем дальше 
		nop
  ;		goto	get_ack	; или что нить делаем... (т.е. ожидаем подтверждения ACK :)
		call	i2c_wait
		bsf     STATUS,RP0 ;bank1
		bcf     STATUS,RP1
		bcf     SCL_SET ;SCL - на выход
		bcf     STATUS,RP0        ;bank 0
		bcf	SCL_PIN	; выводим 0 на SCL 
		bcf	SDA_PIN	; выводим 0 на SDA 
		call	i2c_wait
		return;
tolyanv8 вне форума  
Непрочитано 03.10.2009, 01:33  
tsb
Прописка
 
Аватар для tsb
 
Регистрация: 25.11.2006
Адрес: Харьков
Сообщений: 295
Сказал спасибо: 25
Сказали Спасибо 71 раз(а) в 60 сообщении(ях)
tsb на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

А чем Вы видите, на каких командах "виснет"?
tsb вне форума  
Непрочитано 03.10.2009, 09:43  
tolyanv8
Прописка
 
Аватар для tolyanv8
 
Регистрация: 29.09.2007
Адрес: Донецк, ????
Сообщений: 199
Сказал спасибо: 21
Сказали Спасибо 19 раз(а) в 15 сообщении(ях)
tolyanv8 на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

Подставляю некое видимое действие, например вывод в
порт, сконфигурированный на вывод определенного
значения до вызова функции (нормально проходит)
и в самой функции (не работает даже если стоит в самом начале)
Если функцию заглушить, то после выхода из нее
вывод проходит тоже нормально :о
tolyanv8 вне форума  
Непрочитано 03.10.2009, 10:03  
otest
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.01.2005
Адрес: Воронеж
Сообщений: 1,384
Сказал спасибо: 24
Сказали Спасибо 245 раз(а) в 183 сообщении(ях)
otest на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

А почему вы Mplab не пользуете или симулятор для наглядности?
otest вне форума  
Непрочитано 03.10.2009, 12:11  
tolyanv8
Прописка
 
Аватар для tolyanv8
 
Регистрация: 29.09.2007
Адрес: Донецк, ????
Сообщений: 199
Сказал спасибо: 21
Сказали Спасибо 19 раз(а) в 15 сообщении(ях)
tolyanv8 на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

Mplab пользовал, но в нем-то как раз все проходит
без сучка и задоринки в отличие от реала
tolyanv8 вне форума  
Непрочитано 03.10.2009, 18:21  
Driver_gv
Временная регистрация
 
Регистрация: 09.06.2006
Сообщений: 75
Сказал спасибо: 0
Сказали Спасибо 26 раз(а) в 21 сообщении(ях)
Driver_gv на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

Ожидать внешнее событие без выхода по таймауту - плохой тон программирования,
если событие по какимто причинам не произошло то программа как-бы "зависнет"

Пример из Вашего кода
Код:
get_scl_write	btfss	SCL_PIN ; и ожидаем, пока ведомое устройство не попустит :)
		goto	get_scl_write
Если ведомое устройство не "попустило" то программа будет вечно ждать.
Правильно сделать ожидание в течении некоторого времени, и если устройство в этот период не ответило, выставлять флаг ошибки переферийного устройства и выходить из функции.
Driver_gv вне форума  
Непрочитано 03.10.2009, 19:54  
tolyanv8
Прописка
 
Аватар для tolyanv8
 
Регистрация: 29.09.2007
Адрес: Донецк, ????
Сообщений: 199
Сказал спасибо: 21
Сказали Спасибо 19 раз(а) в 15 сообщении(ях)
tolyanv8 на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

Цитата:
Ожидать внешнее событие без выхода по таймауту - плохой тон программирования,
если событие по какимто причинам не произошло то программа как-бы "зависнет"
Это понятно
В этом случае проц будет сброшен по WDT
Тем более, что зависание происходит не там (пробовал убирать
этот цикл а буквально в первой строчке функции.

P.S. На другом PIC-е этот же код отлично функционирует
tolyanv8 вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема при запуске Atmega16 zamsv Микроконтроллеры, АЦП, память и т.д 5 02.10.2009 12:52
[Решено] проблема при работе с Bluetooth модулем Gn0me Автоматика и аппаратура связи 1 02.10.2009 09:33
[Решено] Проблема с eeprom в Proteus Memfis666 Proteus, KiCAD и другие ECAD 1 01.10.2009 15:38
Проблема запитывания демо платы от PICKIT2 alexander70 Микроконтроллеры, АЦП, память и т.д 9 28.09.2009 22:17


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.