Примитивная охранная система - Микроконтроллеры

Узнай цену своей работы

Формулировка задачи:

Задание дали. Спроектировать "охранную систему" на основе pic18f4520. Текст самого задания: "

После нажатия кнопки 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
MPLAB ругался на каждую строку, пришлось писать лесенкой. Буду очень благодарен за любую помощь.

Решение задачи: «Примитивная охранная система»

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы