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