PIC 16F877/Лампочка с ключом
15.03.2010, 06:06
|
|
|
Прохожий
Регистрация: 02.03.2010
Сообщений: 8
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: PIC 16F877/Лампочка с ключом
Доброе утро, уважаемые! Спасибо за точные, хорошие, развернутые ответы!  Мне прям очень понравилась электроника.. до поздней ночи сидел и моделировал ситуации
Выложу на Ваш суд схему, с подведенным резистором к входу и земле. Прошу прокомментировать если есть какие-то неточности.
Также, может есть сайт где самые простейшие схемы (ну как эта, с лампочкой), даны, если с объяснениями, еще лучше! Чтобы я вас сильно не мучал
|
|
|
|
15.03.2010, 18:28
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,578
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: PIC 16F877/Лампочка с ключом
Лучше начни себе автоматику делать на контроллерах,тогда еще интересней будет все это.
__________________
Глаза боятся,а руки делают.
|
|
|
|
16.03.2010, 01:49
|
|
|
Прописка
Регистрация: 25.11.2006
Адрес: Харьков
Сообщений: 295
Сказал спасибо: 25
Сказали Спасибо 71 раз(а) в 60 сообщении(ях)
|
Re: PIC 16F877/Лампочка с ключом
Сообщение от vip7070
|
|
до поздней ночи сидел и моделировал ситуации
|
О.К. Вы, я вижу, человек увлекающийся. Тогда попробуйте в протеусе "измерить" ток, текущий через R1 при замкнутом выключателе.
|
|
|
|
16.03.2010, 18:02
|
|
|
Прохожий
Регистрация: 24.01.2008
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: PIC 16F877/Лампочка с ключом
Вот ещё:на каждое нажатие кнопки зжигается следующий светодиод.
list P= 16F877
include "P16F877.INC"
declare:
BSF STATUS, RP0;1 bank-TRIS
MOVLW 0x06 ; Configure all pins
MOVWF ADCON1 ; as digital inputs
BSF TRISA, 0;input
BCF TRISB, 0;output
BCF TRISB, 1
BCF TRISB, 2
BCF TRISB, 3
BCF TRISB, 4
BCF TRISB, 5
BCF TRISB, 6
BCF TRISB, 7
BCF STATUS, RP0;0 bank-PORT
CLRF PORTB
BSF PORTB,0
check:
BTFSS PORTA,0
goto $-1
BTFSC PORTA,0
goto $-1
RLF PORTB,1
goto check
end
|
|
|
|
Сказали "Спасибо" miron63
|
|
|
18.03.2010, 18:15
|
|
|
Прохожий
Регистрация: 24.01.2008
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: PIC 16F877/Лампочка с ключом
Если есть интерес могу подкидывать простенькие исходники каждый раз
с новой командой.Всё это есть в интернете,но знаю ,что начинающему
трудно выбрать то что нужно.
Здесь бегущие огни, кнопкой меняется направление.
list P= 16F877
include "P16F877.INC"
;Блоки данных
CBLOCK 0x20
Reg_1
Reg_2
ENDC
declare:
BSF STATUS, RP0;1 bank-TRIS
MOVLW 0x06 ; Configure all pins
MOVWF ADCON1 ; as digital inputs
BSF TRISA, 0;input
BCF TRISB, 0;output
BCF TRISB, 1
BCF TRISB, 2
BCF TRISB, 3
BCF TRISB, 4
BCF TRISB, 5
BCF TRISB, 6
BCF TRISB, 7
BCF STATUS, RP0;0 bank-PORT
CLRF PORTB
BSF PORTB,0
check:
call Pause ;Вызов подпрограммы задержки
RLF PORTB,1
BTFSS PORTA,0
goto check
BTFSC PORTA,0
goto $-1
check1
call Pause ;Вызов подпрограммы задержки
RRF PORTB,1
BTFSS PORTA,0
goto check1
BTFSC PORTA,0
goto $-1
goto check
;******Подпрограмма задержки
;delay = 100'000 machine cycles
Pause movlw .221
movwf Reg_1
movlw .130
movwf Reg_2
wr decfsz Reg_1, F
goto wr
decfsz Reg_2, F
goto wr
nop
nop
return
end
|
|
|
|
Сказали "Спасибо" miron63
|
|
|
19.03.2010, 12:24
|
|
|
Прохожий
Регистрация: 24.01.2008
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: PIC 16F877/Лампочка с ключом
Инициализацию портов можно представить по другому.Это то же самое.
В регистр данные можно загружать одной командой,а в двоичном виде-так
визуально видно на каком пине что имеем.Но это на любителя, у каждого
на этот счёт своё мнение.
declare:
BSF STATUS, RP0;1 bank-TRIS
movlw B'00000110' ; Configure all pins
MOVWF ADCON1 ; as digital inputs
movlw B'00000001' ;бит 0 вход, остальные выход
movwf TRISA
movlw B'00000000' ; все выход
movwf TRISB
BCF STATUS, RP0;0 bank-PORT
|
|
|
|
Сказали "Спасибо" miron63
|
|
|
24.03.2010, 08:08
|
|
|
Прохожий
Регистрация: 02.03.2010
Сообщений: 8
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: PIC 16F877/Лампочка с ключом
Доброе утро, уважаемые! Попробовал сделать еще одну тестовую схемку, в принципе работает, но иной раз перескакивает диоды  Вот уж не знаю, в чем тут дело
|
Код:
|
list P=16F877
include "P16F877.INC"
count equ h'22'
BSF STATUS, RP0
;MOVLW 0x06 ; Configure all pins
;MOVWF ADCON1 ; as digital inputs
CLRF TRISB
BSF TRISD,0
BCF STATUS, RP0
check BTFSC PORTD, 0
call left
BTFSS PORTD, 0
call right
goto check
right movlw b'10000000'
movwf PORTB
call delay
loop RRF PORTB, f
call delay
BTFSS PORTD, 0
goto loop
return
left movlw b'00000001'
movwf PORTB
call delay
loop1:
RLF PORTB, f
call delay
BTFSC PORTD, 0
goto loop1
return
delay movlw h'FF'
movwf count
loop2 decfsz count,f
goto loop2
return
end |
Также, хотелось бы выразить огромное признание за Вашу помощь и советы! Очень помогают. Насколько я понял, эту программу еще можно сделать с использование таймера, не так ли?
|
|
|
|
24.03.2010, 08:27
|
|
|
Прохожий
Регистрация: 02.03.2010
Сообщений: 8
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: PIC 16F877/Лампочка с ключом
Прилагаю, пошаговую отладку программки.
Т.е. на 0 шаге, начальное состояние - система не запущена, с 1 уже идет непосредственное выполнение. Также стоит заметить, что, при "простом |›" запуске, видно что все работает, как и надо, все диоды задействованы, а когда начинаю смотреть шаг за шагом вот как то так..
С уважением, vip7070
|
|
|
|
24.03.2010, 17:42
|
|
|
Частый гость
Регистрация: 16.11.2007
Адрес: Гомель (Беларусь)
Сообщений: 37
Сказал спасибо: 348
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: PIC 16F877/Лампочка с ключом
Доброго времени суток! Проблема с "перескакиванием" светодиодов скорее всего связана с протеусом. У меня она появляется при большой скорости переключения светодиодов. Поэтому попробуйте уменьшить скорость переключения, например введением вложенниго цикла в подпрограмму задержки и (или) снижением тактовой частоты контроллера:
list P= 16F877
include "P16F877.INC"
COUNT1 equ h'22'
COUNT2 equ h'23'
BSF STATUS, RP0
MOVLW 0x06 ; Configure all pins
MOVWF ADCON1 ; as digital inputs
CLRF TRISB
BSF TRISD,0
BCF STATUS, RP0
check
BTFSC PORTD, 0
call left
BTFSS PORTD, 0
call right
goto check
right
movlw b'10000000'
movwf PORTB
BCF STATUS,C ;СБРАСЫВАЕМ ФЛАГ ПЕРЕНОСА
call delay
loop
RRF PORTB, f
call delay
BTFSS PORTD, 0
goto loop
return
left
movlw b'00000001'
movwf PORTB
BCF STATUS,C ;СБРАСЫВАЕМ ФЛАГ ПЕРЕНОСА
call delay
loop1
RLF PORTB, f
call delay
BTFSC PORTD, 0
goto loop1
return
;---------------------------
delay
;ЗДЕСЬ ЦИКЛ "LOOP3" ВЛОЖЕН В ЦИКЛ "LOOP2"
;ДЛЯ РЕАЛИЗАЦИИ БОЛЬШИХ ЗАДЕРЖЕК
movlw h'FF'
movwf COUNT1
LOOP2
MOVLW 0x80
MOVWF COUNT2
LOOP3
decfsz COUNT2,f
goto LOOP3
decfsz COUNT1,f
goto LOOP2
return
;---------------------------
end
И еще обратите внимание на команды сброса флага переноса после загрузки начальных значений в порт. Они необходимы, так как команды RRF и RLF сдвигают регистр через этот флаг. А если у вас после переключения направления в CY останется единица, произойдет вот такая ситуация:
|
|
|
|
24.03.2010, 18:22
|
|
|
Частый гость
Регистрация: 16.11.2007
Адрес: Гомель (Беларусь)
Сообщений: 37
Сказал спасибо: 348
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: PIC 16F877/Лампочка с ключом
Вот вам пример использования таймера для реализации задержки:
|
Код:
|
.
.
.
;ИНИЦИАЛИЗИРУЕМ ТАЙМЕР TMR0
MOVLW B'10000111' ;бит5="0" - внутренний тактовый сигнал для таймера
;бит4="0" - выбор фронта приращения при внешнем
;тактовом сигнале (не имеет значения, если бит5="0")
;бит3="0" - предделитель включен перед TMR0
;биты 2-0 - коэффициент деления предделителя ("111" - 256)
BSF STATUS, RP0
MOVWF OPTION_REG
BCF STATUS, RP0
;---------------------------
.
.
.
.
.
;---------------------------
delay
;ЗДЕСЬ ДЛЯ РЕАЛИЗАЦИИ ЗАДЕРЖКИ ИСПОЛЬЗУЕТСЯ TMR0
movlw 0x0A ;ЗАГРУЖАЕМ В ТАЙМЕР НАЧАЛЬНОЕ ЗНАЧЕНИЕ
movwf TMR0
BCF INTCON,T0IF ;СБРАСЫВАЕМ ФЛАГ ПРЕРЫВАНИЯ ОТ TMR0
BTFSS INTCON,T0IF ;ОЖИДАЕМ УСТАНОВКУ ФЛАГА ПРЕРЫВАНИЯ
GOTO $-1
return
;---------------------------
end |
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:03.
|
|