ПП дин. индикации 7-сиг. индикатора (1порт, до 4 знаков).

Автор: Super User Просмотров: 2401

 

Данные для индикации записываются в регистры Ind_1- 4 .

 

 

alt

 

Синим цветом выделена сама ПП, остальное для демонстрации примера.

 

 

;-------- Прописка регистров --------
            Cblock
            Temp                    ;
            Temp_1
            Bit2_10
            Sdvig_1                 ;
            Reg_1
            Reg_2
            Reg_3
            Ind_1
            Ind_2
            Ind_3
            Ind_4
            Led_U                  ; верхний байт результата.
            Led_H                  ; старший байт результата.
            Led_L                  ; младший байт результата.
            endc
;---------------Присвоение------------
;-------------------------------------           
            org                   0 ;
            nop                     ;
            goto             START  ;
;----------------------------------------
;добавляем в программу вектор прерывания
;----------------------------------------
            org                 08h ; H вектор прерывания
            rrncf           Sdvig_1 ; Сдвиг регистра
            btfsc         Sdvig_1,0 ; Бит 0 установлен ?
            bra           IND_Led_1 ; Да. Вызов ПП
            btfsc         Sdvig_1,1 ; Бит 1 установлен ?
            bra           IND_Led_2 ; Да. Вызов ПП
            btfsc         Sdvig_1,2 ; Бит 2 установлен ?
            bra           IND_Led_3 ; Да. Вызов ПП
            btfsc         Sdvig_1,3 ; Бит 3 установлен ?
            bra           IND_Led_4 ; Да. Вызов ПП

OUT_pr      clrf              PORTC ; Очистка порта
            movwf              LATC ; Запись значения+выбранный индикатор
            bcf            INTCON,2 ; сброс флага TMR0
            RETFIE 1                ; выход из прерывания с восст.

IND_Led_1   movlw               80h ; Включаем 1 индикатор
            xorwf           Ind_1,0 ; Добавляем значение 0-9
            bra              OUT_pr ; Переход 

IND_Led_2   movlw               40h ; Включаем 2 индикатор
            xorwf           Ind_2,0 ; Добавляем значение 0-9
            bra              OUT_pr ; Переход 

IND_Led_3   movlw               20h ; Включаем 3 индикатор
            xorwf           Ind_3,0 ; Добавляем значение 0-9
            bra              OUT_pr ; Переход 

IND_Led_4   movlw               10h ; Включаем 4 индикатор
            xorwf           Ind_4,0 ; Добавляем значение 0-9
            bra              OUT_pr ; Переход 
;---------------Инициализация--------
 START      clrf              TRISC ; порт  на выход
            movlw       b'11000101' ; настройка ТMR0
            movwf             T0CON ;
            movlw       b'11100000' ; = разрешаем глоб.прерывания +периферия+
            movwf            INTCON ; переполнению TMR0+ сброс флага TMR0=
            clrf               Temp ;
            movlw               11h ;
            movwf           Sdvig_1 ;
            movlw                .0 ;
            movwf             Ind_4 ;
;----------------------------------------
; Основная часть программы.
;----------------------------------------
 SSS        incf             Temp_1 ;       
            movff    Temp_1,Bit2_10 ;
            call            BIN2_10 ;
            bra             Delya_1 ;
            bra                 SSS ;

;----------------------------------------
;ПП преобразования однобайтного двоичного
; числа в трёхзначное десятичное число
;----------------------------------------
BIN2_10     bcf           INTCON,5 ;
            clrf             Led_U ; Очистить верхний байт
            clrf             Led_H ; Очистить старший байт
            clrf             Led_L ; Очистить младший байт
            incf             Led_U ; +1
            movlw              9Ch ; Отнимаем .100
            addwf          Bit2_10 ;
            bc                $-.6 ; Продолжаем отнимать.
            decf             Led_U ; Коррекция
            movlw             .100 ; Выделяем остаток десятков..
            addwf          Bit2_10 ;
            incf             Led_H ; +1
            movlw             0F6h ; Отнимаем .10
            addwf          Bit2_10 ;
            bc                $-.6 ; Продолжаем отнимать.
            decf             Led_H ; Коррекция
            movlw              .10 ; Выделяем остаток единиц.
            addwf          Bit2_10 ;
            movff    Bit2_10,Led_L ; Загружаем остаток в единицы.
            movff      Led_L,Ind_1 ; 
            movff      Led_H,Ind_2 ;
            movff      Led_U,Ind_3 ;
            bsf           INTCON,5 ;
            return                 ; Возврат из ПП.


Delya_1     movlw       .73
            movwf       Reg_1
            movlw       .10
            movwf       Reg_2
            movlw       .4
            movwf       Reg_3
            decfsz      Reg_1
            bra         $-2
            decfsz      Reg_2
            bra         $-6
            decfsz      Reg_3
            bra         $-.10
            return

 

 

Скачать проект MPLAB+Протеус.


Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru