16.08.2020, 11:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
|
Re: Помогите с TMR1 на PIC16F873
jump, МЭК61131 структура написания как у ASM?
|
|
|
|
16.08.2020, 12:10
|
|
Частый гость
Регистрация: 18.09.2005
Сообщений: 26
Сказал спасибо: 72
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Помогите с TMR1 на PIC16F873
Сообщение от DmitriyVDN
|
для большего кол-ва кнопок нужно в Task_Button: отвязать биты переменных от конкретных битов портаБ , ну и увеличить их разрядность с 8ми до 16 бит.
|
Простите опять за тупой вопрос. А как это сделать?
Кажется я взялся за непосильную задачу. Наверное придется придумывать что то другое.
|
|
|
|
16.08.2020, 12:47
|
|
Заблокирован
Регистрация: 16.05.2015
Адрес: Болгария
Сообщений: 1,460
Сказал спасибо: 286
Сказали Спасибо 1,125 раз(а) в 540 сообщении(ях)
|
Re: Помогите с TMR1 на PIC16F873
Pic16F1xxx
Ядро новое сохраняет автоматом важные регистры в прерывании
Цена доллар за 14 ног
Пока идет выпуск так себе По 200 штук PIC10F200
PIc 18 на очерди. заказчик любит смотетрь в потолок желаний
Копейки считает,
Нормально, не в первый раз
Пройдет
|
|
|
|
16.08.2020, 13:05
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,983
Сказал спасибо: 0
Сказали Спасибо 4,941 раз(а) в 2,370 сообщении(ях)
|
Re: Помогите с TMR1 на PIC16F873
Сообщение от vavan1983
|
МЭК61131 структура написания как у ASM?
|
ознакомьтесь, можно обсудить в другой теме
|
|
|
|
16.08.2020, 13:20
|
|
Гражданин KAZUS.RU
Регистрация: 10.06.2010
Сообщений: 598
Сказал спасибо: 222
Сказали Спасибо 234 раз(а) в 154 сообщении(ях)
|
Re: Помогите с TMR1 на PIC16F873
Сообщение от ptrots
|
А как это сделать?
|
в дефайнах
Код:
|
;Биты реальных кнопок PORTB,PORTA
#define PORT_BUTTON1 PORTB,0
#define PORT_BUTTON2 PORTB,1
#define PORT_BUTTON3 PORTB,2
#define PORT_BUTTON4 PORTB,3
#define PORT_BUTTON5 PORTB,4
;.....
;.....
;.....
#define PORT_BUTTON9 PORTA,0
#define PORT_BUTTON10 PORTA,2
;.....
;.....
#define PORT_BUTTON16 PORTA,5
;Биты виртуальных кнопок PortButton, PortButtonOld,
; ButtonJastPressed,ButtonJastRelased
#define BUTT1 0
#define BUTT2 1
#define BUTT3 2
#define BUTT4 3
#define BUTT5 4
#define BUTT6 5
#define BUTT7 6
#define BUTT8 7
#define BUTT9 0
#define BUTT10 1
#define BUTT11 2
#define BUTT12 3
#define BUTT13 4
#define BUTT14 5
#define BUTT15 6
#define BUTT16 7 |
в описании переменных делаем размерность 16бит
[SPOILER]
Код:
|
Button :2 ; регистр текущие состояние кнопок
ButtonOld :2 ; регистр предыдущие состояние кнопок
ButtonJastPressed :2 ; только что нажатые кнопки
ButtonJastRelased :2 ; только что отпущеные кнопки |
в коде
Код:
|
;************************************************
;
;************************************************
;Button ; регистр текущие состояние кнопок
;ButtonOld ; регистр предыдущие состояние кнопок
;ButtonJastPressed ; только что нажатые кнопки
;ButtonJastRelased ; только что отпущеные кнопки
Task_Button:
banksel PORTB
clrf Button
clrf Button+1
btfss PORT_BUTTON1
bsf Button,BUTT1
btfss PORT_BUTTON2
bsf Button,BUTT2
btfss PORT_BUTTON3
bsf Button,BUTT3
btfss PORT_BUTTON4
bsf Button,BUTT4
btfss PORT_BUTTON5
bsf Button,BUTT5
btfss PORT_BUTTON6
bsf Button,BUTT6
btfss PORT_BUTTON7
bsf Button,BUTT7
btfss PORT_BUTTON8
bsf Button+1,BUTT8
btfss PORT_BUTTON9
bsf Button+1,BUTT9
btfss PORT_BUTTON10
bsf Button+1,BUTT10
btfss PORT_BUTTON11
bsf Button+1,BUTT11
btfss PORT_BUTTON12
bsf Button+1,BUTT12
btfss PORT_BUTTON13
bsf Button+1,BUTT13
btfss PORT_BUTTON14
bsf Button+1,BUTT14
btfss PORT_BUTTON15
bsf Button+1,BUTT15
; определяем только что нажатые кнопки
movfw Button ; W = Button
xorwf ButtonOld,w ; W ^= ButtonOld
andwf Button,w ; W &= Button
iorwf ButtonJastPressed,f ; ButtonJastPressed = W
movfw Button+1 ; W = ButtonH
xorwf ButtonOld+1,w ; W ^= ButtonOldH
andwf Button+1,w ; W &= ButtonH
iorwf ButtonJastPressed+1,f ; ButtonJastPressedH = W
; определяем только что отпущеные кнопки
movfw Button ; W = Button
xorwf ButtonOld,w ; W ^= ButtonOld
andwf ButtonOld,w ; W &= ButtonOld
iorwf ButtonJastReleased,f ; ButtonJastPressed = W
movfw Button+1 ; W = ButtonH
xorwf ButtonOld+1,w ; W ^= ButtonOldH
andwf ButtonOld+1,w ; W &= ButtonOldH
iorwf ButtonJastReleased+1,f ; ButtonJastPressedH = W
; обновляем станоезначение кнопок
movfw Button
movwf ButtonOld
movfw Button+1
movwf ButtonOld+1 |
Последний раз редактировалось DmitriyVDN; 16.08.2020 в 14:33.
|
|
|
Сказали "Спасибо" DmitriyVDN
|
|
|
18.08.2020, 13:36
|
|
Заблокирован
Регистрация: 16.05.2015
Адрес: Болгария
Сообщений: 1,460
Сказал спасибо: 286
Сказали Спасибо 1,125 раз(а) в 540 сообщении(ях)
|
Re: Помогите с TMR1 на PIC16F873
btfss PORT_BUTTON14
bsf Button+1,BUTT14
btfss PORT_BUTTON15
bsf Button+1,BUTT15
; определяем только что нажатые кнопки
movfw Button ; W = Button
xorwf ButtonOld,w ; W ^= ButtonOld
andwf Button,w ; W &= Button
iorwf ButtonJastPressed,f ; ButtonJastPressed = W
movfw Button+1 ; W = ButtonH
xorwf ButtonOld+1,w ; W ^= ButtonOldH
andwf Button+1,w ; W &= ButtonH
iorwf ButtonJastPressed+1,f ; ButtonJastPressedH = W
; определяем только что отпущеные кнопки
movfw Button ; W = Button
xorwf ButtonOld,w ; W ^= ButtonOld
andwf ButtonOld,w ; W &= ButtonOld
iorwf ButtonJastReleased,f ; ButtonJastPressed = W
Я в ужасе
|
|
|
|
18.08.2020, 14:07
|
|
Гражданин KAZUS.RU
Регистрация: 10.06.2010
Сообщений: 598
Сказал спасибо: 222
Сказали Спасибо 234 раз(а) в 154 сообщении(ях)
|
Re: Помогите с TMR1 на PIC16F873
от чего?, что не так?
|
|
|
|
18.08.2020, 16:07
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Помогите с TMR1 на PIC16F873
Вероятно потому, что в реальности там нет кнопок - там оптические датчики, автор же об этом писал в начале.
Ну и да, повторный вход по факту срабатывания отсекается установленным флагом (битом) при первом входе. Этот бит сбрасывается только при распознавании исходного состояния.
В оптических датчиках дребезга, подобного механическим кнопкам, нет из-за гистерезиса триггера Шмита на входе в МК.
В этой конкретной задаче не надо вычислять нажатые или отпущенные кнопки. Нужно просто определить, перекрыт ли оптический датчик или нет.
Последний раз редактировалось NewWriter; 18.08.2020 в 16:09.
|
|
|
|
18.08.2020, 17:18
|
|
Гражданин KAZUS.RU
Регистрация: 10.06.2010
Сообщений: 598
Сказал спасибо: 222
Сказали Спасибо 234 раз(а) в 154 сообщении(ях)
|
Re: Помогите с TMR1 на PIC16F873
Сообщение от NewWriter
|
В этой конкретной задаче не надо вычислять нажатые или отпущенные кнопки. Нужно просто определить, перекрыт ли оптический датчик или нет.
|
а таймер как запускать будите?...
|
|
|
|
18.08.2020, 19:11
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Помогите с TMR1 на PIC16F873
Так, как описал.
if ((ReadInput(IN1) == TRUE) && (blocked_in1 == FALSE)) { blocked_in1 = TRUE; StartTimer(TIMER1); }
else blocked_in1 = FALSE;
Последний раз редактировалось NewWriter; 18.08.2020 в 19:14.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:27.
|
|