18f46k22 donanımsal usart yardım

Başlatan mikro29, 12 Şubat 2015, 14:49:32

mikro29

Biraz araştırmama rağmen Proton basic  ile donanımsal usart çalıştıramadım. Aslında  şöyle çalışıyor usart çalıştığı zaman ekran çalışmıyor, ama programdan usartı silince herşey normal. Daha önceden burada [url=http://etepic.com/index.php?topic=911.0]http://etepic.com/index.php?topic=911.0 [/url] konu açılmış ama sonuca ulaşamadım yardımlarınızı bekliyorum. Teşekkürler

Device = 18F46K22Xtal 64Config_Start  FOSC = HSHP ;HS oscillator (high power > 16 MHz)  PLLCFG = On ;Oscillator multiplied by 4  PRICLKEN = On ;Primary clock is always enabled  FCMEN = OFF ;Fail-Safe Clock Monitor disabled  IESO = OFF ;Oscillator Switchover mode disabled  PWRTEN = OFF ;Power up timer disabled  BOREN = SBORDIS ;Brown-out Reset enabled in hardware only (SBOREN is disabled)  BORV = 190 ;VBOR set to 1.90 V nominal  WDTEN = OFF ;Watch dog timer is always disabled. SWDTEN has no effect.  WDTPS = 32768 ;1:32768  CCP2MX = PORTC1 ;CCP2 input/output is multiplexed with RC1  PBADEN = OFF ;PORTB<5:0> pins are configured as digital I/O on Reset  CCP3MX = PORTB5 ;P3A/CCP3 input/output is multiplexed with RB5  HFOFST = OFF ;HFINTOSC output and ready status are delayed by the oscillator stable status  T3CMX = PORTC0 ;T3CKI is on RC0  P2BMX = PORTD2 ;P2B is on RD2  MCLRE = EXTMCLR ;MCLR pin enabled, RE3 input pin disabled  STVREN = On ;Stack full/underflow will cause Reset  LVP = OFF ;Single-Supply ICSP disabled  XINST = OFF ;Instruction set extension and Indexed Addressing mode disabled (Legacy mode)  Debug = OFF ;Disabled  CP0 = OFF ;Block 0 (000800-003FFFh) not code-protected  CP1 = OFF ;Block 1 (004000-007FFFh) not code-protected  CP2 = OFF ;Block 2 (008000-00BFFFh) not code-protected  CP3 = OFF ;Block 3 (00C000-00FFFFh) not code-protected  CPB = OFF ;Boot block (000000-0007FFh) not code-protected  CPD = OFF ;Data EEPROM not code-protected  WRT0 = OFF ;Block 0 (000800-003FFFh) not write-protected  WRT1 = OFF ;Block 1 (004000-007FFFh) not write-protected  WRT2 = OFF ;Block 2 (008000-00BFFFh) not write-protected  WRT3 = OFF ;Block 3 (00C000-00FFFFh) not write-protected  WRTC = OFF ;Configuration registers (300000-3000FFh) not write-protected  WRTB = OFF ;Boot Block (000000-0007FFh) not write-protected  WRTD = OFF ;Data EEPROM not write-protected  EBTR0 = OFF ;Block 0 (000800-003FFFh) not protected from table reads executed in other blocks  EBTR1 = OFF ;Block 1 (004000-007FFFh) not protected from table reads executed in other blocks  EBTR2 = OFF ;Block 2 (008000-00BFFFh) not protected from table reads executed in other blocks  EBTR3 = OFF ;Block 3 (00C000-00FFFFh) not protected from table reads executed in other blocks  EBTRB = OFF ;Boot Block (000000-0007FFh) not protected from table reads executed in other blocksConfig_EndOSCCON.6 = 1 '111 = 16Mhz OSCCON.5 = 1OSCCON.4 = 1OSCTUNE.6 = 1 '(multiplier 4 on 16*4 =64 MHZ)'INTCON2.7 = 0 ' PULL UP PORTB REGISTER RBPU                        Declare  SHOW_SYSTEM_VARIABLES = OFF   Declare  FSR_CONTEXT_SAVE = OFF   Declare  Reminders = OFF    Declare  Warnings = OFF   'Declare  Optimiser_Level 0   Declare  Bootloader = OFF'**********GIRIS-CIKIS TANIMLAMALARI******************  '      76543210      TRISA=%00111111 :PORTA=0TRISB=%00000000 :PORTB=0TRISC=%10000000 :PORTC=0TRISD=%00000000 :PORTD=0TRISE=%00000001 :PORTE=0PortB_Pullups = OnPortB_Pullups = TRUE'-------------------------- GLCD AYARLARI ------------------------                                                                   Declare  LCD_Type Toshiba     ' LCD type - graphical. Toshiba T6963 chipsetDeclare  LCD_DTPort PORTD     ' Data portDeclare  LCD_WRPin  PORTC.3   ' WR lineDeclare  LCD_RDPin  PORTC.2   ' RD lineDeclare  LCD_CDPin  PORTC.1   ' CD lineDeclare  LCD_CEPin  PORTB.0   ' CE line'Declare  LCD_RSTPin PORTB.6   ' RST lineDeclare  LCD_FSPIN  PORTC.5   ' FS lineDeclare  LCD_X_Res   240      ' YATAY PiKSEL SAYISIDeclare  LCD_Y_Res  128       ' DiKEY PiKSEL SAYISIDeclare  LCD_Font_Width  8    ' FONT BÜYÜKLÜĞÜDeclare  LCD_RAM_Size  8192   ' Display memory sizeDeclare  LCD_CommandUs 10Declare  LCD_DataUs 10Declare  GLCD_STROBE_DELAY 100'GLCD_EXTERNAL_PRINT = PPRINTDeclare Adin_Res   10Declare Adin_Tad   FRCDeclare Adin_Stime   10Declare FSR_Context_Save = On'-------------------------- ADC AYARLARI --------------------------        '76543210ADCON0 =%00000001ADCON1 =%00001010ADCON2 =%10000000'-------------------------- USART AYARLARI ------------------------  Declare Hserial_Baud =9600 Declare Hserial_RCSTA=$90h Declare Hserial_TXSTA=$25h Declare Hserial_SPBRG= 103Declare Hserial_Clear= On '-------------------------- BAUD AYARLARI ------------------------  BAUDCON1.7 = 0 '1 = Otomatik baud zamanlayıcı taştı , 0 = Otomatik baud zamanlayıcı taşma kapalıBAUDCON1.6 = 1 'Asenkron ise ve 1 = Alıcı boşta     , 0 = Başlangıç biti tespit edilmiş ve alıcı aktifBAUDCON1.5 = 1 'Asenkron ise ve 1 = Alma verileri ( RX ) ters çevrilir , 0 = Alma verileri ( RXx ) ters çevrilmez               'Senkron ise ve 1 = Veriler ( DTx) ters çevrilir BAUDCON1.4 = 0 'Asenkronda ise 1 = (Tx) iletim düşük modda , 0 = (Tx) iletim yüksek moddaBAUDCON1.3 = 0 'Baud Rate Generator 8 bitBAUDCON1.2 = 0 'Geçersiz bitBAUDCON1.1 = 0 'Uyandırma modu Asenkronda                '1 = Alıcı düşen kenarı bekliyor . Hiçbir karakter alınacak               '    ancak RCxIF düşen üzerine kurulacaktır Yükselen kenarında WUE otomatik olarak açık                '0 = Alıcı normal çalışıyorBAUDCON1.0 = 0 ' Asenkron modda 1 = Otomatik Baud modu etkinleştirildiğinde Algılama ( otomatik baud tamamlandığında temizler )               ' 0 = Otomatik Baud Algılama modu devre dışı                              '-------------------------- VERİCİ DURUM VE KONTROL AYARLARI ------------------------  TXSTA1.7  =  1 ' Asenkron Modda işe yaramazTXSTA1.6  =  0 '1 = 9-bit iletimi seçer , 0 = 8-Bit iletimi seçerTXSTA1.5  =  1 '1 = İletim etkin, 0 = İletim kapalıTXSTA1.4  =  0 '1 = Senkron (eşzamanlı) ,  0 = Asenkron (eşzamansız)TXSTA1.3  =  0 'Asenkron modda 1 = Bir sonraki iletim Sync sonunu gönder , 0 = Sync Arası İletim tamamlandı  TXSTA1.2  =  0 'Asenkron modda 1 = Yüksek hız  0 = Düşük hızTXSTA1.1  =  0 'Kayıt durumu   1 = boş , 0 = doluTXSTA1.0  =  0 'Geçersiz bit, Adres / veri biti veya bir eşlik biti olabilir'-------------------------- GENEL KESME AYARLARI ------------------------  PIR1.7 = 0 ' Geçersiz bitPIR1.6 = 0 ' A/D çevrim kesme biti   1 = Aktif , 0 = pasif PIR1.5 = 1 ' EUSART1 Alma (Rx) Kesme Bayrak bit    1= RCREG1 okunduğu zaman temizlenir, 0= EUSART1 tamponu boş alıyorsunuz,PIR1.4 = 1 ' EUSART1 İletim  (Tx) Kesme Bayrak bit 1 = EUSART1 iletim tampon , TXREG1 , boş ( TXREG1 yazıldığı zaman temizlenir )           ' 0 = EUSART1 ileti (Tx) tampon doluPIR1.3 = 0 ' Master Senkron Seri Port1 Kesme Bayrak biti 1 = Iletim alımı tamamlandı , 0 = Iletmek almak için bekliyorPIR1.2 = 0 ' Capture mode ise           '1= TMR1 kayıt yakalama oluştu 0 = TMR1 kayıt yakalama oluşmaz           ' Compare mode ise           PIR1.1 = 0 'PIR1.0 = 0 ' '-------------------------- GENEL KESME AYARLARI ------------------------        '76543210PIR2 = %00000000PIR3 = %00000000PIR4 = %00000000PIR5 = %00000000'-------------------------- GENEL KESME AKTİF ETME AYARLARI ------------------------ PIE1.7 = 0 ' Geçersiz bitPIE1.6 = 0 ' A/D Dönüştürücü Kesme izin verme biti   0 = A/D kesmesine izin verilmezPIE1.5 = 1 ' EUSART1 bigi alındı Kesmesine izin verme biti , 0 = EUSART1 bilgi alındı kesmesine izin verilmezPIE1.4 = 1 ' EUSART1 bigi gönderme Kesmesine izin verme biti  , 0 = EUSART1 KESME Bit TX etkinleştirme kapalıPIE1.3 = 0 ' Senkronize  Seri Port1 Kesmesine izinverme  bit etkinleştirme 1 = MSSP1 kesme aktif , 0 = MSSP1 KESME pasif          'PIE1.2 = 0 ' 1 = CCP1 Kesme aktif , 0 = CCP1 KESME pasif PIE1.1 = 0 ' 1 = TMR2 KESME AKTİF 0 = TMR2 KESME PASİFPIE1.0 = 0 ' 1= TMR1 KESMES BAYRAĞI SIFIRLANDI'-------------------------- ÇEVRESEL KESME AKTİF ETME AYARLARI ------------------------ IPR1.7 = 0 ' GeçersizIPR1.6 = 1 ' A/D 1 = Dönüştürücü Kesme ÖncelikIPR1.5 = 1 ' EUSART1 Alıcı kesme önceliği 1 = HIGH öncelik , 0 = LOW öncelikIPR1.4 = 1 ' EUSART1 Verici kesme önceliği 1 = HIGH öncelik , 0 = LOW öncelikIPR1.3 = 0 ' Master Senkron Seri Port 1 Kesme Öncelik biraz  1 = High öncelik , 0 = Low öncelikIPR1.2 = 0 ' CCP1 kesme önceliği   1 = High öncelik , 0 = Low öncelikIPR1.1 = 0 'TMR2 Kesme önceliği  1 = High öncelik , 0 = Low öncelikIPR1.0 = 0 'TMR1 TMR1 Taşma Kesme Öncelik 1 = High öncelik , 0 = Low öncelik'-------------------------- ÇEVRESEL KESME ÖNCELİK AYARLARI ------------------------        '76543210IPR2 = %00000000IPR3 = %00000000IPR4 = %00000000IPR5 = %00000000'------------------------------ KIYASLAYICI AYARLARI  ------------------------------CM1CON0.7 = 0 ' COMPARATOR İPTAL' ------------------------------ TMR0 KESME AYARLARI ------------------------------- T0CON.7 = 1' TMR0 1 = AÇIK , 0 = KAPALIT0CON.6 = 0' TMR0 1 = 8 BIT , 0 = 16 BITT0CON.5 = 0' TMR0 GİRİŞ PİNİ 1 = T0CKI , 0 = Dahili kaynakT0CON.4 = 0' TMR0 KENAR BİTİ 1 = Yükselen kenar tetiklemesi , 0 = Düşen kenar tetiklemesiT0CON.3 = 0' TMR0 ÖN BÖLÜCÜ ATAMA BİTİ 1 =  T0CON.2 = 0' 111 1/256   100 1/32   001 1/4T0CON.1 = 0' 110 1/128   011 1/16   000 1/2T0CON.0 = 0' 101 1/64    010 1/8              ''       76543210'T0CON= %10000000'' ------------------------------ KESME KONTROL AYARLARI ----------------------------INTCON.7 = 1 'bütün kesmelere izin verme biti  1=KESMELER AKTİFINTCON.6 = 0 'ÇEVRESEL KESMELER 1= AKTİFINTCON.5 = 1 'TMR0 taşma kesmesi 1 = AKTİF INTCON.4 = 0 'INT0 kesmesi 1 = AKTİF INTCON.3 = 0 'PORTB4-7 değişim kesmesi 1 = AKTİFINTCON.2 = 1 'TIMER0 ZAMAN AŞIMI 1 = AKTİF  INTCON.1 = 0 'PORTB0 DIŞ KESME 1 = AKTİF  INTCON.0 = 0 'PORTB4-7 DEĞİŞİM KESMESİ 1 = AKTİF''        '76543210''INTCON =%11100000INTCON2 = %10000000 ' Portb pull up 1 = pasif , 0= aktif''------------------------------ KESME KONTROL AYARLARI ----------------------------PIE1.6 = 0'ADC KESMESİ AKTİF      1 = AKTİFPIE1.5 = 1'EUSART1 ALICI KESMESİ  1 = AKTİFPIE1.4 = 1'EUSART1 VERİCİ KESMESİ 1 = AKTİFPIE1.3 = 0'MSSP1 KESMESİ AKTİF    1 = AKTİFPIE1.2 = 0'CCP1 KESMESİ AKTİF     1 = AKTİFPIE1.1 = 0'TMR2 KESMESİ AKTİF     1 = AKTİFPIE1.0 = 1'TMR1 TAŞMASI AKTİF     1 = AKTİF        '76543210'PIE1  = %00110000 '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<'-------------------------- Ports settings ---------------------------------                                                                   PortB_Pullups = OFF   ' Disable PORTB pullup resistorsDeclare  All_Digital = OFF ' Do not set analogue pins to digitalSymbol RBIF = INTCON.0 ' RB Port Interrupt FlagSymbol INTF = INTCON.1 ' RB0 External Interrupt FlagSymbol T0IF = INTCON.2 ' TMR0 Overflow Interrupt FlagSymbol RBIE = INTCON.3 ' RB Port Change Interrupt EnableSymbol INTE = INTCON.4 ' RB0 External Interrupt EnableSymbol T0IE = INTCON.5 ' TMR0 Overflow Interrupt EnableSymbol PEIE = INTCON.6 ' Peripheral Interrupt EnableSymbol GIE = INTCON.7  ' Global Interrupt Enable                                                                   '-------------------------- PIE1, PIR1 ----------------------------------------------                                                                   Symbol TXIE = PIE1.4   ' USART Transmit Interrupt EnableSymbol TXIF = PIR1.4   ' USART Transmit Interrupt Flag                                                                   dim deger as byteDim SAYAC As ByteDim SN As ByteDim DAK As Byte                            Clear                           ' BÜTÜN DEĞİŞKENLERİ TEMİZLE                                       '-------------------------- USART interrupt settings -------------------TXIE = 1    ' USART transmit interrupt enable PEIE = 1    ' Peripheral interrupt enableGIE = 1    ' Global interrupt enable                                                                   ON_INTERRUPT goto  Int_LabelGoto  MainProgram                                                                   '-------------------------- Interrupt--------------------------                                                                   Int_Label:Context Save hserout [#deger]                  '                                                                                                     Context Restore                ' Return from the interrupt subroutine                                                                    '-------------------------- Main program -------------------------                                                                   MainProgram:print at 1,1,"deger = ",#deger                                                                                                                                                                                                        Goto  MainProgram end' <<<<<<<<<<<<<<<<<<<<<<<<<<<<< TIMER0 KESME >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Disable KESME:SAYAC=SAYAC+1 If SAYAC=99 Then SAYAC=0 SN=SN+1 If SN=60 Then SN=0 DAK=DAK+1 If DAK=60 Then DAK=0EndIf EndIfEndIf INTCON.2=0 ResumeEnable 

gergy

Ne yapmak istediğinizi anlamadım ancak internal osilatör ile genelde usart haberleşmede sorunlar yaşanabiliyor. Harici osilatör kullanarak başlayın derim. Programınızı detaylı incelemedim, fakat usart ayarları yanlış gibi geldi, 8 bit için ayarları aşağı ekledim. USART ayarlarında hem deklerasyon hem register ayarlarını yazmışsınız, birinin üzerinden gitmeniz daha doğru olur. Kesme ayarları birden fazla tekrarlanmış ve anlamadığım timer 0 kullanılrken neden timer1 kesmesi aktive edilmiş. Program sanırım kopyala-yapıştır hazırlanmış, herbir kısmı ayrı ayrı yerlerden alınıp yapıştırılmış gibi, keza kesme kısmı donanımsal kesme olarak başlanmış ancak timer kesmesi yazılımsal kesmeye göre yazılmış (yapıştırılmış). Kesmeye girilince hangisi için hangi işlemin yapılacağı belli değil. FSR_Context_Save deklerasyonu proton'un son sürümünde yok diye biliyorum. Özetle ne yapmak istediğiniz tam olarak belli değil. Seri veri ile haberleşme amacınız ise siz sadece seri veri göndermeye çalışmışsınız ki onu da kesmeleri doğru kullanmadan yapmaya kalkışmışsınız. Proton'un kendi örnek klasöründe usart ile ilgili detaylı örnekler mevcut, bir inceleyin derim.

Hserial_RCSTA = 144 ; Enable continuous receiveHserial_TXSTA = 32  ; Enable transmit, BRGH = 0Hserial_SPBRG = 103 ; Baud Rate Generator ValueHserial_Clear = On  ; Clear overflow automati



Powered by EzPortal