Понеділок, 20.11.2017, 23:44
Приветствую Вас Гість | RSS

Radiomanoff+

Меню сайта
Форма входа
Календарь
«  Листопад 2017  »
ПнВтСрЧтПтСбНд
  12345
6789101112
13141516171819
20212223242526
27282930

Исходник к пректу "Бегущие огни на PIC16F84A"

Исходник к пректу "Бегущие огни":

;***********************************************************************************************
; Ogni3.asm
; Бегущие огни.Версия 3 (4 ефекта).
; PIC16F84A      Кварц 4 мГц.
;===============================================================================================
            LIST        p=16F84A    ; Установка типа микроконтроллера.
            __CONFIG    03FF1H      ; Бит защиты выключен, WDT выключен, 
                                    ; стандартный XT - генератор.
;===============================================================================================
; Определение  положения  регистров  специального  назначения.
;===============================================================================================
Status      equ         03h         ; Регистр выбора банка.
TrisB       equ         06h         ; Регистр выбора направления работы выводов порта В.
PortB       equ         06h         ; Регистр управления защелками порта В.
IntCon      equ         0Bh         ; Регистр IntCon 
;===============================================================================================
; Определение  названия  и  положения  регистров  общего  назначения.
;===============================================================================================
SecH        equ         0Dh         ; Старший байт таймера.
SecL        equ         0Eh         ; Младший байт таймера.
Por         equ         0Ch         ; Для записи константы на погашение PortB.
Col         equ         0Fh         ; Для записи количества проходов одного ефекта.

;===============================================================================================
            org         0           ; Начать выполнение программы с адреса 0 PC.
            goto        Start       ; Переход в ПП Start.

;***********************************************************************************************
;                          Текст рабочей части программы.
;***********************************************************************************************


;------------------------------------------------------------------------------------------------
; Установка направления работы RB0 - на выход.
;-----------------------------------------------------------------------------------------------
Start       clrf        IntCon      ; Запретить все прерывания.
            bsf         Status,5    ; Перейти в 1-й банк (установить в 1 5-й бит
                                    ; регистра Status).
            movlw       .0          ; Записать константу .0 в аккумулятор (W).
            movwf       TrisB       ; Скопировать .0 из W в регистр TrisB.
                                    ; Весь PortВ установлен на выход

            bcf         Status,5    ; Перейти в 0-й банк (установить в 0 5-й бит
                                    ; регистра Status).
;-----------------------------------------------------------------------------------------------
; Установка всего PortaB в единицу
;-----------------------------------------------------------------------------------------------
            movlw       .255        ; Записать в регистр W константу .255
            movwf       Por         ; Скопировать .255 из W в регистр Por.

;-----------------------------------------------------------------------------------------------
; Определение количества проходов одного ефекта (закладка константы в регистр Сol).
;-----------------------------------------------------------------------------------------------
            movlw       .5          ; Записать в регистр W константу .5
            movwf       Col         ; Скопировать .5 из W в регистр Col. 
                                    ; Установка количества проходов ефекта.
;-----------------------------------------------------------------------------------------------
; Формирование на выводе RB0 единичного уровня(вкл.1-ий светодиод).
;-----------------------------------------------------------------------------------------------
Efect_1     bcf         PortB,0     ; Установить на выходе защелки RB0 ноль.

            call        INT         ; Условный переход в ПП INT.
;-----------------------------------------------------------------------------------------------
; Формирование на выводе RB1 нулевого уровня(вкл.2-го светодиода).
;-----------------------------------------------------------------------------------------------
            bsf         PortB,0     ; Установить на выходе защелки RB0 единицу.
            bcf         PortB,1     ; Установить на выходе защелки RB1 ноль.

            call        INT         ; Условный переход в ПП INT.
;-----------------------------------------------------------------------------------------------
; Формирование на выводе RB2 нулевого уровня(вкл.3-го светодиода).
;-----------------------------------------------------------------------------------------------
            bsf         PortB,1     ; Установить на выходе защелки RB1 единицу.
            bcf         PortB,2     ; Установить на выходе защелки RB2 ноль.

            call        INT         ; Условный переход в ПП INT. 
;-----------------------------------------------------------------------------------------------
; Формирование на выводе RB3 нулевого уровня(вкл.4-го светодиода).
;-----------------------------------------------------------------------------------------------
            bsf         PortB,2     ; Установить на выходе защелки RB2 единицу.
            bcf         PortB,3     ; Установить на выходе защелки RB3 ноль.

            call        INT         ; Условный переход в ПП INT.
;-----------------------------------------------------------------------------------------------
; Формирование на выводе RB4 нулевого уровня(вкл.5-го светодиода).
;-----------------------------------------------------------------------------------------------
            bsf         PortB,3     ; Установить на выходе защелки RB3 единицу.
            bcf         PortB,4     ; Установить на выходе защелки RB4 ноль.

            call        INT         ; Условный переход в ПП INT. 
;-----------------------------------------------------------------------------------------------
; Формирование на выводе RB5 нулевого уровня(вкл.6-го светодиода).
;-----------------------------------------------------------------------------------------------
            bsf         PortB,4     ; Установить на выходе защелки RB4 единицу.
            bcf         PortB,5     ; Установить на выходе защелки RB5 ноль.

            call        INT         ; Условный переход в ПП INT. 
;-----------------------------------------------------------------------------------------------
; Формирование на выводе RB6 нулевого уровня(вкл.7-го светодиода).
;-----------------------------------------------------------------------------------------------
            bsf         PortB,5     ; Установить на выходе защелки RB5 единицу.
            bcf         PortB,6     ; Установить на выходе защелки RB6 ноль.

            call        INT         ; Условный переход в ПП INT. 
;-----------------------------------------------------------------------------------------------
; Формирование на выводе RB7 нулевого уровня(вкл.8-го светодиода).
;-----------------------------------------------------------------------------------------------
            bsf         PortB,6     ; Установить на выходе защелки RB6 единицу.
            bcf         PortB,7     ; Установить на выходе защелки RB7 ноль.

            call        INT         ; Условный переход в ПП INT.

            bsf         PortB,7     ; Установить на выходе защелки RB7 единицу.
;----------------------------------------------------------------------------------------------
; Установка количества проходов ефекта
;----------------------------------------------------------------------------------------------            
            decfsz      Col,F       ; Декремент содержимого регистра Col с помещением резуль-
                                    ; тата декремента в этот же регистр.
  
            goto        Efect_1     ; Если этот результат не=0, то осуществляется переход
                                    ; в ПП Efect_1 ("закольцовка" в этой ПП).
                                    ; Если =0, то программа исполняется далее. 
            
;----------------------------------------------------------------------------------------------
; Второй ефект
;----------------------------------------------------------------------------------------------
            movlw       .5          ; Записать в регистр W константу .5
            movwf       Col         ; Скопировать .5 из W в регистр Col.

Efect_2     bcf         PortB,0     ; Установить на выходе защелки RB0 ноль.
            bcf         PortB,7     ; Установить на выходе защелки RB7 ноль.

            call        INT         ; Условный переход в ПП INT.

            bsf         PortB,0     ; Установить на выходе защелки RB0 единицу.
            bsf         PortB,7     ; Установить на выходе защелки RB7 единицу.
;------------------------------------------------------------------------------------------------
            bcf         PortB,1     ; Установить на выходе защелки RB1 ноль.
            bcf         PortB,6     ; Установить на выходе защелки RB6 ноль.

            call        INT         ; Условный переход в ПП INT.
 
            bsf         PortB,1     ; Установить на выходе защелки RB1 единицу.
            bsf         PortB,6     ; Установить на выходе защелки RB6 единицу.
;---------------------------------------------------------------------------------------------------
            bcf         PortB,2     ; Установить на выходе защелки RB2 ноль.
            bcf         PortB,5     ; Установить на выходе защелки RB5 ноль.

            call        INT         ; Условный переход в ПП INT.

            bsf         PortB,2     ; Установить на выходе защелки RB2 единицу.
            bsf         PortB,5     ; Установить на выходе защелки RB5 единицу.
;-----------------------------------------------------------------------------------------------
            bcf         PortB,3     ; Установить на выходе защелки RB3 ноль.
            bcf         PortB,4     ; Установить на выходе защелки RB4 ноль.

            call        INT         ; Условный переход в ПП INT.

            bsf         PortB,3     ; Установить на выходе защелки RB3 единицу.
            bsf         PortB,4     ; Установить на выходе защелки RB4 единицу.
;----------------------------------------------------------------------------------------------
; Установка количества проходов ефекта
;----------------------------------------------------------------------------------------------
            decfsz      Col,F       ; Декремент содержимого регистра Col с помещением резуль-
                                    ; тата декремента в этот же регистр.
  
            goto        Efect_2     ; Если этот результат не=0, то осуществляется переход
                                    ; в ПП Efect_2 ("закольцовка" в этой ПП).
                                    ; Если =0, то программа исполняется далее.
            call        INT         ; Условный переход в ПП INT.
;----------------------------------------------------------------------------------------------
; Третий ефект
;----------------------------------------------------------------------------------------------
            movlw       .5          ; Записать в регистр W константу .5
            movwf       Col         ; Скопировать .5 из W в регистр Col.

Efect_3     bcf         PortB,3     ; Установить на выходе защелки RB3 ноль.
            bcf         PortB,4     ; Установить на выходе защелки RB4 ноль.

            call        INT         ; Условный переход в ПП INT.

            bsf         PortB,3     ; Установить на выходе защелки RB3 единицу.
            bsf         PortB,4     ; Установить на выходе защелки RB4 единицу.
;----------------------------------------------------------------------------------------------
            bcf         PortB,2     ; Установить на выходе защелки RB2 ноль.
            bcf         PortB,5     ; Установить на выходе защелки RB5 ноль.

            call        INT         ; Условный переход в ПП INT.

            bsf         PortB,2     ; Установить на выходе защелки RB2 единицу.
            bsf         PortB,5     ; Установить на выходе защелки RB5 единицу.
;----------------------------------------------------------------------------------------------
            bcf         PortB,1     ; Установить на выходе защелки RB1 ноль.
            bcf         PortB,6     ; Установить на выходе защелки RB6 ноль.

            call        INT         ; Условный переход в ПП INT.
 
            bsf         PortB,1     ; Установить на выходе защелки RB1 единицу.
            bsf         PortB,6     ; Установить на выходе защелки RB6 единицу.
;----------------------------------------------------------------------------------------------
            bcf         PortB,0     ; Установить на выходе защелки RB0 ноль.
            bcf         PortB,7     ; Установить на выходе защелки RB7 ноль.

            call        INT         ; Условный переход в ПП INT.

            bsf         PortB,0     ; Установить на выходе защелки RB0 единицу.
            bsf         PortB,7     ; Установить на выходе защелки RB7 единицу.
;----------------------------------------------------------------------------------------------
; Установка количества проходов ефекта
;----------------------------------------------------------------------------------------------
            decfsz      Col,F       ; Декремент содержимого регистра Col с помещением резуль-
                                    ; тата декремента в этот же регистр.
  
            goto        Efect_3     ; Если этот результат не=0, то осуществляется переход
                                    ; в ПП Efect_3 ("закольцовка" в этой ПП).
                                    ; Если =0, то программа исполняется далее.

;----------------------------------------------------------------------------------------------            
            goto        Start       ; Переход на новый полный цикл программы.

;----------------------------------------------------------------------------------------------
;  ПП "Задержка вкл.светодиода".
;---------------------------------------------------------------------------------------------- 
INT         
        
  
            movlw       .254        ; Записать в регистр W константу .254
            movwf       SecH        ; Скопировать .254 из W в регистр Sec. 
            movlw       .100        ; Записать в регистр W константу .100
            movwf       SecL        ; Скопировать .100 из W в регистр Sec.

Pause_1     decfsz      SecL,F      ; Декремент содержимого регистра Sec с помещением резуль-
                                    ; тата декремента в этот же регистр.
 
            goto        Pause_1     ; Если этот результат не=0, то осуществляется переход
                                    ; в ПП Pause_1 ("закольцовка" в этой ПП).
                                    ; Если =0, то программа исполняется далее.
                                    
            decfsz      SecH,F      ; Декремент содержимого регистра Sec с помещением резуль-
                                    ; тата декремента в этот же регистр.
  
            goto        Pause_1     ; Если этот результат не=0, то осуществляется переход
                                    ; в ПП Pause_1 ("закольцовка" в этой ПП).
                                    ; Если =0, то программа исполняется далее.


;------------------------------------------------------------------------------------------------
            retfie


;***********************************************************************************************                        
            end                     ; Директива конца программы (всегда последняя снизу).

Архив записей
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0