Ovládání PORTx přes COM port
05. 06. 10 - 08:23. Napsal Jiří Chytil. Přečteno 2492x. 6 komentářů
Ovládání jednotlivých pinů portů mikrokontroleru pomocí instrukcí posílaných přes COM (RS232). Při využití bitů 3-6 lze adresovat až 16 portů. Teoreticky by tedy bylo možné adresovat až 128 pinů.
Program funguje tak, že přijme data z COM portu (asynchronní přenos) a uloží je do proměnné datt; tři nejnižší bity (0-2) adresují pin portu. Pomocí proměnné pocet a instrukce RLF se vytvoří maskovací byte. Pokud by byly využity bity 3-6, určily by, který bit se má použít. Tento program je ale pro PIC16F84A a využívá proto pouze PORTB. Bit MSB - nejvyšší bit - určuje, do jakého stavu se port nastaví, pokud je v log. 1 nastaví se do log. 1, a naopak. To se provede použitím maskovacího bytu pocet a instrukcí ANDWF a IORWF
INCLUDE "P16F84A.INC" LIST P=16F84A, R=DEC __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ;- nastavení COM portu: ----------------------------------------- ; ; 2400 Baud ; 8 bit ; none parity ; none handshake (pomocné linky) ; ;- Proměnné ---------------------------------------------------- c1 EQU h'20' ;proměnné pro cykly pocet EQU h'23' ;počet bitů datt EQU h'24' ;data z portu tatt EQU h'25' ;temp data ;- Nastavení v/v ----------------------------------------------- BSF STATUS,RP0 ;přesun do banky 1 MOVLW b'00000001' ;nastavení v/v MOVWF TRISA MOVLW b'00000000' MOVWF TRISB BCF STATUS,RP0 ;přesun zpět do banky 0 ;- Vlastní program --------------------------------------------- zacatek BTFSC PORTA,0 ;čekání na start bit GOTO get GOTO zacatek ;- přijem dat -------------------------------------------------- get CALL prodleva CALL prodleva CALL prodleva MOVLW 8 MOVWF pocet MOVLW 255 MOVWF datt next BTFSS PORTA,0 BCF STATUS,C BTFSC PORTA,0 BSF STATUS,C RRF datt,1 ;ukládání do datt CALL prodleva CALL prodleva DECFSZ pocet,1 GOTO next CALL prodleva CALL prodleva ;- čekání na stop bit ------------------------------------------ konec BTFSC PORTA,0 GOTO konec ;- zpracovaní přijatých dat ------------------------------------ COMF datt,1 ;inverze datt MOVLW b'00000001' ;výchozí pozice MOVWF pocet ;maskovacího bitu počet MOVF datt,0 ANDLW b'00000111' ;maskovaní na hodnotu 0-7 MOVWF tatt ;bity b3-b7 se vynulují repe MOVF tatt,1 ;nastavení maskovacího BTFSC STATUS,Z ;bytu počet GOTO output BCF STATUS,C RLF pocet,1 DECF tatt,1 GOTO repe output MOVF datt,0 ;rozhodnutí zda se ANDLW b'10000000' ;má bit nulovat BTFSC STATUS,Z ;nebo nastavit GOTO output0 output1 MOVF pocet,0 ;maskování portu IORWF PORTB,1 ;na nastavení bitu GOTO zacatek output0 COMF pocet,0 ;maskování portu ANDWF PORTB,1 ;na nulování bitu GOTO zacatek ;- podprogram prodlevy --------------------------------------------- prodleva MOVLW 63 MOVWF c1 wait DECFSZ c1,1 GOTO wait RETURN END
Novinky Další novinky
Anketa
Jaký obchod preferujete při nákupu součástek?
TME
GES
GME
Farnell
SOS electronic
TIPA
EZK
PS Electronic
Mouser
Buček
Denkl Electronic
FK Technics
Hadex
Conrad
Jiný český
Jiný zahraniční
Poslední komentáře