Elimdeki atmega 162 den pcdeki usart terminaline yaklaşık .2 saniye aralıklarla 8,N,1 asenkron seri iletişim formatıyla "A" karakterini göndermeye çalışıyorum. Ama PCdeki terminalden hiçbir veri alamıyorum. Assembly dilinde yazdığım program kodu aşağıda. Nerede hata yaptığımı söyleyebilir misiniz?
.include "m162def.inc"
.def SAYAC1 = R17
.def GECICI = R16
.def SAYAC2 = R18
.cseg
.org 0
RJMP RESET
RESET:
LDI GECICI,0x04
OUT SPH, GECICI
LDI GECICI,0xFF
OUT SPL, GECICI
LDI GECICI, 0b00000010
OUT DDRD, GECICI
LDI GECICI, 0x40
OUT PORTD, GECICI
LDI GECICI, 51
OUT UBRR, GECICI
LDI GECICI, (1<<RXEN | 1<<TXEN)
out UCSR1B,GECICI
LDI GECICI, (0<<UCSZ12)
OUT UCSR1B,GECICI
LDI GECICI, (1<<URSEL1) | (1<<UCSZ10) | (1<<UCSZ11)
OUT UCSR1C,GECICI
USART_GONDERME:
sbis UCSR1A, UDRE
RJMP USART_GONDERME
LDI GECICI,0b01000001
OUT UDR,GECICI
RCALL ZAMAN_GEC
RJMP USART_GONDERME
ZAMAN_GEC:
LDI SAYAC2, 255
SAY2:
LDI SAYAC1, 255
SAY1:
DEC SAYAC1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BRNE SAY1
DEC SAYAC2
BRNE SAY2
RET
Mesajınıza kod eklemek için "KOD" butonunu
kullanınız...
Kod butonu nerede göremedim.
yukarıdaki kodun derleme esnasında çok sorun çıkaracağı açık. Çünkü kodlama başka bir işlemci için yapılmış.
Program konusunda keşke daha basit bir işlemci ile başlasaydın.
Çünkü bu işlemcinin 2 tane seri portu var. Bu nedenle hangisini kullanacağını belirtmen gerekirdi.
Kod kenarlarına herhangi bir açıklama yapmadan, senin yapacağını kestirmek zor. 2 saniye olayı için timer kullan.
kullandığın seri port hangisi
kontroller saat frekansın nedir,
baud hızın nedir, yok ben hesapladım çalışıyor diyorsan sen bilirsin.
.include "m162def.inc"
.def SAYAC1 = R17
.def GECICI = R16
.def SAYAC2 = R18
.CSEG
.ORG $0000
RJMP RESET
RESET:
ldi r16,low(ramend) ;yığın tanımlamm (ram küçük)
out spl,r16 ;spi yükle
ldi r16,high(ramend) ;yığın tanımlamm (ram büyük)
out sph,r16 ;spi yükle
LDI GECICI, 0b00000010
OUT DDRD, GECICI
LDI GECICI, 0x40
OUT PORTD, GECICI
şu şekilde başla.
diğer kod örneklerinin çoğunlukla datasheet sayfalarında bulunacaktır.
UBRR--
iki registerden oluşuyor
UBRR1L
UBRR1H olarak...
örneğin UART1 için (registeri o şekilde seçmişsin)
LDI GECICI, (1<<RXEN1 | 1<<TXEN1)
out UCSR1B,GECICI
madem tx1 kullanılıyor...
LDI GECICI,0b01000001
OUT UDR1,GECICI
(http://en.zimagez.com/miniature/capture2017-08-27-23-35-51.png) (http://en.zimagez.com/zimage/capture2017-08-27-23-35-51.php)