Свежие обсуждения
Микроконтроллеры

Рабта с портом RB0 на Pic,неполучается установить 0.

1 2

Имею такой код
...
PortB equ 06h
Off equ 0
...
clrf PortB
bcf PortB,Off
...
на выходе ставил вольтметр но независимо от команды bcf или bsf на выходе всегда 1!
Почему?Что я не так делаю?

 

Т.к. не очень секу в ПИКах, два наводящих вопроса:
А порт B имеет внутреннрие подтягивающие резюки? Они включены?

 

Возможно ошибки конфигурации порта или выбора страницы.

 

2Dron_Gus
Да имеет,но они включаются только в режиме приема,когда работают на выход они отключаются.
2AlexM
а как это исправить?

 

Выход нагружен на вход KMOП логику
Вот исходники

 

Так вроде ж TrisB управляет какому разряду на выход, какому на вход. По сбросу все разряды только входные.

 

Обьясните пожалуста как сделать RB1 на чтение а RB2 на выход я уже дня 3 с этим маюсь!
Что только не делал,а нужные уровни не устанавливаются!

 

Вот простенький пример проверки функционирования портов.

; ***** Test Pin *****
;
;
; (C)
LIST P=16F84
INCLUDE<P16F84.INC>

PORTA EQU 0x05 ; Регистр данных порта A
TRISA EQU 85H ; Регистр направления порта A
PORTB EQU 0x06 ; Регистр данных порта B
TRISB EQU 86H ; Регистр направления порта B
STATUS EQU 0x03 ; Регистр состояния
RP0 EQU 5 ; Выбор страницы регистров

cnt EQU 0x0C ;Счетчик задержки

org 0x0000

;********************************************************************
;* Инициализация входов/выходов *
;********************************************************************

BSF STATUS,RP0 ;Доступ к старшему банку регистров
MOVLW B'00000000' ; Конфигурация порта A (все на выход)
MOVWF TRISA ;
MOVLW B'00000000' ;Конфигурация порта B (все на выход)
MOVWF TRISB
BCF STATUS,RP0 ;Снова доступ к младшему банку
CLRF PORTA ;
CLRF PORTB ;

;--------------- На всех выходах высокий уровень

START BSF PORTA,0
BSF PORTA,1
BSF PORTA,2
BSF PORTA,3
BSF PORTA,4

BSF PORTB,0
BSF PORTB,1
BSF PORTB,2
BSF PORTB,3
BSF PORTB,4
BSF PORTB,5
BSF PORTB,6
BSF PORTB,7

;********** Задержка 255*3+2 t ***********
MOVLW D'255'
MOVWF cnt

del1 decfsz cnt,f
goto del1

;--------------- На всех выходах низкий уровень

BCF PORTA,0
BCF PORTA,1
BCF PORTA,2
BCF PORTA,3
BCF PORTA,4

BCF PORTB,0
BCF PORTB,1
BCF PORTB,2
BCF PORTB,3
BCF PORTB,4
BCF PORTB,5
BCF PORTB,6
BCF PORTB,7

;********** Задержка ***********
MOVLW D'255'
MOVWF cnt

del2 decfsz cnt,f
goto del2

;********** Возвращаемся ******

GOTO START

END

14843.asm

 

то есть получается чтобы записать в порт значение нужно
RP0 в 1 а для считыания в 0?
Как же тогда считывать из порта RB1 а записывать в RB2
одновременно?
У меня на выходе на RB2 посажен одновибратор на К561ЛА7,
и по 0 на RB1 в RB2 посылается импульс который должен
запустить одновибратор который сгенерирует импульс заданной длительности.
Но почему-то вместо этого МВ начинает дико пищать?Почему?
как это реализовать подскажите?

 

Как же тогда считывать из порта RB1 а записывать в RB2
одновременно?

Одновременно не получится, т.к. просто НЕТ такой команды.