Mikrokontroleri  - 8051

Autor: Tomislav Ratic

   

  Serijska komunikacija

Jedan od najznačajnijih mehanizama familije Intelovih mikrokontrolera koji se baziraju na mikrokontroleru 8051 je serijska komunikacija po RS232 standardu. Serijski port je “full duplex” što znači da su mogući prijem i predaja u isto vreme. Za oba smera komunikacije koriste se dva istoimena specijalna funkcijska registra SBUF, ali koji su fizički odvojeni. Postoje 4 moda u kom je moguć rad serijskog porta. Najčešće se koristi MOD1 koji podrazumeva sequence koje se sastoje od jednog start bita, 8 data bitova i jednog stop bita.

Da bi se ostvarila serijska komunikacija za početak treba izvšiti inicijalizaciju serijskog porta. Prvo se inicijalizuje tajmer T1 (koji se koristi za generisanje takta serijske komunikacije) kao 8 bitni auto reload timer. Da bi se ostvarile standardne brzine serijske komunikacije početna punjenja T1 su tačno određena. Dok je za takt oscilatora mikrokontrolera od 11.0592 MHz moguće ostvariti sve standardne baudske brzine i koje su pri tom sasvim tačne, pri korišćenju quarca od 12MHz, ne samo da nisu moguće sve brzine (npr. 9600 i 19200 Bd) već su i one koje se ostvaruju približne. Ipak ova tačnost je zadovoljavajuća za uspešno ostvarivanje serijske veze.

11.0592 MHz 12 MHz
Baud
rate
SMOD 0 SMOD 1 Baud
rate
SMOD 0 SMOD 1
1200 232 208 1201,9 230 204
2400 244 232 2403,8 243 230
4800 250 244 4807,7   243
9600 253 250      
19200   253      

U tabeli 1. data su punjenja T1 za oscilatore od 11.0592 i 12 MHz. U inicijalizaciji je takođe potrebno definisati mod serijske komunikacije upisom odgovarajućeg koda u registar SCON, kao i setovati bit REN koji omogućava prijem na serijskom portu. Ako su potrebne maximalne brzine serijske komunikacije, potrebno je setovati bit PCON.7 (SMOD) čime se duplira baudska brzina. Za svaku sigurnost, treba još resetovati receive i transmitt interrupt flegove. Na kraju je neophodno startovati tajmer T1 i ako se koristi prijem i/ili predaja pod interaptom, omogućiti servisiranje interapta serijske komunikacije. U prilogu je dat listing programa kojim se ostvaruje serijska komunikacija između mikrokontrolera i PC-ja. U zaglavlju programa je moguće birati baudsku brzinu definisanjem punjenja tajmera T1. (Punjenja važe za takt oscilatora mikrokontrolera od 12MHz.) Inicijalna brzina je 4800Bd, a koristi se MOD1. Sa strane PC-ja za komunikaciju se može koristiti bilo koji od standardnih komunikacionih programa - npr. Terminal emulation iz paketa Norton Commandera 4.0 ili 5.0. Po startovanju programa, (ako su brzina i mod komunikacije ispravno posešeni), na ekranu se određenom brzinom prikazuje broj 40h ili karakter ‘@’ ako je program u ASCII modu prikaza. Pritiskom na neki od tastera PC tastature, njegov kod se šalje ka kontroleru. Kontroler prihvata poslati karakter i počinje da ga neprestano šalje ka PC-ju. Brzina pojavljivanja karaktera na ekranu obrnuto je proporcionalna veličini njegovog ASCII koda. Ovo je ostvareno potprogramom DELAY koji definiše pauzu između slanja dva znaka od strane mikrokontrolera. U određivanju trajanja pauze učestvuje ASCII kod znaka koji je poslednji stigao od strane PC-ja.
Radi vizuelne kontrole rada programa moguće je na neki od pinova porta P1 priključiti LE diodu. Na portu P1 se generiše pravougaoni signal u ritmu slanja karaktera ka PC-ju i LED treba da treperi u tom ritmu. Sam program je organizovan tako da se slanje ka PC-ju vrši takozvanim pooling metodom, dok se prijem vrši pod interaptom.

 Listing 1. Serijska komunikacija
Ser_buffer .reg 20h ;Registar za prihvat bajta iz prijemnog ;SBUF-a
;Punjenje T1 radi definisanja baudske ;brzine (freq. oscilat.12MHz, SMOD=1):
; 204d za 1200 Bd
; 230d za 2400 Bd
; 243d za 4800 Bd
Baud_rate .equ 243d
org 0000h
ljmp INIC
org 0023h ;Vektorska adresa za
ljmp IRR_ES ;serijski interapt ES.
 
;Inicijalizacija:
org 0100h
INIC: mov ie,#00h ;Zabrani sve interapte.
mov tmod,#20h ;T1 je 8b auto-reload timer.
mov th1,#Baud_rate ;Punjenje T1 radi definisanja ;baudske brzine. (Za ;12MHz, ;pri punjenju 243, baud Rate je ;2403 b/s)
mov scon,#01010000b ;Mod 1 (START+8+STOP), ;moguc prijem.
orl pcon,#80h ;Setovanje bita PCON.7 radi dupliranja ;baudske brzine – 4807 Bd.
mov Ser_buffer,#'@' ;Registar za prihvat primljenog bajta iz ;SBUF-a.
clr ti ;Ciscenje trasmitt i receive int. flega.
clr ri
setb tr1 ;Startovanje T1.
mov ie,#10010000b ;Dozvoli interapt ES (int. ser. kanala).
;Glavni program:
START: mov p1,#00h ;Pravougaoni signal na
lcall DELAY ;portu P1.
 
;Slanje podatka ka PC-ju.
mov a,Ser_buffer ;Preuzimanje zapamcenog bajta.
mov sbuf,a ;Serijski prenos ka PC-u.
jnb ti,* ;Pooling metod slanja.
clr ti ;Ciscenje trans.int.flega.
mov p1,#FFh ;Pravougaoni signal na
lcall DELAY ;portu P1.
sjmp START
 
;Rutina za kasnjenje:
DELAY: mov r5,Ser_buffer
LOOP3: mov r6,#5d
LOOP2: mov r7,#255d
LOOP1: djnz r7,LOOP1
djnz r6,LOOP2
djnz r5,LOOP3
ret
 
;Interapt rutina za obradu serijskog interapta:
IRR_ES: push a
jnb ri,RETURN ;Ako nije pun prijemni SBUF, vrati se.
mov a,sbuf ;Pamcenje primljenog bajta.
mov Ser_buffer,a
RETURN: clr ri ;Ciscenje rec.int.flega.
pop a
reti
end

(Sve naredbe korišćene u primerima se odnose na asembler firme ‘2500AD SOFTWARE, INC’ )

Pročitajte više o ovoj temi
Mali saveti za početnike iz asemblera za Intel 8051
Smart LCD, šta i kako? 
LOOK-UP tabele 
Softverska kašnjenja I
Softverska kašnjenja
Mapiranje

C o p y r i g h t  1998 mikroElektronika. All Right Reserved. Za sva pitanja obratite se redakciji