Здравствуйте, давайте создадим кодовый замок, на котором, чтобы зажечь светодиод (открыть затворку/замок) нужно зажать две кнопки одновременно (количество и расположение кнопок можно поменять в коде). Программировать будем на ассемблере.
Код на ассемблере 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′):



