Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
07.12.2009, 17:37
|
|
Прохожий
Регистрация: 28.06.2008
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Вопрос по pic16f877a
Хочу просто подать на порт B0 единицу
программа на ассемблере:
....
clrf PORTB
bsf STATUS,RP0
movlw b'00000000'
movwf TRISB
movlw b'00001111'
movwf PORTB
bcf INTCON,7
bcf OPTION_REG,7
bcf STATUS,RP0
movlw b'00000001'
bsf STATUS,RP0
movwf PORTB
bcf STATUS,RP0
--------
Питание подаю 5вольт на 11,32 ногу, земля 12,31
Кварцовый резонатор на 8МГц..
На выходе B0 подключен светодиод через резистор.
......
Вопрос в том что в теории,симуляции в протеусе, все нормально работает, а на практике получается на всех выходах порта B покаывает напряжение порядка 0.1 вольта.
В чем может быть проблема.
P.s. я только учусь, если что то простое, прошу не стебаться
|
|
|
|
07.12.2009, 17:54
|
|
Заблокирован
Регистрация: 07.12.2009
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Вопрос по pic16f877a
Разберитесь с банками и регистрами...
Код:
|
bsf STATUS,RP0
movlw b'00000000' ; здесь у Вас всё на выход
movwf TRISB
;movlw b'00001111' ; а здесь Вы ставите младшую тетраду на вход -
;movwf PORTB ; на самом деле Вы пишите в TRISB - банк не переключили |
Последний раз редактировалось HHIMERA; 07.12.2009 в 17:57.
|
|
|
|
07.12.2009, 18:01
|
|
Заблокирован
Регистрация: 07.12.2009
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Вопрос по pic16f877a
Код:
|
clrf PORTB
bsf STATUS,RP0
movlw b'00000000'
movwf TRISB
;movlw b'00001111'
;movwf PORTB
bcf INTCON,7
bcf OPTION_REG,7
bcf STATUS,RP0
movlw b'00000001'
;bsf STATUS,RP0
movwf PORTB
;bcf STATUS,RP0 |
Где-то так...
|
|
|
|
07.12.2009, 20:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: Вопрос по pic16f877a
Сообщение от HHIMERA
|
Код:
|
clrf PORTB
bsf STATUS,RP0
movlw b'00000000'
movwf TRISB
;movlw b'00001111'
;movwf PORTB
bcf INTCON,7
bcf OPTION_REG,7
bcf STATUS,RP0
movlw b'00000001'
;bsf STATUS,RP0
movwf PORTB
;bcf STATUS,RP0 |
Где-то так...
|
Для PORTB и TRISB у F877 должно работать и так, но вообще то у F877 аж 4 банка RAM, следовательно выбираются они двумя битами RP0 и RP1.
Переключаем RAM BANK для регистров TRISA, TRISC, TRISD, TRISE, :
Код:
|
bsf STATUS,RP0
bcf STATUS,RP1 |
переключаем для регистров PORTA, PORTC, PORTD, PORTE:
Код:
|
bcf STATUS,RP0
bcf STATUS,RP1 |
Но лучше выбирать вот так,
Переключаем RAM BANK для регистров TRISA, TRISC, TRISD, TRISE, :
переключаем для регистров PORTA, PORTC, PORTD, PORTE:
Тогда ассемблер, сам поставит необходимое количество битов для выбраного в проекте типа контроллера:
|
|
|
|
07.12.2009, 23:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.08.2007
Адрес: Болгария Перник
Сообщений: 1,771
Сказал спасибо: 74
Сказали Спасибо 357 раз(а) в 245 сообщении(ях)
|
Re: Вопрос по pic16f877a
Все выше написаное так. Маленькое дополнение, BANKSEL имеет и более изощренное употребление.
Код:
|
BANKSEL TRISB ;Выбираем банк, в котором находится TRISB. Компилятор сам установит RP0 и RP1
movLw b'00000000' ;Можно поставить и перед BANKSEL. Инструкция movLw от текущего банка памяти не зависит.
movWf TRISB ;Весь порт на вывод
movLw b'00000001' ;Другой порядок употребления BANKSEL
BANKSEL PORTB ;Выбираем банк, в котором находится PORTB
movWf PORTB ;Устанавливам содержимое выводов порта
BANKSEL 0 ;Хорошая практика, для рассеяных, вроде меня, делаем что делаем, но остаемся в БАНКЕ 0. Оттуда порты управляются |
Вобщем BANKSEL компилируется как последовательность двух инструкций bSf/bCf STATUS, RP0 и bSf/bCf STATUS, RP1. Несколько расточительно, зачастую одна из них лишняя, если учесть с каким банком работал прежний участок кода можно сэкономить.
Ну и маленькoe уточнение.
bcf INTCON,7 плохая практика, несколько понятнее bcf INTCON,GIE. Управление прерываний, запомнил. Однако bcf OPTION_REG,7 много. По идее должно быть bcf OPTION_REG,RBPU
Я не то что капризничаю. Попадались вопросы, скажем по управлению банками. Команды типа bcf STATUS,5 не воспринять с первого раза...
Коментарии для каждой строчки кода обязательны. Я раз попался, когда писал все было ясно. Пришлось подправить, писал почти все заново.....
__________________
Мыслю, следовательно существую
|
|
|
|
08.12.2009, 04:10
|
|
Заблокирован
Регистрация: 07.12.2009
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Вопрос по pic16f877a
Сообщение от picavr
|
Для PORTB и TRISB у F877 должно работать и так, но вообще то у F877 аж 4 банка RAM, следовательно выбираются они двумя битами RP0 и RP1.
|
Если уж всю прогу за топик-автора писать, то в начале нужно добавить
Код:
|
ORG 0000H
bcf STATUS,RP0
bcf STATUS,RP1 |
а в конце
|
|
|
|
08.12.2009, 04:16
|
|
Заблокирован
Регистрация: 07.12.2009
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Вопрос по pic16f877a
Сообщение от prim_lion
|
Вопрос в том что в теории,симуляции в протеусе, все нормально работает, а на практике получается на всех выходах порта B покаывает напряжение порядка 0.1 вольта.
|
Забудьте про Протез, пользуйтесь МПЛАБом и в железе, иначе с Протезом ещё не в одну непонятку вляпаетесь...
|
|
|
|
08.12.2009, 13:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.08.2007
Адрес: Болгария Перник
Сообщений: 1,771
Сказал спасибо: 74
Сказали Спасибо 357 раз(а) в 245 сообщении(ях)
|
Re: Вопрос по pic16f877a
Сообщение от HHIMERA
|
Забудьте про Протез, пользуйтесь МПЛАБом и в железе, иначе с Протезом ещё не в одну непонятку вляпаетесь...
|
Протез, надо же придумать... Однако я присоединяюсь к мнению.
__________________
Мыслю, следовательно существую
|
|
|
|
08.12.2009, 16:10
|
|
Прохожий
Регистрация: 28.06.2008
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Вопрос по pic16f877a
list p=16f877a
#include ‹p16f877a.inc›
__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
ORG 0x000
bcf STATUS,RP0
bcf STATUS,RP1
clrf PORTB
bsf STATUS,RP0
movlw b'00000000'
movwf TRISB
bcf INTCON,7
bcf OPTION_REG,7
bcf STATUS,RP0
movlw b'00000001'
movwf PORTB
Loop
nop
goto Loop
end
Такой код для вывода единицы 1 на выход В0, как я понял, проверить пока сейчас не могу, дотестировался что перпутал и нечайно подал 12 Вольт на котроллер :-[
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:22.
|
|