Lucrare de laborator №5 Denumirea lucrării: Programarea pinilor porturilor unui microcontroler ca intrări Scopul lucrării



Yüklə 182 Kb.
səhifə2/4
tarix24.03.2022
ölçüsü182 Kb.
#114955
1   2   3   4
lab8

Programul 1

list    p=16f877A   ; list directive to define processor

    include
    ; processor specific variable definitions

     __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF

  ;***** VARIABLE DEFINITIONS

w_temp      EQU 0x7D        ; variable used for context saving

status_temp EQU 0x7E        ; variable used for context saving

pclath_temp EQU 0x7F        ; variable used for context saving

;**********************************************************************

    cblock  0x20            ;start of general purpose registers

    d1              ;used in delay routine

    d2              ;used in delay routine

    endc

     ORG     0x000                   ; processor reset vector



    goto    main                    ; go to beginning of program

 main



    bsf     STATUS, RP0     ;selectare bank 1

    movlw   b'00001111'     ;incarcam registrul W cu valoarea b'00001111'

    movwf   TRISB           ;Transferam valoarea in port TRISB si setam PortB cu 4 inputs si 4 outputs

    bcf STATUS, RP0     ;selectare bank 0

    clrf    PORTB           ;facem toate iesirile in stare LOW

Loop

    call Delay

    btfss   PORTB,  0       ;Test bit 5 al PORTB. Skip following if Set.

    call    Sw1         ;Call subrutina Sw1

    btfss   PORTB,  1       ;Test bit 6 al PORTB. Skip following if Set.

    call    Sw2         ;Call subrutina Sw2

     goto    Loop            ;Go back to Loop



Sw1

    clrf    PORTB           ;Clear toti bitii portului. LED-urile OFF

    bsf PORTB,  4           ;Set bit0 registru PORTB si LED0 devine ON

    retlw   0x00            ;Return with constant (0x00) in registrul W

Sw2

    clrf    PORTB           ;Clear toti bitii portului. LED-urile OFF

    bsf PORTB,  5       ;Set bit1 registru PORTB si LED1 devine ON

    retlw   0x00            ;Return with constant (0x00) in registrul W

 Delay



    movlw       0x85        ;incarcam reg.d1 cu valoarea 0x85

    movwf       d1      ;se transfera valoarea 0x85 in registrul d1

    movlw       0x20        ;incarcam reg.d1 cu valoarea 0x20

    movwf       d2      ;se transfera valoarea 0x20 in registrul d2

Delay_0

    decfsz      d1,f        ;decrementam registrul d1 cu 1.

    goto        $+2     ;salt peste 2 instructiuni

    decfsz      d2,f        ;decrementam registrul d2 cu 1.

    goto        Delay_0     ;salt la label Delay_0, aceasta consuma in plus 2 cycle

    goto        $+1     ;salt la instructiunea urmatoare

    return              ;return la instructiunea care a trimis aici. (call delay)

     END                             ; directiva 'end of program’ care nu trebuie sa lipseasca.

Aceasta se aplică schemei electrice de mai jos şi permite ca fiecărui switch să comande aprinderea LED-ului corespunzător. La apăsarea pe oricare alt switch LED-ul anterior se stinge şi se aprinde cel corespunzator lui.

Figura 8.1 – Schema electrică principială pentru testarea programului de programare a pinilor porturilor ca intrări

Ca şi până acum codul în limbaj de asamblare, poate fi transpus în MPLAB, verificat şi încărcat într-un microcontroler tip PIC 16F877A.

În continuare va fi prezentată o altă aplicaţie cu microcontroler care permite comanda independentă a fiecărui pin port prin intermediul a câte unui switch plasat pe intrări. Rezultatul comenzii este concretizat prin modificarea stării unui port de ieşire corespunzator, la care este montat câte un LED. Fiecare LED este aprins independent prin intermediul switch-urilor corespunzatoare.

Codul în limbaj de asamblare cât şi schema electrică pentru această aplicaţie se pot vedea mai jos:


Yüklə 182 Kb.

Dostları ilə paylaş:
1   2   3   4




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin