05 Aralık 2021, 19:31:04

Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d


Uart RS232

Başlatan ademtosun58, 17 Nisan 2017, 23:52:18

ademtosun58

Arkadaşlar İyi günler rs232 ile haberleşme yapacağım.Elimde uart.h kütüphanesi mevcut pic18f4620 kullanıyorum ama kütüphaneyi nasıl kullanacagımı bilmiyorum.Aşağıda kodu paylaştım bana yazı yazdırma ve switch case ile bir uygulama konusunda yardımcı olabilirmisiniz./*
 * File:   uart.c
 * Author: adem
 *
 * Created on 17 Nisan 2017 Pazartesi, 20:25
 */


#include "Includes.h"
char UART_Init(const long int baudrate)
{
   
unsigned int x;
   
= (_XTAL_FREQ baudrate*64)/(baudrate*64);
   if(
x>255)
   {
      
= (_XTAL_FREQ baudrate*16)/(baudrate*16);
      
BRGH 1;
   }
   if(
x<256)
   {
     
SPBRG x;
     
SYNC 0;
     
SPEN 1;
          
TRISC7 1;
          
TRISC6 1;
          
CREN 1;
          
TXEN 1;
     return 
1;
   }
   return 
0;
}

char UART_TX_Empty()
{
  return 
TRMT;
}

char UART_Data_Ready()
{
   return 
RCIF;
}
char UART_Read()
{
 
  while(!
RCIF);
  return 
RCREG;
}

void UART_Read_Text(char *Outputunsigned int length)
{
   
unsigned int i;
   for(
int i=0;i<length;i++)
      
Output[i] = UART_Read();
}

void UART_Write(char data)
{
  while(!
TRMT);
  
TXREG data;
}

void UART_Write_Text(char *text)
{
  
int i;
  for(
i=0;text[i]!='\0';i++)
     
UART_Write(text[i]);
}

mehmet

Yazı yazdırma derken?

skara1214

arkadaş emeklemeden koşmak istiyor
Herkes ölür ama herkes gerçekten yaşamaz

ademtosun58

Alıntı yapılan: skara1214 - 18 Nisan 2017, 16:19:39
arkadaş emeklemeden koşmak istiyor

yok hocam derdim şu aslında bir sistemim var sıcaklık,halleffect,role  ile ilgili kontrol ve ölçümler yapıyorum ama rs232 ile bağlantı kurdugumda bu ölçümleri görmek istiyorum,Terminale normal birşey yazdırabiliyorum ama ölçülen değerleri göremiyorum.Hani emeklemeden koşmak gibi bir istegim yok açıklama kısmına yanlış aktarmışım.

switch case ile bir şey yaptım hangi değeri girersem o işlemi terminale bassın diye ama bir türlü olmadı.

skara1214

printf komutunu inceleyin o zaman
Herkes ölür ama herkes gerçekten yaşamaz

mehmet

18 Nisan 2017, 23:21:46 #5 Son düzenlenme: 18 Nisan 2017, 23:58:35 mehmet
Bu işe yaramaz mı?

/*
 * File:   main.c
 * Author: mbmb
 *
 * Created on 18 Nisan 2017 Salı, 02:04
 */



// PIC18F4620 Configuration Bit Settings

// 'C' source line config statements

// CONFIG1H
#pragma config OSC = INTIO67    // Oscillator Selection bits (Internal oscillator block, port function on RA6 and RA7)
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
#pragma config IESO = OFF       // Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)

// CONFIG2L
#pragma config PWRT = ON        // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bits (Brown-out Reset enabled and controlled by software (SBOREN is enabled))
#pragma config BORV = 3         // Brown Out Reset Voltage bits (Minimum setting)

// CONFIG2H
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit))
#pragma config WDTPS = 32768    // Watchdog Timer Postscale Select bits (1:32768)

// CONFIG3H
#pragma config CCP2MX = PORTC   // CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
#pragma config PBADEN = ON      // PORTB A/D Enable bit (PORTB<4:0> pins are configured as analog input channels on Reset)
#pragma config LPT1OSC = OFF    // Low-Power Timer1 Oscillator Enable bit (Timer1 configured for higher power operation)
#pragma config MCLRE = OFF      // MCLR Pin Enable bit (RE3 input pin enabled; MCLR disabled)

// CONFIG4L
#pragma config STVREN = ON      // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
#pragma config LVP = OFF        // Single-Supply ICSP Enable bit (Single-Supply ICSP disabled)
#pragma config XINST = OFF      // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))

// CONFIG5L
#pragma config CP0 = ON         // Code Protection bit (Block 0 (000800-003FFFh) code-protected)
#pragma config CP1 = ON         // Code Protection bit (Block 1 (004000-007FFFh) code-protected)
#pragma config CP2 = ON         // Code Protection bit (Block 2 (008000-00BFFFh) code-protected)
#pragma config CP3 = ON         // Code Protection bit (Block 3 (00C000-00FFFFh) code-protected)

// CONFIG5H
#pragma config CPB = ON         // Boot Block Code Protection bit (Boot block (000000-0007FFh) code-protected)
#pragma config CPD = ON         // Data EEPROM Code Protection bit (Data EEPROM code-protected)

// CONFIG6L
#pragma config WRT0 = ON        // Write Protection bit (Block 0 (000800-003FFFh) write-protected)
#pragma config WRT1 = ON        // Write Protection bit (Block 1 (004000-007FFFh) write-protected)
#pragma config WRT2 = ON        // Write Protection bit (Block 2 (008000-00BFFFh) write-protected)
#pragma config WRT3 = ON        // Write Protection bit (Block 3 (00C000-00FFFFh) write-protected)

// CONFIG6H
#pragma config WRTC = ON        // Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) write-protected)
#pragma config WRTB = ON        // Boot Block Write Protection bit (Boot Block (000000-0007FFh) write-protected)
#pragma config WRTD = ON        // Data EEPROM Write Protection bit (Data EEPROM write-protected)

// CONFIG7L
#pragma config EBTR0 = ON       // Table Read Protection bit (Block 0 (000800-003FFFh) protected from table reads executed in other blocks)
#pragma config EBTR1 = ON       // Table Read Protection bit (Block 1 (004000-007FFFh) protected from table reads executed in other blocks)
#pragma config EBTR2 = ON       // Table Read Protection bit (Block 2 (008000-00BFFFh) protected from table reads executed in other blocks)
#pragma config EBTR3 = ON       // Table Read Protection bit (Block 3 (00C000-00FFFFh) protected from table reads executed in other blocks)

// CONFIG7H
#pragma config EBTRB = ON       // Boot Block Table Read Protection bit (Boot Block (000000-0007FFh) protected from table reads executed in other blocks)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>


#define _XTAL_FREQ      8000000UL

#define UART_RX         PORTCbits.RC7
#define UART_TX         PORTCbits.RC6
#define UART_RX_IO      TRISCbits.TRISC7
#define UART_TX_IO      TRISCbits.TRISC6


unsigned char UART_Init(const unsigned long int baudrate)
{
   
unsigned int x;
   
   
= (_XTAL_FREQ baudrate 64) / (baudrate 64);
   
   if(
255)
   {
      
= (_XTAL_FREQ baudrate 16) / (baudrate 16);
      
BRGH 1;
   }
   
   if(
256)
   {
        
SPBRG x;
        
SYNC  0;
        
SPEN  1;
              
//TRISC7 = 1;
        //TRISC6 = 1;
        
UART_RX_IO 0b1;
        
UART_TX_IO 0b1;

        
CREN 1;
        
TXEN 1;
        return 
1;
   }
   return 
0;
}

unsigned char UART_TX_Empty(void)
{
  return 
TRMT;
}

unsigned char UART_Data_Ready(void)
{
   return 
RCIF;
}

unsigned char UART_Read(void)
{
  while(!
RCIF);
  return 
RCREG;
}

void UART_Read_Text(unsigned char *Outputunsigned int length)
{
   
unsigned int i;
   for(
0lengthi++)
      
Output[i] = UART_Read();
}

void UART_Write(unsigned char data)
{
  while(!
TRMT);
  
TXREG data;
}

void UART_Write_Text(const unsigned char *text)
{
  
int i;
  for(
0text[i] != '\0'i++)
     
UART_Write(text[i]);
}

void mcuInit(void)
{
    
OSCCONbits.IRCF 0b111;        //8Mhz
    
    
CMCONbits.CM 0b111;           //Komparatorler kapali
    
    
ADCON0bits.ADON 0b0;          //ADC kapali
    
ADCON1bits.PCFG 0b1111;       //Tüm pinler dijital

    //Giris cıkış işlemleri
    
PORTA 0x00;
    
TRISA 0x00;

    
PORTB 0x00;
    
TRISB 0x00;
    
    
PORTC 0x00;
    
TRISC 0x00;
    
    
PORTD 0x00;
    
TRISD 0x00;
    
    
PORTE 0x00;
    
TRISE 0x00;
}

void main(void)
{
    const 
unsigned char *txt0 "\n\r";
    const 
unsigned char *txt1 "Saat    ";
    const 
unsigned char *txt2 "Sicaklik";
    const 
unsigned char *txt3 "ADC     ";
    const 
unsigned char *txt4 "...Okunan Degerler...";
    const 
unsigned char drc   176;
    
    
unsigned char say 0;
    
    
    
mcuInit();
    
__delay_ms(50);
    
UART_Init(9600);
    
    
    while(
1)
    {
        switch(
say++)
        {
        case 
0:
            
UART_Write_Text(txt4);
            
UART_Write_Text(txt0);
            break;
        case 
1:
            
UART_Write_Text(txt1);
            
UART_Write_Text("  : ");
            
UART_Write_Text("12:34:56");
            
UART_Write_Text(txt0);
            break;
        case 
2:
            
UART_Write_Text(txt2);
            
UART_Write_Text("1 : ");
            
UART_Write_Text("15");
            
UART_Write(drc);
            
UART_Write_Text("C");
            
UART_Write_Text(txt0);
            break;
        case 
3:
            
UART_Write_Text(txt2);
            
UART_Write_Text("2 : ");
            
UART_Write_Text("17");
            
UART_Write(drc);
            
UART_Write_Text("C");
            
UART_Write_Text(txt0);
            break;
        case 
4:
            
UART_Write_Text(txt2);
            
UART_Write_Text("3 : ");
            
UART_Write_Text("23");
            
UART_Write(drc);
            
UART_Write_Text("C");
            
UART_Write_Text(txt0);
            break;
        case 
5:                
            
UART_Write_Text(txt3);
            
UART_Write_Text("1 : ");
            
UART_Write_Text("150");
            
UART_Write_Text(txt0);
            break;
        case 
6:
            
UART_Write_Text(txt3);
            
UART_Write_Text("2 : ");
            
UART_Write_Text("675");
            
UART_Write_Text(txt0);
            break;
        case 
7:
            
UART_Write_Text(txt3);
            
UART_Write_Text("3 : ");
            
UART_Write_Text("1020");
            
UART_Write_Text(txt0);
            break;
        case 
8:
            
say 0;
            
UART_Write_Text(txt0);
            break;
        default:
            break;
        }
        
        
__delay_ms(200);
    }
}

ademtosun58

Alıntı yapılan: mehmet - 18 Nisan 2017, 23:21:46
Bu işe yaramaz mı?

/*
 * File:   main.c
 * Author: mbmb
 *
 * Created on 18 Nisan 2017 Salı, 02:04
 */



// PIC18F4620 Configuration Bit Settings

// 'C' source line config statements

// CONFIG1H
#pragma config OSC = INTIO67    // Oscillator Selection bits (Internal oscillator block, port function on RA6 and RA7)
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
#pragma config IESO = OFF       // Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)

// CONFIG2L
#pragma config PWRT = ON        // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bits (Brown-out Reset enabled and controlled by software (SBOREN is enabled))
#pragma config BORV = 3         // Brown Out Reset Voltage bits (Minimum setting)

// CONFIG2H
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit))
#pragma config WDTPS = 32768    // Watchdog Timer Postscale Select bits (1:32768)

// CONFIG3H
#pragma config CCP2MX = PORTC   // CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
#pragma config PBADEN = ON      // PORTB A/D Enable bit (PORTB<4:0> pins are configured as analog input channels on Reset)
#pragma config LPT1OSC = OFF    // Low-Power Timer1 Oscillator Enable bit (Timer1 configured for higher power operation)
#pragma config MCLRE = OFF      // MCLR Pin Enable bit (RE3 input pin enabled; MCLR disabled)

// CONFIG4L
#pragma config STVREN = ON      // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
#pragma config LVP = OFF        // Single-Supply ICSP Enable bit (Single-Supply ICSP disabled)
#pragma config XINST = OFF      // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))

// CONFIG5L
#pragma config CP0 = ON         // Code Protection bit (Block 0 (000800-003FFFh) code-protected)
#pragma config CP1 = ON         // Code Protection bit (Block 1 (004000-007FFFh) code-protected)
#pragma config CP2 = ON         // Code Protection bit (Block 2 (008000-00BFFFh) code-protected)
#pragma config CP3 = ON         // Code Protection bit (Block 3 (00C000-00FFFFh) code-protected)

// CONFIG5H
#pragma config CPB = ON         // Boot Block Code Protection bit (Boot block (000000-0007FFh) code-protected)
#pragma config CPD = ON         // Data EEPROM Code Protection bit (Data EEPROM code-protected)

// CONFIG6L
#pragma config WRT0 = ON        // Write Protection bit (Block 0 (000800-003FFFh) write-protected)
#pragma config WRT1 = ON        // Write Protection bit (Block 1 (004000-007FFFh) write-protected)
#pragma config WRT2 = ON        // Write Protection bit (Block 2 (008000-00BFFFh) write-protected)
#pragma config WRT3 = ON        // Write Protection bit (Block 3 (00C000-00FFFFh) write-protected)

// CONFIG6H
#pragma config WRTC = ON        // Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) write-protected)
#pragma config WRTB = ON        // Boot Block Write Protection bit (Boot Block (000000-0007FFh) write-protected)
#pragma config WRTD = ON        // Data EEPROM Write Protection bit (Data EEPROM write-protected)

// CONFIG7L
#pragma config EBTR0 = ON       // Table Read Protection bit (Block 0 (000800-003FFFh) protected from table reads executed in other blocks)
#pragma config EBTR1 = ON       // Table Read Protection bit (Block 1 (004000-007FFFh) protected from table reads executed in other blocks)
#pragma config EBTR2 = ON       // Table Read Protection bit (Block 2 (008000-00BFFFh) protected from table reads executed in other blocks)
#pragma config EBTR3 = ON       // Table Read Protection bit (Block 3 (00C000-00FFFFh) protected from table reads executed in other blocks)

// CONFIG7H
#pragma config EBTRB = ON       // Boot Block Table Read Protection bit (Boot Block (000000-0007FFh) protected from table reads executed in other blocks)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>


#define _XTAL_FREQ      8000000UL

#define UART_RX         PORTCbits.RC7
#define UART_TX         PORTCbits.RC6
#define UART_RX_IO      TRISCbits.TRISC7
#define UART_TX_IO      TRISCbits.TRISC6


unsigned char UART_Init(const unsigned long int baudrate)
{
   
unsigned int x;
   
   
= (_XTAL_FREQ baudrate 64) / (baudrate 64);
   
   if(
255)
   {
      
= (_XTAL_FREQ baudrate 16) / (baudrate 16);
      
BRGH 1;
   }
   
   if(
256)
   {
        
SPBRG x;
        
SYNC  0;
        
SPEN  1;
              
//TRISC7 = 1;
        //TRISC6 = 1;
        
UART_RX_IO 0b1;
        
UART_TX_IO 0b1;

        
CREN 1;
        
TXEN 1;
        return 
1;
   }
   return 
0;
}

unsigned char UART_TX_Empty(void)
{
  return 
TRMT;
}

unsigned char UART_Data_Ready(void)
{
   return 
RCIF;
}

unsigned char UART_Read(void)
{
  while(!
RCIF);
  return 
RCREG;
}

void UART_Read_Text(unsigned char *Outputunsigned int length)
{
   
unsigned int i;
   for(
0lengthi++)
      
Output[i] = UART_Read();
}

void UART_Write(unsigned char data)
{
  while(!
TRMT);
  
TXREG data;
}

void UART_Write_Text(const unsigned char *text)
{
  
int i;
  for(
0text[i] != '\0'i++)
     
UART_Write(text[i]);
}

void mcuInit(void)
{
    
OSCCONbits.IRCF 0b111;        //8Mhz
    
    
CMCONbits.CM 0b111;           //Komparatorler kapali
    
    
ADCON0bits.ADON 0b0;          //ADC kapali
    
ADCON1bits.PCFG 0b1111;       //Tüm pinler dijital

    //Giris cıkış işlemleri
    
PORTA 0x00;
    
TRISA 0x00;

    
PORTB 0x00;
    
TRISB 0x00;
    
    
PORTC 0x00;
    
TRISC 0x00;
    
    
PORTD 0x00;
    
TRISD 0x00;
    
    
PORTE 0x00;
    
TRISE 0x00;
}

void main(void)
{
    const 
unsigned char *txt0 "\n\r";
    const 
unsigned char *txt1 "Saat    ";
    const 
unsigned char *txt2 "Sicaklik";
    const 
unsigned char *txt3 "ADC     ";
    const 
unsigned char *txt4 "...Okunan Degerler...";
    const 
unsigned char drc   176;
    
    
unsigned char say 0;
    
    
    
mcuInit();
    
__delay_ms(50);
    
UART_Init(9600);
    
    
    while(
1)
    {
        switch(
say++)
        {
        case 
0:
            
UART_Write_Text(txt4);
            
UART_Write_Text(txt0);
            break;
        case 
1:
            
UART_Write_Text(txt1);
            
UART_Write_Text("  : ");
            
UART_Write_Text("12:34:56");
            
UART_Write_Text(txt0);
            break;
        case 
2:
            
UART_Write_Text(txt2);
            
UART_Write_Text("1 : ");
            
UART_Write_Text("15");
            
UART_Write(drc);
            
UART_Write_Text("C");
            
UART_Write_Text(txt0);
            break;
        case 
3:
            
UART_Write_Text(txt2);
            
UART_Write_Text("2 : ");
            
UART_Write_Text("17");
            
UART_Write(drc);
            
UART_Write_Text("C");
            
UART_Write_Text(txt0);
            break;
        case 
4:
            
UART_Write_Text(txt2);
            
UART_Write_Text("3 : ");
            
UART_Write_Text("23");
            
UART_Write(drc);
            
UART_Write_Text("C");
            
UART_Write_Text(txt0);
            break;
        case 
5:                
            
UART_Write_Text(txt3);
            
UART_Write_Text("1 : ");
            
UART_Write_Text("150");
            
UART_Write_Text(txt0);
            break;
        case 
6:
            
UART_Write_Text(txt3);
            
UART_Write_Text("2 : ");
            
UART_Write_Text("675");
            
UART_Write_Text(txt0);
            break;
        case 
7:
            
UART_Write_Text(txt3);
            
UART_Write_Text("3 : ");
            
UART_Write_Text("1020");
            
UART_Write_Text(txt0);
            break;
        case 
8:
            
say 0;
            
UART_Write_Text(txt0);
            break;
        default:
            break;
        }
        
        
__delay_ms(200);
    }
}


Hocam öncelikle teşekkür ederim.Benim istediğim bu şekilde değil ama ilk başta istegimi yanlı aktarmışım ve vaktinizi harcadıgım için özür dilerim.Benim yapmak istedigim şey  Terminal den 1 karakter yollayıp (1,2,3 gibi) ekrana o karakter ile ilgili verileri almak istiyorum.


char say
;

void main()

{
UART_init(9600);

while (
1)
{
say=UART_Read();

switch(
say)
{
case 
'1':
sicaklik();
break;
}
}
}








bazı şeyleri yazmadım buraya ama kalıp bu şekilde bir şey ile uğraştım.Ama bir sonuç alamadım.Bunu nasıl yapmam gerekiyor bu konuda bir yardım bekliyordum.

mehmet

Yapı bu şekilde, geri kalan fonksiyonları da siz anlayıp,
çalıştırabilirsiniz.

Okurken her hangi bir anda 1, 2, vs. gibi sayılar gelebilir.
Bunu aşmak için "header" eklenir. Mesela;  siz "1" girersiniz.
Ancak "adem1" yollanır. Dolayısıyla hatta tekrar eden veri
en aza indirilir. Çözerken de önce "header" doğru mu? ona
bakarsınız. Sonra gelen değere göre dallanma yapılır.

Önceliğiniz veri okuma kısmını halledin.

ademtosun58

Alıntı yapılan: mehmet - 19 Nisan 2017, 01:02:35
Yapı bu şekilde, geri kalan fonksiyonları da siz anlayıp,
çalıştırabilirsiniz.

Okurken her hangi bir anda 1, 2, vs. gibi sayılar gelebilir.
Bunu aşmak için "header" eklenir. Mesela;  siz "1" girersiniz.
Ancak "adem1" yollanır. Dolayısıyla hatta tekrar eden veri
en aza indirilir. Çözerken de önce "header" doğru mu? ona
bakarsınız. Sonra gelen değere göre dallanma yapılır.

Önceliğiniz veri okuma kısmını halledin.


Hocam Hala okuma okuma kısmını halledemedim acaba kütüphanemde bi eksik mi var daha önce hiç bu tip şeylerle uğrasmadıgım için işin içinden çıkamıyorum.Amacım switch case gibi bir yapıda terminalde değer girip o işlemi yaptırmak istiyorum.Ama bir türlü değer giremedm.


Yasal Uyarı: Picproje.org sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.Knın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Picproje.org hakkında yapılacak tüm hukuksal şikayetleri İletişim sayfamızdan bize bildirdikten en geç 3 (üç) iş günü içerisinde ilgili kanunlar ve yönetmelikler çerçevesinde tarafımızca incelenerek gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.