Uart kesmesi

zihnisinir

Üye
Katılım
9 Tem 2020
Mesajlar
23
Puanları
1
Yaş
35
Merhaba arkadaslar. 16f628a ile en basit bir alıcı verici devre yapmak istiyorum. ama bir türlü uart kesmesinin kodlarını doğru yazamadım. ya konuyu temelinden anlama noktasında eksikliğim var ya da kaynaklarımda. velhasıl sonuç olarak yazamıyorum. yapmak istediğim şey verici entegresindeki butona basıp alıcıdaki ledi yakmak daha sonra bir kez daha bastığımda da uyku moduna alabilmek .
yardımcı olursanız sevinirim.
 
Dil konusunda bir şey söylemediniz. Ben de
bunu anlayacak kadar zeki değilim.

Siz bu kodlara bir kaç sihirli dokunuş yaparak
dönüşüm yapabilirsiniz.
 
Kusura bakmayin pic başlığı altında olunca anlaşılır diye düşünmüştüm.
Neyse deneyeceğim eğer çare olmazsa yine danışırım buraya.
 
Kod:
''verici

@ __config _LP_OSC & _WDT_OFF & _CP_OFF &  _PWRTE_OFF

 porta=0:trisa=0
 portb=0:trisb=%11000000

include "modedefs.bas"
define OSC 4
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 25  '  9600 Baud @ 4MHz, 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

cmcon=7     
option_reg.7=1       'pinlerin hepsi giris ve cikis olarak ayarlandi
    
symbol buton=portb.7  'sinyal gonderme
symbol buton2=portb.6  ' uyutma
ver var byte
Ver2 var byte

SYMBOL GIE =INTCON.7 'genel interruptlari açiyor
SYMBOL RCIF =PIR1.5 'USART Receive interrupt flag bit
symbol RCIE= PIE1.5  'usart recive interrupt
 CLEAR
GIE=0
RCIF=1
RCIE=1   
 ver=0
 ver2=0

BASLA:

IF buton=1 then
ver=25
gosub GONDER
 
if buton2=1 then
ver2=35
gosub uyut
endif
endif
goto basla
 
 on interrupt goto GONDER
 
 disable
GONDER:
HSEROUT [REP$AA\5,REP$00\5,REP$FF\5]' UYANDIRMA SINYALIDIR
hSerOUT ["H","T","E",VER]
hSerOUT ["H","T","E",VER]
hSerOUT ["H","T","E",VER]
hSerOUT ["H","T","E",VER]
hSerOUT ["H","T","E",VER]

on interrupt goto uyut
 disable
uyut:
HSEROUT [REP$AA\5,REP$00\5,REP$FF\5]
hserout ["R","s","E",ver2]
hserout ["R","s","E",ver2]
hserout ["R","s","E",ver2]       
hserout ["R","s","E",ver2]
GIE=1
 return
 end
Kod:
'alici

@ __config _LP_OSC & _WDT_ON & _CP_OFF &  _PWRTE_OFF
 porta=0:trisa=0
 portb=0:trisb=%00000010
 
include "modedefs.bas"
DEFINE OSC4
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 25  '  9600 Baud @ 4MHz, 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
 
  CMCON=7
 option_reg.7=1
 
 symbol ledaktif=portb.7
 symbol leduyku=portb.6
 SYMBOL GIE  =INTCON.7   'genel interruptlarý açiyor
 SYMBOL RCIE =PIE1.5     'USART Recive interrupt enable bit
 SYMBOL RCIF =PIR1.5     'USART ALICI TAMPONU DOLU 1
 al var byte
 al2 var byte
symbol giris=portb.1
 
clear
RCIE=1
RCIF=1
GIE=0

al=0
AL2=0
leduyku=0


basla:
CLEARWDT
HSERIN 5,basla,[WAIT("HTE"),AL]
if GIRIS=1 then
al= 25
low leduyku
high ledaktif
endif

devam:
hserin 5,devam,[WAIT("RsE"),al2]
if GIRIS=1 then 'buton2 burada yoluyor
al2= 35
high leduyku
low ledaktif
sleep 20
GIE=1
endif
Adsız.png

3 gündür uğraşıyorum ama bir türlü bir butonla bir ledi yakıp diğer butonla hem ledi kapatıp hem de devreyi uyku moduna alamıyorum. usart konusunda da ilk denemem o yüzden çok fazla çare de üretemedim. araştırmalar yaptım ama ne yazık ki olmadı. yardımcı olursanız sevinirim.
 

Forum istatistikleri

Konular
127,967
Mesajlar
913,970
Kullanıcılar
449,613
Son üye
Liderpano

Yeni konular

Geri
Üst