Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Picbasic.ru » Скорая помощь начинающим » Помощь в вопросах программирования » Внешнее прерывание при опросе клавиатуры МК PIC16f877 (Внешнее прерывание через RB0)
Внешнее прерывание при опросе клавиатуры МК PIC16f877
vladka9911 Дата: Вс, 12.11.2023, 18:32  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Новенький
Сообщений: 6
Репутация: 0   ±
Замечания:   ±
На сайте с 12.11.2023

Статус: Offline

Написал программу для опроса и вывода на семисегментные индикаторы чисел с клавиатуры. Но забыл что нужно сделать, чтобы когда нажата одна кнопка программа прерывалась пока она не будет отпущена пытался разобраться сам результатов не дало. Прошу вашей помощи подскажите пожалуйста. Файл проекта в протеусе прилагается.
Прикрепления: klava_proteus.rar (34.9 Kb)
ЯНДЕКС Дата: 12.11.2023
xvovanx Дата: Вс, 12.11.2023, 23:10  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 326
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата vladka9911 ()
нужно сделать, чтобы когда нажата одна кнопка программа прерывалась пока она не будет отпущена

Не понятно, что вы пытаетесь сделать. Обычно в главной программе в цикле идет вызов подпрограммы опроса клавиатуры. В подпрограмме анализ нажатых кнопок и присвоение переменным/флагам скажем 1. В теле основной программы проверка флага и этих переменных. Основную программу не останавливают.
П.С. Протеус ваш открыть не смог, я сижу на более стабильной версии 8.13, а за новыми не гонюсь.
vladka9911 Дата: Пн, 13.11.2023, 03:52  |                                                                                                                Сообщение # 3
Группа: Пользователи
Ранг:  Новенький
Сообщений: 6
Репутация: 0   ±
Замечания:   ±
На сайте с 12.11.2023

Статус: Offline

С U6 идет на вход RB0
;====================================================================
; Main.asm file generated by New Project wizard
;
; Created:   Вс окт 22 2023
; Processor: PIC16F877
; Compiler:  MPASM (Proteus)
;====================================================================

;====================================================================
; DEFINITIONS
;====================================================================

#include p16f877.inc                ; Include register definition file
__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_OFF & _HS_OSC & _LVP_OFF
;====================================================================
; VARIABLES
;====================================================================

;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================

      ; Reset Vector
RST   code  0x0 
      goto  Start
      org 0x004
      BTFSC PORTB,0
      goto $-1
      BCF INTCON, INTF
      retfie
;====================================================================
; CODE SEGMENT
;====================================================================
Start: 
       BSF STATUS,RP0
       BCF STATUS,RP1
       BSF INTCON,GIE
       BSF INTCON,INTE
       MOVLW b'00000000'
       MOVWF PIE1
       MOVWF PIE2
       BCF OPTION_REG,INTEDG
       MOVLW b'00000000'
       MOVWF TRISA
       MOVLW b'00000111'
       MOVWF TRISB
       MOVLW b'11111111'
       MOVWF TRISC
       MOVLW b'00000000'
       MOVWF TRISD
       BCF STATUS,RP0
       BCF STATUS,RP1
       MOVLW b'11111111'
       MOVWF PORTD
       MOVLW b'11111111'
       MOVWF PORTC
       CLRF PORTB      
       CLRF PORTA
Loop  
;=================scanirovanie klaviatyri=====================
;===Co0 - line0 [1]=== 
co0    BCF STATUS,RP0
       MOVLW b'11111110'
       MOVWF PORTD ;Загружаем 0 в нулевой столбец
;===Co0 - line0 [1]===        
       BTFSC PORTC, 0 ;если 1, то выполняется переход на следующую строку
       goto $+6
       MOVLW b'00000000' ;Запись 0
       MOVWF PORTB
       MOVLW b'00000100' ;Запись 1
       MOVWF PORTA
       goto Loop
;===Co0 - line1 [9]===     
       BTFSC PORTC, 1
       goto $+6
       MOVLW b'00000000' ;Запись 1
       MOVWF PORTB
       MOVLW b'00100100' ;Запись 9
       MOVWF PORTA
       goto Loop
;===Co0 - line2 [17]===
       BTFSC PORTC, 2
       goto $+6
       MOVLW b'00010000' ;Запись 1
       MOVWF PORTB
       MOVLW b'00011100' ;Запись 7
       MOVWF PORTA
       goto  Loop
;===Co0 - line3 [25]===
       BTFSC PORTC, 3
       goto $+6
       MOVLW b'00100000' ;Запись 2
       MOVWF PORTB
       MOVLW b'00010100' ;Запись 5
       MOVWF PORTA
       goto  Loop
;===Co0 - line4 [33]===
       BTFSC PORTC, 4
       goto $+6
       MOVLW b'00110000' ;Запись 3
       MOVWF PORTB
       MOVLW b'00001100' ;Запись 3
       MOVWF PORTA
       goto  Loop
;===Co0 - line5 [41]===
       BTFSC PORTC, 5
       goto $+6
       MOVLW b'01000000' ;Запись 4
       MOVWF PORTB
       MOVLW b'00000100' ;Запись 1
       MOVWF PORTA
       goto  Loop
;===Co0 - line6 [49]===
       BTFSC PORTC, 6
       goto $+6
       MOVLW b'01000000' ;Запись 4
       MOVWF PORTB
       MOVLW b'00100100' ;Запись 9
       MOVWF PORTA
       goto  Loop
;===Co0 - line7 [57]===
       BTFSC PORTC, 7
       goto co1
       MOVLW b'01010000' ;Запись 5
       MOVWF PORTB
       MOVLW b'00011100' ;Запись 7
       MOVWF PORTA
       goto  Loop
;============================================================================== 
co1    RLF PORTD ;Сдвиг в PORTD для опроса первого столбца
;===Co1 - line0 [2]===       
       BTFSC PORTC, 0 ;если 1, то выполняется переход на следующую строку
       goto $+6
       MOVLW b'00000000' ;Запись 0
       MOVWF PORTB
       MOVLW b'00001000' ;Запись 2
       MOVWF PORTA
       goto Loop
;===Co1 - line1 [10]===     
       BTFSC PORTC, 1
       goto $+6
       MOVLW b'00010000' ;Запись 1
       MOVWF PORTB
       MOVLW b'00000000' ;Запись 0
       MOVWF PORTA
       goto Loop
;===Co1 - line2 [18]===
       BTFSC PORTC, 2
       goto $+6
       MOVLW b'00010000' ;Запись 1
       MOVWF PORTB
       MOVLW b'00100000' ;Запись 8
       MOVWF PORTA
       goto  Loop
;===Co1 - line3 [26]===
       BTFSC PORTC, 3
       goto $+6
       MOVLW b'00100000' ;Запись 2
       MOVWF PORTB
       MOVLW b'00011000' ;Запись 6
       MOVWF PORTA
       goto  Loop
;===Co1 - line4 [34]===
       BTFSC PORTC, 4
       goto $+6
       MOVLW b'00110000' ;Запись 3
       MOVWF PORTB
       MOVLW b'00010000' ;Запись 4
       MOVWF PORTA
       goto  Loop
;===Co1 - line5 [42]===
       BTFSC PORTC, 5
       goto $+6
       MOVLW b'01000000' ;Запись 4
       MOVWF PORTB
       MOVLW b'00001000' ;Запись 2
       MOVWF PORTA
       goto  Loop
;===Co1 - line6 [50]===
       BTFSC PORTC, 6
       goto $+6
       MOVLW b'01010000' ;Запись 5
       MOVWF PORTB
       MOVLW b'00000000' ;Запись 0
       MOVWF PORTA
       goto  Loop
;===Co1 - line7 [58]===
       BTFSC PORTC, 7
       goto co2
       MOVLW b'01010000' ;Запись 5
       MOVWF PORTB
       MOVLW b'00100000' ;Запись 8
       MOVWF PORTA
       goto  Loop
;==============================================================================  
co2  RLF PORTD ;Сдвиг в PORTD для опроса второго столбца
;===Co2 - line0 [3]===       
       BTFSC PORTC, 0 ;если 1, то выполняется переход на следующую строку
       goto $+6
       MOVLW b'00000000' ;Запись 0
       MOVWF PORTB
       MOVLW b'00001100' ;Запись 3
       MOVWF PORTA
       goto Loop
;===Co2 - line1 [11]===     
       BTFSC PORTC, 1
       goto $+6
       MOVLW b'00010000' ;Запись 1
       MOVWF PORTB
       MOVLW b'00000100' ;Запись 1
       MOVWF PORTA
       goto Loop
;===Co2 - line2 [19]===
       BTFSC PORTC, 2
       goto $+6
       MOVLW b'00010000' ;Запись 1
       MOVWF PORTB
       MOVLW b'00100100' ;Запись 9
       MOVWF PORTA
       goto  Loop
;===Co2 - line3 [27]===
       BTFSC PORTC, 3
       goto $+6
       MOVLW b'00100000' ;Запись 2
       MOVWF PORTB
       MOVLW b'00011100' ;Запись 7
       MOVWF PORTA
       goto  Loop
;===Co2 - line4 [35]===
       BTFSC PORTC, 4
       goto $+6
       MOVLW b'00110000' ;Запись 3
       MOVWF PORTB
       MOVLW b'00010100' ;Запись 5
       MOVWF PORTA
       goto  Loop
;===Co2 - line5 [43]===
       BTFSC PORTC, 5
       goto $+6
       MOVLW b'01000000' ;Запись 4
       MOVWF PORTB
       MOVLW b'00001100' ;Запись 3
       MOVWF PORTA
       goto  Loop
;===Co2 - line6 [51]===
       BTFSC PORTC, 6
       goto $+6
       MOVLW b'01010000' ;Запись 5
       MOVWF PORTB
       MOVLW b'00000100' ;Запись 1
       MOVWF PORTA
       goto  Loop
;===Co2 - line7 [59]===
       BTFSC PORTC, 7
       goto co3
       MOVLW b'01010000' ;Запись 5
       MOVWF PORTB
       MOVLW b'00100100' ;Запись 9
       MOVWF PORTA
       goto  Loop
;==============================================================================
co3  RLF PORTD ;Сдвиг в PORTD для опроса третьего столбца
;===Co3 - line0 [4]===       
       BTFSC PORTC, 0 ;если 1, то выполняется переход на следующую строку
       goto $+6
       MOVLW b'00000000' ;Запись 0
       MOVWF PORTB
       MOVLW b'00010000' ;Запись 4
       MOVWF PORTA
       goto Loop
;===Co3 - line1 [12]===     
       BTFSC PORTC, 1
       goto $+6
       MOVLW b'00010000' ;Запись 1
       MOVWF PORTB
       MOVLW b'00001000' ;Запись 2
       MOVWF PORTA
       goto Loop
;===Co3 - line2 [20]===
       BTFSC PORTC, 2
       goto $+6
       MOVLW b'00100000' ;Запись 2
       MOVWF PORTB
       MOVLW b'00000000' ;Запись 0
       MOVWF PORTA
       goto  Loop
;===Co3 - line3 [28]===
       BTFSC PORTC, 3
       goto $+6
       MOVLW b'00100000' ;Запись 2
       MOVWF PORTB
       MOVLW b'00100000' ;Запись 8
       MOVWF PORTA
       goto  Loop
;===Co3 - line4 [36]===
       BTFSC PORTC, 4
       goto $+6
       MOVLW b'00110000' ;Запись 3
       MOVWF PORTB
       MOVLW b'00011000' ;Запись 6
       MOVWF PORTA
       goto  Loop
;===Co3 - line5 [44]===
       BTFSC PORTC, 5
       goto $+6
       MOVLW b'01000000' ;Запись 4
       MOVWF PORTB
       MOVLW b'00010000' ;Запись 4
       MOVWF PORTA
       goto  Loop
;===Co3 - line6 [52]===
       BTFSC PORTC, 6
       goto $+6
       MOVLW b'01010000' ;Запись 5
       MOVWF PORTB
       MOVLW b'00001000' ;Запись 2
       MOVWF PORTA
       goto  Loop
;===Co3 - line7 [60]===
       BTFSC PORTC, 7
       goto co4
       MOVLW b'01100000' ;Запись 6
       MOVWF PORTB
       MOVLW b'00000000' ;Запись 0
       MOVWF PORTA
       goto  Loop

Добавлено (13.11.2023, 03:52)
---------------------------------------------
;==============================================================================
co4  RLF PORTD ;Сдвиг в PORTD для опроса четвертого столбца
;===Co4 - line0 [5]===       
       BTFSC PORTC, 0 ;если 1, то выполняется переход на следующую строку
       goto $+6
       MOVLW b'00000000' ;Запись 0
       MOVWF PORTB
       MOVLW b'00010100' ;Запись 5
       MOVWF PORTA
       goto Loop
;===Co4 - line1 [13]===     
       BTFSC PORTC, 1
       goto $+6
       MOVLW b'00010000' ;Запись 1
       MOVWF PORTB
       MOVLW b'00001100' ;Запись 3
       MOVWF PORTA
       goto Loop
;===Co4 - line2 [21]===
       BTFSC PORTC, 2
       goto $+6
       MOVLW b'00100000' ;Запись 2
       MOVWF PORTB
       MOVLW b'00000100' ;Запись 1
       MOVWF PORTA
       goto  Loop
;===Co4 - line3 [29]===
       BTFSC PORTC, 3
       goto $+6
       MOVLW b'00100000' ;Запись 2
       MOVWF PORTB
       MOVLW b'00100100' ;Запись 9
       MOVWF PORTA
       goto  Loop
;===Co4 - line4 [37]===
       BTFSC PORTC, 4
       goto $+6
       MOVLW b'00110000' ;Запись 3
       MOVWF PORTB
       MOVLW b'00011100' ;Запись 7
       MOVWF PORTA
       goto  Loop
;===Co4 - line5 [45]===
       BTFSC PORTC, 5
       goto $+6
       MOVLW b'01000000' ;Запись 4
       MOVWF PORTB
       MOVLW b'00010100' ;Запись 5
       MOVWF PORTA
       goto  Loop
;===Co4 - line6 [53]===
       BTFSC PORTC, 6
       goto $+6
       MOVLW b'01010000' ;Запись 5
       MOVWF PORTB
       MOVLW b'00001100' ;Запись 3
       MOVWF PORTA
       goto  Loop
;===Co4 - line7 [61]===
       BTFSC PORTC, 7
       goto co5
       MOVLW b'01100000' ;Запись 6
       MOVWF PORTB
       MOVLW b'00000100' ;Запись 1
       MOVWF PORTA
       goto  Loop
;==============================================================================
co5  RLF PORTD ;Сдвиг в PORTD для опроса пятого столбца
;===Co5 - line0 [6]===       
       BTFSC PORTC, 0 ;если 1, то выполняется переход на следующую строку
       goto $+6
       MOVLW b'00000000' ;Запись 0
       MOVWF PORTB
       MOVLW b'00011000' ;Запись 6
       MOVWF PORTA
       goto Loop
;===Co5 - line1 [14]===     
       BTFSC PORTC, 1
       goto $+6
       MOVLW b'00010000' ;Запись 1
       MOVWF PORTB
       MOVLW b'00010000' ;Запись 4
       MOVWF PORTA
       goto Loop
;===Co5 - line2 [22]===
       BTFSC PORTC, 2
       goto $+6
       MOVLW b'00100000' ;Запись 2
       MOVWF PORTB
       MOVLW b'00001000' ;Запись 2
       MOVWF PORTA
       goto  Loop
;===Co5 - line3 [30]===
       BTFSC PORTC, 3
       goto $+6
       MOVLW b'00110000' ;Запись 3
       MOVWF PORTB
       MOVLW b'00000000' ;Запись 0
       MOVWF PORTA
       goto  Loop
;===Co5 - line4 [38]===
       BTFSC PORTC, 4
       goto $+6
       MOVLW b'00110000' ;Запись 3
       MOVWF PORTB
       MOVLW b'00100000' ;Запись 8
       MOVWF PORTA
       goto  Loop
;===Co5 - line5 [46]===
       BTFSC PORTC, 5
       goto $+6
       MOVLW b'01000000' ;Запись 4
       MOVWF PORTB
       MOVLW b'00011000' ;Запись 6
       MOVWF PORTA
       goto  Loop
;===Co5 - line6 [54]===
       BTFSC PORTC, 6
       goto $+6
       MOVLW b'01010000' ;Запись 5
       MOVWF PORTB
       MOVLW b'00010000' ;Запись 4
       MOVWF PORTA
       goto  Loop
;===Co5 - line7 [62]===
       BTFSC PORTC, 7
       goto co6
       MOVLW b'01100000' ;Запись 6
       MOVWF PORTB
       MOVLW b'00001000' ;Запись 2
       MOVWF PORTA
       goto  Loop
;==============================================================================
co6  RLF PORTD ;Сдвиг в PORTD для опроса шестого столбца
;===Co6 - line0 [7]===       
       BTFSC PORTC, 0 ;если 1, то выполняется переход на следующую строку
       goto $+6
       MOVLW b'00000000' ;Запись 0
       MOVWF PORTB
       MOVLW b'00011100' ;Запись 7
       MOVWF PORTA
       goto Loop
;===Co6 - line1 [15]===     
       BTFSC PORTC, 1
       goto $+6
       MOVLW b'00010000' ;Запись 1
       MOVWF PORTB
       MOVLW b'00010100' ;Запись 5
       MOVWF PORTA
       goto Loop
;===Co6 - line2 [23]===
       BTFSC PORTC, 2
       goto $+6
       MOVLW b'00100000' ;Запись 2
       MOVWF PORTB
       MOVLW b'00001100' ;Запись 3
       MOVWF PORTA
       goto  Loop
;===Co6 - line3 [31]===
       BTFSC PORTC, 3
       goto $+6
       MOVLW b'00110000' ;Запись 3
       MOVWF PORTB
       MOVLW b'00000100' ;Запись 1
       MOVWF PORTA
       goto  Loop
;===Co6 - line4 [39]===
       BTFSC PORTC, 4
       goto $+6
       MOVLW b'00110000' ;Запись 3
       MOVWF PORTB
       MOVLW b'00100100' ;Запись 9
       MOVWF PORTA
       goto  Loop
;===Co6 - line5 [47]===
       BTFSC PORTC, 5
       goto $+6
       MOVLW b'01000000' ;Запись 4
       MOVWF PORTB
       MOVLW b'00011100' ;Запись 7
       MOVWF PORTA
       goto  Loop
;===Co6 - line6 [55]===
       BTFSC PORTC, 6
       goto $+6
       MOVLW b'01010000' ;Запись 5
       MOVWF PORTB
       MOVLW b'00010100' ;Запись 5
       MOVWF PORTA
       goto  Loop
;===Co6 - line7 [63]===
       BTFSC PORTC, 7
       goto co7
       MOVLW b'01100000' ;Запись 6
       MOVWF PORTB
       MOVLW b'00001100' ;Запись 3
       MOVWF PORTA
       goto  Loop
;==============================================================================
co7  RLF PORTD ;Сдвиг в PORTD для опроса седьмого столбца
;===Co7 - line0 [8]===       
       BTFSC PORTC, 0 ;если 1, то выполняется переход на следующую строку
       goto $+6
       MOVLW b'00000000' ;Запись 0
       MOVWF PORTB
       MOVLW b'00100000' ;Запись 8
       MOVWF PORTA
       goto Loop
;===Co7 - line1 [16]===     
       BTFSC PORTC, 1
       goto $+6
       MOVLW b'00010000' ;Запись 1
       MOVWF PORTB
       MOVLW b'00011000' ;Запись 6
       MOVWF PORTA
       goto Loop
;===Co7 - line2 [24]===
       BTFSC PORTC, 2
       goto $+6
       MOVLW b'00100000' ;Запись 2
       MOVWF PORTB
       MOVLW b'00010000' ;Запись 4
       MOVWF PORTA
       goto  Loop
;===Co7 - line3 [32]===
       BTFSC PORTC, 3
       goto $+6
       MOVLW b'00110000' ;Запись 3
       MOVWF PORTB
       MOVLW b'00001000' ;Запись 2
       MOVWF PORTA
       goto  Loop
;===Co7 - line4 [40]===
       BTFSC PORTC, 4
       goto $+6
       MOVLW b'01000000' ;Запись 4
       MOVWF PORTB
       MOVLW b'00000000' ;Запись 0
       MOVWF PORTA
       goto  Loop
;===Co7 - line5 [48]===
       BTFSC PORTC, 5
       goto $+6
       MOVLW b'01000000' ;Запись 4
       MOVWF PORTB
       MOVLW b'00100000' ;Запись 8
       MOVWF PORTA
       goto  Loop
;===Co7 - line6 [56]===
       BTFSC PORTC, 6
       goto $+6
       MOVLW b'01010000' ;Запись 5
       MOVWF PORTB
       MOVLW b'00011000' ;Запись 6
       MOVWF PORTA
       goto  Loop
;===Co7 - line7 [64]===
       BTFSC PORTC, 7
       goto Loop
       MOVLW b'01100000' ;Запись 6
       MOVWF PORTB
       MOVLW b'00010000' ;Запись 4
       MOVWF PORTA
       goto  Loop
;==============================================================================       
       END

Прикрепления: 2919520.png (97.6 Kb)
xvovanx Дата: Пн, 13.11.2023, 19:25  |                                                                                                                Сообщение # 4
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 326
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Как бы я в ассемблере не силен однако, тут на форуме больше как то Протоном да Пик Бейсиком балуемся  wink
vladka9911 Дата: Вт, 14.11.2023, 05:42  |                                                                                                                Сообщение # 5
Группа: Пользователи
Ранг:  Новенький
Сообщений: 6
Репутация: 0   ±
Замечания:   ±
На сайте с 12.11.2023

Статус: Offline

Цитата xvovanx ()
Как бы я в ассемблере не силен однако, тут на форуме больше как то Протоном да Пик Бейсиком балуемся
  Хотя бы суть понять как это должно работать) 
xvovanx Дата: Вт, 14.11.2023, 19:02  |                                                                                                                Сообщение # 6
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 326
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата vladka9911 ()
Хотя бы суть понять как это должно работать)

скачай любую программу на форуме с опросом кнопок или клавиатуры, если не понял то как я описал работу клавиатуры
Прикрепления: 3514328.png (28.9 Kb) · 7345904.png (78.0 Kb)

Сообщение отредактировал xvovanx - Вт, 14.11.2023, 19:23
Форум Picbasic.ru » Скорая помощь начинающим » Помощь в вопросах программирования » Внешнее прерывание при опросе клавиатуры МК PIC16f877 (Внешнее прерывание через RB0)
  • Страница 1 из 1
  • 1
Поиск: