Примитивная охранная система - Микроконтроллеры
Формулировка задачи:
Задание дали. Спроектировать "охранную систему" на основе pic18f4520.
Текст самого задания: "MPLAB ругался на каждую строку, пришлось писать лесенкой.
Буду очень благодарен за любую помощь.
После нажатия кнопки START система переходит в состояние «включено». И каждые 5 с мигает светодиодом.При получении сигнала от любого датчика включает оповещение Датчики при срабатывании выдают высокий логический уровень. Оповещение включается при получении кода 0xFF в восьмиразрядный регистр.
" Схему вроде сделал. С прошивкой беда. Пока что получились только мигания светодиодом. Схема: И то, что смог написать:title "progBegin" ; LIST P=18F4520 #include <P18F4520.INC> Config OSC = HSPLL,WDT = OFF,LVP = OFF,MCLRE = ON,PBADEN = OFF; Reg_1 equ 0x70; Reg_2 equ 0x80; Reg_3 equ 0x90; Reg_4 equ 0x100; org 0x00 ; Вектор сброса goto Main org 0x08 bra HighInt ;переход к коду обработки высокоприоритетных прерываний Delay1: ;Delay for 5 seconds movlw .223 movwf Reg_1 movlw .187 movwf Reg_2 movlw .51 movwf Reg_3 decfsz Reg_1 bra $-2 decfsz Reg_2 bra $-6 decfsz Reg_3 bra $-.10 nop nop retfie FAST Delay2: ; Delay for 1 minutes movlw .142 movwf Reg_1 movlw .195 movwf Reg_2 movlw .97 movwf Reg_3 movlw .3 movwf Reg_4 decfsz Reg_1 bra $-2 decfsz Reg_2 bra $-6 decfsz Reg_3 bra $-.10 decfsz Reg_4 bra $-.14 nop retfie FAST ALARM: SETF PORTD ; Alarm is on GOTO HighInt2 ; Wait 1 minute GOTO HighInt2 ; Still waiting... CLRF PORTD ; Alarm is off Main: BSF PORTE,0 GOTO HighInt BCF PORTE,0 GOTO HighInt GOTO Main END
Решение задачи: «Примитивная охранная система»
textual
Листинг программы
LIST P=18F4520 ;директива определяющая целевой микроконтроллер #include <P18F4520.INC> ;подключается файл с описанием специфических ;***************************************************************************** ;Конфигурационные биты, определяющие параметры микроконтроллера CONFIG OSC = LP ;LP ;***************************************************************************** ;Объявление переменных Reg_1 equ 0x70 ;регистры Reg_2 equ 0x80 ;для Reg_3 equ 0x90 ;организации Reg_4 equ 0x100 ;задержки start equ 0x60 ;регистр, используемый при организации состояния «включено» ;***************************************************************************** ;Вектор сброса ORG 0x0000 goto Main ;переход к началу основного кода ;***************************************************************************** ;Вектор высокоприоритетного прерывания ORG 0x0008 bra HighInt ;переход к коду обработки высокоприоритетных ;***************************************************************************** ;Вектор низкоприоритетного прерывания. Произойдет при подаче питания на RB1 ORG 0x0018 BSF start,0 ;Set the first bit of the "start" register BCF INTCON,INT1IF ;cleaning int1if retfie FAST ;***************************************************************************** ;Обработка высокоприоритетного прерывания HighInt: BCF INTCON,INT0IF ;reset request from the timer 0 BCF INTCON,INT0IE ;Interrupts are prohibited CLRF PORTB ; clear PORTB. Clear signals from sensors SETF PORTD ; Set all bits of PORTD. Alarm is on GOTO Delay2 ; Wait 1 minute GOTO Delay2 ; Still waiting... CLRF PORTD ;Clear all bits of PORTE Alarm is off retfie FAST ;***************************************************************************** ;Код основной программы Main: ;;;в этом цикле происходит настройка прерываний и принятие прерывания с ножки RB1 BSF RCON,IPEN ;include interruption (bit 7) CLRF INTCON ;clean register of global settings interruption BCF INTCON3,INT1IP ;interrupt INT1 (RB1) has the lowest priority BSF INTCON3,INT1IE ;permit interrupt Int1. Button BSF INTCON, INT0IE ;permit interrupt Int0. Sensors BSF INTCON,GIEH ;include high-priority interrupt (bit 7) BSF INTCON,GIEL ;include low-priority interrupt (бит 6) CLRF TRISE ;PORTE set up to transfer BTFSS start,0 ;bit is set? GOTO Main; loop: ;;;здесь толко включение\отключение светодиода и вызов задержки BTG PORTE,0 ;invert first bit of PORTE. Turn on\turn off LED CALL Delay1 ;wait 5 seconds GOTO loop ; Delay1: ;Delay for 5 seconds movlw .223 movwf Reg_1 movlw .187 movwf Reg_2 movlw .51 movwf Reg_3 decfsz Reg_1 bra $-2 decfsz Reg_2 bra $-6 decfsz Reg_3 bra $-.10 nop nop return Delay2: ; Delay for 1 minutes movlw .142 movwf Reg_1 movlw .195 movwf Reg_2 movlw .97 movwf Reg_3 movlw .3 movwf Reg_4 decfsz Reg_1 bra $-2 decfsz Reg_2 bra $-6 decfsz Reg_3 bra $-.10 decfsz Reg_4 bra $-.14 nop return END
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д