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

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

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

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

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

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

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

 
Опции темы
Непрочитано 20.09.2010, 18:37  
BorisVV
Прохожий
 
Регистрация: 29.07.2010
Сообщений: 6
Сказал спасибо: 2
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
BorisVV на пути к лучшему
Вопрос Помогите с PIC 16F873 и прерыванием по RB0

Доброго вам времени суток, товарищи форумчане. Столкнулся вот с чем:
Никак не реагирует PIC на прерывания в протеусе..И вообще как в протеусе несколько странно работает I2C странно работает, но об этом ниже..
Суть такая в двух словах. ЕСТЬ PIC 16f873 и 24С64а. Есть кнопка, присоединенная к RB0 и переключатель, присоединенный к RB1. При нажатии на кнопку(RB0) программа переходит в подпрограмму прерываний и оценивает положение переключателя, в зависимости от этого записывает во внешнюю EEPROM (24c64A) или 1, или 2. И собственно последовательно записывает это в ячейки памяти 24C64A. Но пик никак не реагирует на кнопку(прерывание не происходит)
Прилагаю схему, начерченную в протеусе( уж за кривизну линий простите -первый раз черчу)Вместо 24С64a использую 24lc64(так то вроде как в работе разницы быть не должно) и переключатели( вместо кнопки) одинаковые( так что тоже разницы вроде как нет). http://www.fayloobmennik.net/130065 - схема протеуса
И собственно исходник прошивки.
http://www.fayloobmennik.net/130058
Но дело не только в этом. Выше я писал что протеус как-то странно отображает работу. Вот пример:
Беру заведомо исправную программу из самоучителя Корабельникова Е.А. по пикам. Суть ее в том, что бы при включении питания пик последовательно записал цифры в адреса ЕЕПРОМ. Прошиваю этот виртуальный пик..И при моделировании выходит ошибка DATA written SSPBUF whilst MSSP (in I2C master mode) is active – data has been ignored. Соответсвенно в ЕЕПРОМ ничего не пишется((.
Исходник этой программки тоже прилагаю http://www.fayloobmennik.net/130064
За корявость написания прошу сильно не пинать- студент я, пока учусь только))
Реклама:
BorisVV вне форума  
Сказали "Спасибо" BorisVV
warel (27.06.2019)
Непрочитано 20.09.2010, 19:14  
BorisVV
Прохожий
 
Регистрация: 29.07.2010
Сообщений: 6
Сказал спасибо: 2
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
BorisVV на пути к лучшему
По умолчанию Re: Помогите с PIC 16F873 и прерыванием по RB0

;************************************************* **********************************************
; scan.asm
; PIC16F873 Кварц 4 мГц.
;================================================= ==============================================
LIST p=16F873 ; Установка типа микроконтроллера.
__CONFIG 3F71h ; Включено XT генератор ,PWRT, сброс BOR. Выключена защита ,WDT,LVP, Debug
;================================================= ==============================================
; Определение положения регистров специального назначения.
;================================================= ==============================================
Status equ 03h ; Регистр выбора банка.
TrisB equ 06h ; Регистр выбора направления работы В
TrisC equ 07h ; Регистр выбора направления работы выводов порта С.
PortB equ 06h ; Регистр управления защелками порта В.
OptionR equ 01h ; Регистр выбора работы прерываний по фронту, подключения подтягивающих резисторов
Intcon equ 0Bh ; Регистр разрешения прерываний
SSPStat equ 14h ; Регистр статуса модуля MSSP
SSPCon equ 14h ; Регистр управления модуля MSSP
SSPCon2 equ 11h ; Регистр управления модуля MSSP (б1)
SSPAdd equ 13h ; Регистр управления скоростью обмена (б1)
SSPBuf equ 13h ; Регистр передающего буфера
PIR1 equ 0Ch ; Регистр флагов прерываний от переферийных модулей

;================================================= ==============================================
; Определение названия и положения регистров общего назначения.
;================================================= ==============================================
Registr equ 21h ; Регистр сохранения данных перед записью в EEprom
W_Temp equ 22h ; Регистр сохранения W перед записью
Stat_Temp equ 23h ; Регистр сохранения данных Status перед записью
SecH equ 24h ; Старшый байт счетчика сканирования изменения уровня на R0
SecL equ 25h ; Младшый байт счетчика сканирования R0
Adr_L equ 26h ; Младший Регистр используемый для временной записи адреса записи
Adr_H equ 27h ; Старшый регистр записи адреса
CountPagL equ 28h ; Количестов байтов в одном блоке(256)
CountPagH equ 29h ; Количество блоков (32)
;================================================= ==============================================
; Определение места размещения результатов операций и бита выбора банка
;================================================= ==============================================
F equ 1 ; Результат направить в регистр
SSPIF equ 3 ; Флаг прерываний от модуля MSSP
SEN equ 0 ; Бит включения "старта"
PEN equ 2 ; Бит включения "стопа"
ACKSTAT equ 6 ; Бит подтверждения от ведомого
SMP equ 7 ; Бит управления длительностью фронта
W equ 0 ; Результат направить в W
RP0 equ 5 ; Поставить 5 биту регистра status название RP0(регстр смены банков)
;================================================= ==============================================
org 0 ; Начать выполнение программы с адреса 0 PC.
goto START ; Переход в ПП Start.

;================================================= ==============================================
org 4 ; Назначение вектора прерываний

;************************************************* **********************************************
; Текст рабочей части программы.
;************************************************* **********************************************
INT movwf W_Temp ; стандартные процедуры сохранения регистров W и Status
movf Status,W
movwf Stat_Temp

Proverk btfss PortB,1 ; Если на 2 ноге 0, то в регистр Reristr записывается число 1
goto ONE
movlw .2 ; Если нет ,то в Registr Записывается число 2
movwf Registr
goto WRITE ; Собственно переходим к записи во внешний еепром
ONE movlw .1
movwf Registr
goto WRITE
WRITE bcf PIR1,SSPIF ; Сброс флага прерываний от модуля MSSP
bsf Status,RP0 ; Переход в первый банк
bsf SSPCon2,SEN ; Начало формирования условия "Старт"
bcf Status,RP0 ; Переход в нулевой банк
btfss PIR1,SSPIF ; Формирование условия старт завершено или нет?
goto $-1 ; Если нет-то ожидание, если да-то далее
;*************************Режимный байт**********************************
movlw b'10100000' ; Режимный байт 1010 код функциональности 000 адрес микрухи,0 режим записи
call WR_I2C
;*****************************Старшый байт адреса**************************
movf Adr_H,W ; Записываем в W первый(старшый байт адреса)
call WR_I2C
;***********************Младшый байт адреса********************************
movf Adr_L,W ; Записываем в W младший байт адреса
call WR_I2C
;*************************Байт данных**************************************
movf Registr,W ; Записываем в W содержание Registr
call WR_I2C
;*********************Стоп условие****************************
bcf PIR1,SSPIF ; Сброс флага прерываний от модуля MSSP
bsf Status,RP0 ; Переход в 1 банк
bsf SSPCon2,PEN ; начало формирования условия стоп
bcf Status,RP0 ; переход в 0 банк
btfss PIR1,SSPIF ; Формирование условия завершено??
goto $-1 ; Нет-снова проверяем флаг, да- далее
;******************Изменнеие битов адреса************************
incf Adr_L,F ; Увеличиваем младший бит адреса на 1
decfsz CountPagL ; Уменьшаем кол-во байтов в блоке на 1 , если результат не 0, то на завершение пррывания (EndInt)
goto EndInt
clrf Adr_L ; Если 0 (блок записан), то обнуляем младший счетчик адресов.
movlw .255 ; Записываем 255 в счетчик кол-ва байт в блоке
movwf CountPagL
incf Adr_H,F ; Увеличиваем старшый адресс на 1
decfsz CountPagH,F ; Уменьшаем на 1 кол-во блоков
goto EndInt ; Если не 0, то на завершение ПП Прерывания
goto $ ; Если 0-вечное кольцо
;*******************Выход из ПП прерываний*****************************
EndInt bcf Intcon,1 ; Сброс флага прерываний
movf Stat_Temp,W ; Стандартная процедура возврата содержимого
movwf Status
swapf W_Temp,F
swapf W_Temp,W
retfie
POVTOR bcf Status,RP0
WR_I2C movwf SSPBuf ; Закрузка в буфер байта для записи
bcf PIR1,SSPIF ; Сброс флага прерываний
btfss PIR1,SSPIF ; Флаг поднялся(запись окончена)?
goto $-1 ;Нет-ожидание, да- дальше
;*************************анализ АСК*************************
bsf Status,RP0 ; Первый банк
btfsc SSPCon2,ACKSTAT ; Подтверждение от ведомого принято?
goto POVTOR ; Нет- повтор, да -далее
bcf Status,RP0 ; Переход в 0 банк
return ; возврат по стеку

START clrf Intcon ; Запрещаем все прерывания
bsf Status,RP0 ; Первый банк
movlw .7 ; записываем в W число 0000 0111
movwf TrisB ; Соответсвенно RB0, RB1, RB2 работают на вход.
movlw .255 ; Записываем в W число 1111 1111
movwf TrisC ; Все порты С на вход (можно не писать по умолчанию все стоят на вход)
movlw .128 ; Записываем в W 0100 0000
movwf OptionR ; !!Преывания по переднему фронту 0/1 включены!!
movlw .9 ; Установка стандартной скорости обмена
movwf SSPAdd ; Скрость равна 100 Кгц
bsf SSPStat,SMP ; управление длительностью фронта выключено
bcf Status,RP0 ; переход в нулевой банк
movlw b'00101000' ; Включение модуля MSSP
movwf SSPCon ; ---!!---
movlw .255 ; Задание колличества битов в блоке
movwf CountPagL
movlw .32 ; Задание кол-ва блоков
movwf CountPagH
clrf Adr_L ; Очистить младший байт адреса ( с нулевого начнется запись)
clrf Adr_H ; Очистить старшый байт адреса ( с нулевого начнется запись)
Pause movlw .1 ; закладываю паузы для ожидания прерываний. Все взял из программы Евгения Александровича
movwf SecH
movlw .255
movwf SecL
;************************************************* ***********************************************
movlw .144
movwf Intcon ; Записываю число 1001 0000( разрешаю глобальные и прерывания по RB0)
Pause1 decfsz SecL,F ; Собственно ожидаю этого прерывания
goto Pause1
Pause2 incfsz SecH,F
goto Pause2
goto Pause ; Если прерывания не произошло то снова закладываем паузы и ждем
end
BorisVV вне форума  
Сказали "Спасибо" BorisVV
warel (27.06.2019)
Непрочитано 20.09.2010, 19:49  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Помогите с PIC 16F873 и прерыванием по RB0

Сообщение от BorisVV Посмотреть сообщение
Никак не реагирует PIC на прерывания в протеусе.
Отлаживайте в железе и не будете вылавливать глюки Протеуса.
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
picavr вне форума  
Эти 2 пользователя(ей) сказали Спасибо picavr за это сообщение:
BorisVV (02.10.2010), warel (27.06.2019)
Непрочитано 20.09.2010, 19:52  
BorisVV
Прохожий
 
Регистрация: 29.07.2010
Сообщений: 6
Сказал спасибо: 2
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
BorisVV на пути к лучшему
По умолчанию Re: Помогите с PIC 16F873 и прерыванием по RB0

Все с прерыванием разобрался.(Надо было на кнопку и на переключатель по резистору 1К и на питание) Теперь все нормально и в ЕЕпРОМ пишется. А вот со второй проблемой ( Протеус выдает ошибку на программе корабельникова Е.А. я так и не разобрался((
BorisVV вне форума  
Сказали "Спасибо" BorisVV
warel (27.06.2019)
Непрочитано 20.09.2010, 20:38  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Помогите с PIC 16F873 и прерыванием по RB0

Сообщение от BorisVV Посмотреть сообщение
А вот со второй проблемой ( Протеус выдает ошибку на программе корабельникова Е.А. я так и не разобрался((
Да нет это не Proteus виноват .
У него крышу сносит от писанины пастера .
Перепиши код без беллетристических говновставок (коментов) и все заработает.

И вот эти х..и зачем?
Код:
goto $(хрен знает куда)
Если есть метки ...
__________________
Осторожно , злой кот

Последний раз редактировалось dosikus; 20.09.2010 в 20:41.
dosikus вне форума  
Эти 2 пользователя(ей) сказали Спасибо dosikus за это сообщение:
BorisVV (02.10.2010), warel (27.06.2019)
Непрочитано 02.10.2010, 19:14  
BorisVV
Прохожий
 
Регистрация: 29.07.2010
Сообщений: 6
Сказал спасибо: 2
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
BorisVV на пути к лучшему
По умолчанию Re: Помогите с PIC 16F873 и прерыванием по RB0

Все ..С протеусом понятно. Все сделал как написали- заработало..А вот в реальном железе пока никак((.Спасибо за помощь
BorisVV вне форума  
Сказали "Спасибо" BorisVV
warel (27.06.2019)
Непрочитано 02.10.2010, 19:42  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Помогите с PIC 16F873 и прерыванием по RB0

BorisVV, В реальности может быть что угодно.
Сопли пайки , не подключенный MCLR , фузы .
Внимательность и еще рез внимательность - спешка нужна только при ловли блох...
Аааа , поймал.
__________________
Осторожно , злой кот
dosikus вне форума  
Сказали "Спасибо" dosikus
warel (27.06.2019)
Непрочитано 02.10.2010, 23:22  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: Помогите с PIC 16F873 и прерыванием по RB0

Сообщение от dosikus Посмотреть сообщение
спешка нужна только при ловле блох...
и при поносе!
realid вне форума  
Сказали "Спасибо" realid
warel (27.06.2019)
Непрочитано 02.10.2010, 23:38  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Помогите с PIC 16F873 и прерыванием по RB0

Сообщение от realid Посмотреть сообщение
и при поносе!
еще когда ты в постели с женой, а муж в дверь стучится
Easyrider83 вне форума  
Сказали "Спасибо" Easyrider83
warel (27.06.2019)
Непрочитано 02.10.2010, 23:58  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию Re: Помогите с PIC 16F873 и прерыванием по RB0

то вообще кошмар...
__________________
warez
urry вне форума  
Сказали "Спасибо" urry
warel (27.06.2019)
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги dosikus Делимся опытом 11242 29.12.2015 23:45
Помогите разобраться с PIC 10 box0356 Микроконтроллеры, АЦП, память и т.д 4 21.04.2010 10:11


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


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