pic 16f877 seri port (usart)

Başlatan paradox, 13 Temmuz 2007, 22:00:36

paradox

merhaba 877 ile seri port uygulaması yapıyorum.pc ye veri gönderme ve alma ile uğraşıyorum.visual basic ile veri gönderme programı yazdım ve denedim fakat olumlu sonuç elde edemedim.devre doğru çalışıyor.aynı devre ile picten veri aldım fakat göndermede başarısız oldum.
yardımcı olursanız sevinirim.yazdığım program aşağıda...

list p=16F877
include "p16F877.inc"
__config H'3F31'
org 0
clrf PCLATH
goto Anaprogram
org 4
Kesme
	retfie

Anaprogram
	banksel TRISC
bcf TRISC,6
bsf TRISC,7
movlw 0x19
movwf SPBRG
movlw 0x90
banksel RCSTA
movwf RCSTA
banksel INTCON
bsf PIE1,TXIE
bsf PIE1,RCIE
bsf INTCON,PEIE
bcf INTCON,GIE
	Karakteral
banksel PIR1
btfss PIR1,RCIF
goto $-1
bcf PIR1,RCIF
movf RCREG,W
movwf PORTB
goto Karakteral
end

XX_CİHAN_XX

;*******************************************************
;YAZAN : CIHAN YILDIRIM
;KRISTAL: 4MHZ
;BAUD RATE: 9600, 8, n, 1
;*******************************************************
		LIST		P=16F877
		INCLUDE		"P16F877.INC"
;*******************************************************
	__config(_CP_OFF & _PWRTE_OFF & _XT_OSC & _WDT_OFF & _BODEN_OFF & _LVP_OFF)
;*******************************************************
ALINAN_VERI	EQU		0x20
;*******************************************************
		ORG			0x00
		GOTO		START
;*******************************************************
		ORG			0x04
		BTFSS		PIR1,RCIF
		RETFIE
;*******************************************************
		BCF			PIR1,RCIF
		BTFSC		RCSTA,OERR	
		GOTO		GONDERME_HATASI
		BTFSC		RCSTA,FERR	
		GOTO		CERCEVE_HATASI
		MOVF		RCREG,W		
		MOVWF  		ALINAN_VERI		;USART TAN GELEN VERI BU REGISTERE KAYDEDILIR
		MOVWF		PORTB			;PORTB DE GOSTERILIR
		MOVWF		TXREG			;GELDIGI YERE GERI POSTALANIR :)
		RETFIE
;*******************************************************
GONDERME_HATASI
		BCF			RCSTA,CREN
		NOP
		NOP
		NOP
		NOP
		BSF			RCSTA,CREN
		RETFIE
;*******************************************************
CERCEVE_HATASI
		MOVF		RCREG,W
		RETFIE
;*******************************************************
TX_RX_HAZIRLA
		BCF			PIR1,RCIF
		BSF 		STATUS,5		
		MOVLW		.25
		MOVWF		SPBRG
		MOVLW		H'26'    
		MOVWF		TXSTA
		BSF 		TXSTA,BRGH 
		BSF			INTCON,GIE
		BSF			INTCON,PEIE
		BSF			PIE1,RCIE
		BCF			STATUS,5
		MOVLW		H'90'
		MOVWF		RCSTA
		RETURN
;*******************************************************
START
		CLRF		PORTB
 		BSF			STATUS,5
		MOVLW		0x80
		MOVWF		TRISC
		CLRF		TRISB
		BCF			STATUS,5
;*******************************************************
		CLRF		INTCON
		CALL		TX_RX_HAZIRLA		;8 BIT DATA PARITY YOK 9600 BAUD
;*******************************************************
MAIN
;RS232 DEN VERI GELMESINI BEKLE...
;RS232 DEN VERI GELINCE OTOMATIK OLARAK KESMEYE GIDECEK
;ALDIGI VERIYI ONCE PORTB YE ATACAK ARDINDAN
;TX UCUNDAN GELDIGI YERE GERI GONDERICEK :)
;SONRA TEKRAR BU ANA DONGUYE GIRIP BOS BOS YENI VERININ GELMESINI BEKLEYECEK :D
		GOTO		MAIN
;*******************************************************
		END
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

paradox

verdiğiniz program için teşekkürler.kesmeli program daha önce denedim buna benzer ama olmamıştı.bazı farklılıklar var umarım şimdi çalıştırabilirim :D

bişey sorcam yeni öğrendim asm yi ;

MOVLW      .25


kodu direk 25 i yüklüyormu.yani bu şekilde de yazılabiliyormu ...

e3

Movlw .25 komutu W registerine desimal 25 değerini yükler.Bende buradan öğrenmiştim. :D
.eem.

ycmy

evet w registerina 25 sayısını yükler daha sonra bunu movwf komutuyla bir değişkene atmalısın:
movlw .25
movwf sayi gibi
kolay gelsin

paradox

ya devre yine çalışmadı . visual basic te yazdıım programdamı sorun var acaba.


MSComm1.PortOpen = True
On Error GoTo hata
MSComm1.Output = Text1.Text
MSComm1.PortOpen = False
Exit Sub

hata:
MsgBox "veri yollanamadı"
End Sub


Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
On Local Error GoTo hata

Exit Sub
hata:
MsgBox "Port Acılamıyor"
End Sub

XX_CİHAN_XX

Program çalışıyor.Proteusta test edebilirsin.Vb den anlamadığım için kodların hakkında yorum yok ancak devrenide iyice incelemelisin.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

paradox

Proteusta nasıl test edicem.aslında bu çok faydalı olur.seri port yerine ne kullanıyorsunuz.

XX_CİHAN_XX

en basit olarak iki pic koy usarttan birbirine bagla.Verdiğim programda ufak bir ekleme yaparak birbirlerine veri gönderıp almalarını sağla.Programın duzgun calıştığını göreceksin.Biraz uğraş yapamazsan proteusta bitmiş halını gonderırım.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.