Postautor: Tom » ndz 03 kwie 2005, 21:15
Jak miło, że ktoś tu pisze w ASM bo mam problem. Otóż piszę sobie programik, który ma gadać z PC po RS. Niby nic wielkiego, literatury mnóstwo, przykładów jeszcze więcej tylko, że.... Programik (a właściwie tylko istotny fragment, który zamieszczam) działa pięknie w środowidku Keil -> pokazuje jak pięknie tyka zegarak i jak ślicznie zasuwają "iksy" do portu. Niestety po wsadzeniu go do kostki układ milczy.... HEEEEEELLLP !
*************** START *********************
org 0000h ; start wykonania -> inicjalizacja np. RS-232
ljmp init
org 0013h ; procedura obsługi przerwania zegarowego T1
ljmp zegar1
org 0023h ; procedura obsługi przerwania portu szeregowego
ljmp portRS
org 0100h
; procedura obsługi zegara T1
zegar1:
reti
; procedura obsługi portu szeregowego
portRS:
clr TI
clr RI
reti
; program główny
; procedura inicjalizacyjna urządzenia
init:
; timery
mov TCON,#00000000b
mov TMOD,#00100010b ; zegar w trybie 2, autoładowanie z TH1
mov TH1,#0FDh ; baud dla prędkości 9600
mov TL1,#0FDh
clr TF1 ; znacznik przepełnienia
; port
mov SCON,#01010000b ; tryb 1, 8 bit z zegarem T1
; przerwania
mov IE,#00010111b ; zezwalam na przerwanie zegara T1, RS i All
; priorytety przerwań
mov IP,#00000001b
; słowo sterujące układem czasowo-licznikowym
mov TCON,#00000000b ; zerowanie wstępne
xrl PCON,#10000000b ; podwojenie szybkości transmisji SMOD->1
ljmp start
start:
setb TR1 ; dołączenie sygnału zliczanego do T1
setb EA ; zezwolenie na przerwania
mov A,#'X' ; wysyłam tylko literkę 'X'
dalej:
mov R2,#0FFh
loop0:
mov R3,#0FFh ; \
loop1: ; |
mov R4,#0FFh ; |
loop2: ; > opóźnienie o FF x FF x FF razy
djnz R4,loop2 ; |
djnz R3,loop1 ; |
djnz R2,loop0 ; /
setb TI ; wysłanie znaku
mov SBUF,A ; znak w A
ljmp dalej ; rób to w kółko
end
**************** STOP *********************
Kto znajdzie błąd ?