Pic16f630: Кодовый замок

Здравствуйте, давайте создадим кодовый замок, на котором, чтобы зажечь светодиод (открыть затворку/замок) нужно зажать две кнопки одновременно (количество и расположение кнопок можно поменять в коде). Программировать будем на ассемблере.

Код на ассемблере asm:

#include <P16F630.INC>
 __CONFIG (_MCLRE_OFF & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT)  ;Internal osc.

c1 equ 20
c2 equ 21
 Reg_1 equ 22
Reg_2 equ 23
Reg_3 equ 24
 org 0


Start
 BSF   STATUS,RP0  ; select bank 0
 movlw b'00111111'
 movwf TRISA
 CLRF  TRISC       ; make PORTC pins all output
 BCF   STATUS,RP0  ; select bank 0
 movlw b'00000000'
 movwf  PORTC       ; set portc pins equal to 0

loop
 
movlw b'00000011'
movwf PORTC
goto game
goto loop

game
btfsc PORTA,RA5
goto loop         
goto game1    


game1
btfsc PORTA,RA4
goto game2
goto loop



game2
btfsc PORTA,RA0
goto game3



game3
btfsc PORTA,RA1
goto game4


game4
btfsc PORTA,RA2
goto game5


game5
btfsc PORTA,RA3
goto game6


game6
movlw b'00111111'
movwf PORTC
call delay10000
call delay10000
call delay10000
call delay10000
call delay10000
call delay10000
call delay10000
goto loop

delay10000
       movlw       0x173
       movwf       Reg_1
       movlw       0x19
       movwf       Reg_2
       movlw       0x6
       movwf       Reg_3
wr          
       decfsz      Reg_1, 1
       goto        wr
       decfsz      Reg_2, 1
       goto        wr
       decfsz      Reg_3, 1
       goto        wr
       nop
return
end

Чтобы зажечь светодиод нужно нажать две кнопки одновременно (расположенных на ножках RA5 и RA6 микроконтроллера pic16f630), при этом остальные кнопки не должны нажиматься (расположенные на RA0, RA1, RA2, RA3)

Схема соединения кнопок:

Светодиод в коде подключил на ножки RB0 или RB1 (movlw b’00000011′):

Добавить комментарий