16.12.2012, 02:00
|
|
Прописка
Регистрация: 14.02.2010
Адрес: СССР
Сообщений: 286
Сказал спасибо: 141
Сказали Спасибо 51 раз(а) в 43 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Код:
|
1: #include ‹V.AA.3.0.h›
000 0000 NOP
001 3180 MOVLP 0
002 2886 GOTO 0x86
004 0183 CLRF 0x3
005 018A CLRF 0xa
006 0020 MOVLB 0
007 0820 MOVF 0x20, W
008 00A4 MOVWF 0x24
009 0821 MOVF 0x21, W
00A 00A5 MOVWF 0x25
00B 0822 MOVF 0x22, W
00C 00A6 MOVWF 0x26
00D 0823 MOVF 0x23, W
00E 00A7 MOVWF 0x27
00F 1D8B BTFSS 0xb, 0x3
010 2813 GOTO 0x13
011 180B BTFSC 0xb, 0
012 281C GOTO 0x1c
013 0824 MOVF 0x24, W
014 00A0 MOVWF 0x20
015 0825 MOVF 0x25, W
016 00A1 MOVWF 0x21
017 0826 MOVF 0x26, W
018 00A2 MOVWF 0x22
019 0827 MOVF 0x27, W
01A 00A3 MOVWF 0x23
01B 0009 RETFIE
2:
3: unsigned int intra5=0;
4:
5: #int_RA
6: void RA_isr(void)
7: {
8: if(input(PIN_A5)==0)
01C 0021 MOVLB 0x1
01D 168C BSF 0xc, 0x5
01E 0020 MOVLB 0
01F 1A8C BTFSC 0xc, 0x5
020 2823 GOTO 0x23
9: {
10: intra5=1;
021 3001 MOVLW 0x1
022 00A8 MOVWF 0x28
11: }
12: // clear_interrupt(INT_RA5);
13: }
14:
15:
023 100B BCF 0xb, 0 /////ЭТО НЕ ОЧИСТКА ФЛАГА IOCIF, НЕ? НЕ ФИГА НЕ РАБОТАЕТ.
024 3180 MOVLP 0
025 2813 GOTO 0x13
16: void main()
17: {
086 0185 CLRF 0x5
087 0184 CLRF 0x4
088 301F MOVLW 0x1f
............................ |
Последний раз редактировалось Old_Monster; 16.12.2012 в 06:38.
|
|
|
|
16.12.2012, 10:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 11.06.2006
Адрес: 51° 46′ 0″ N, 55° 6′ 0″ E
Сообщений: 1,975
Сказал спасибо: 370
Сказали Спасибо 1,725 раз(а) в 706 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Давно использую правило для себя при работе с прерываниями:
перед разрешением конкретного прерывания обязательно обнулить флаг этого прерывания и в обработчике его также сбросить.
[HTML]20: if(input(PIN_A5)==0){intra5=1;}
01C 0021 MOVLB 0x1
01D 168C BSF 0xc, 0x5
01E 0020 MOVLB 0
01F 1A8C BTFSC 0xc, 0x5
020 2823 GOTO 0x23
021 3001 MOVLW 0x1
022 00A8 MOVWF 0x28
21: clear_interrupt(INT_RA5);
023 0027 MOVLB 0x7
024 1293 BCF 0x13, 0x5
22: }
23:
025 100B BCF 0xb, 0
026 3180 MOVLP 0
027 0020 MOVLB 0
028 2813 GOTO 0x13
24: void main()[/HTML]
В Вашем случае это много ресурсов не займет, а надежность 100%.
Вот посмотрите http://www.ccsinfo.com/forum/viewtopic.php?t=45944 обсуждалось.
|
|
|
|
16.12.2012, 11:06
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
welcome61, В отличии от вас , я мануал на CCS читаю .
Почитайте на досуге - как происходит сборка модульного проекта в CCS , это лучше чем бездумно приводить чужие цитаты ...
__________________
Осторожно , злой кот
|
|
|
|
16.12.2012, 13:44
|
|
Почётный гражданин KAZUS.RU
Регистрация: 11.06.2006
Адрес: 51° 46′ 0″ N, 55° 6′ 0″ E
Сообщений: 1,975
Сказал спасибо: 370
Сказали Спасибо 1,725 раз(а) в 706 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от dosikus
|
welcome61, В отличии от вас , я мануал на CCS читаю .
|
Похвально!
КОНСТИТУЦИЯ ФОРУМА "Kazus.ru", а именно гл. III. ПРАВИЛА ПОВЕДЕНИЯ НА ФОРУМЕ не позволяет мне в подобном тоне отвечать dosikus.
|
|
|
|
16.12.2012, 14:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.02.2008
Адрес: Ukraine, рядом с Полтавой
Сообщений: 9,700
Сказал спасибо: 5,497
Сказали Спасибо 25,125 раз(а) в 5,642 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Вот кусок из даташита.
Цитата:
|
This interrupt can wake the device from Sleep. The
user, in the Interrupt Service Routine, can clear the
interrupt in the following manner:
a) Any read or write of GPIO. This will end the
mismatch condition.
b) Clear the flag bit GPIF.
A mismatch condition will continue to set flag bit GPIF.
Reading GPIO will end the mismatch condition and
allow flag bit GPIF to be cleared.
|
|
|
|
|
16.12.2012, 15:41
|
|
Прописка
Регистрация: 14.02.2010
Адрес: СССР
Сообщений: 286
Сказал спасибо: 141
Сказали Спасибо 51 раз(а) в 43 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
welcome61, в приведенном мной листинге по адресу 0x23 команда очистки флага IOCIF в INTCON
. Только при её выполнении флаг не очищается. Я в недоумении. BCF 0xb, 0 - сброс бита 0 в INTCON. Но после выполнения в бите также остается единица...
А команда принудительной очистки RA5 пишет в IOCAF.
Что-то мне кажется, надо забыть псевдо-разные векторы прерывания CCS и пользоваться #INT_GLOBAL
Сообщение от Eddy71
|
Вот кусок из даташита.
|
Это точно даташит на PIC16F1822 ?
Не нашел там этого места.
И, кроме того, без выхода из сна флаг тоже не очищается.
Не, int-on-change однозначно ручками надо сбрасывать.
Последний раз редактировалось Old_Monster; 16.12.2012 в 16:11.
Причина: уточнение
|
|
|
|
16.12.2012, 19:06
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.02.2008
Адрес: Ukraine, рядом с Полтавой
Сообщений: 9,700
Сказал спасибо: 5,497
Сказали Спасибо 25,125 раз(а) в 5,642 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Нет, это шит на 12ф675. Но функция прерывания кочует копипастом с одного камня на другой и со времен 16ф84 не менялась. Везде одинаково работает.
|
|
|
|
16.12.2012, 20:21
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от welcome61
|
КОНСТИТУЦИЯ ФОРУМА "Kazus.ru", а именно гл. III. ПРАВИЛА ПОВЕДЕНИЯ НА ФОРУМЕ не позволяет мне в подобном тоне отвечать dosikus.
|
Ну так приведите свои доказательства по поводу Proteus.
Пока все "глюки" оборачивались кривизной конечностей.
Опровергните так же мои слова относительно сборки в CCS...
__________________
Осторожно , злой кот
|
|
|
|
17.12.2012, 03:11
|
|
Прописка
Регистрация: 14.02.2010
Адрес: СССР
Сообщений: 286
Сказал спасибо: 141
Сказали Спасибо 51 раз(а) в 43 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от Eddy71
|
Нет, это шит на 12ф675. Но функция прерывания кочует копипастом с одного камня на другой и со времен 16ф84 не менялась. Везде одинаково работает.
|
Позволю себе усомниться. Семейство другое. В даташите ИМЕННО НА 12F1822 такого нет.
Или Вам о том поведали знакомые индусы из microchip?
|
|
|
|
17.12.2012, 10:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Цитата:
|
The IOC is also a bit tougher to use, even beyond that. It is imperative to read the port soon before enabling the interrupt, and even more important to READ THE PORT inside the ISR! If you have a slow-changing signal, and think you can set a flag inside the ISR and do your read later, outside the ISR, think again! The read of the port (or any bit on the port, if I recall correctly), resets the latch on the comparator that triggers the interrupt. If you don't clear it inside the ISR, it will immediately retrigger when you exit the ISR. If you remember to do this, it's all good, but if you forget and think you can read the port when you get around to it, you'll get a bit frustrated until you remember to do the read in the ISR.
|
May be help for you...
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:17.
|
|