Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Seri port

Başlatan bbs2006, 11 Ocak 2014, 20:39:55

bbs2006

Merhaba;
Proteus programında 16f877 mikrodenetleyicisini kullanarak seri iletişim yapmaya çalışıyorum. Mikrodenetleyicinin pin_a5 pinine ağlı butona bastığımız zaman 0xAA  bilgisini c# yazdığım programa gönderecek ve butonun rengini değiştirmesini istiyorum. veriyi gönderiyorum ancak c# programında hiç bir değişiklik yok.

ccs kodları
#include <16F877.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_e1,rcv=PIN_e2,bits=8)
//#use rs232(baud=9600,parity=N,xmit=PIN_e1,rcv=PIN_e2,bits=8)
#include <LCD420.C>

//char x;
/*
veri(){
  char  x[80];
 
   gets(x);

   if(x[0]=='1'){
 
   output_c(0x01);

  }
    if(x[0]=='2'){
 
   output_c(0x00);

  }
 
   return;
}
*/
void main(){                           //Ana Fonksiyon.
   
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
while(1){

if(!input(pin_a5)){

output_high(pin_C2);
putc(0xaa);
}

//veri();


}}

c# kodları


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace seri_1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
                      serialPort1.Open();


            string Gelen = serialPort1.ReadLine();

            if (Gelen == "0xaa")
            {
                button2.BackColor = Color.Red;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (!serialPort1.IsOpen)
            {
                serialPort1.Open();
            }
            string veri = textBox1.Text;
            serialPort1.WriteLine(veri +(char)13);

            serialPort1.Close();


      }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (!serialPort1.IsOpen)
            {
                serialPort1.Open();
            }
            serialPort1.Write("2 "+ (char)13);
            serialPort1.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (!serialPort1.IsOpen)
            {
                serialPort1.Open();
            }
            serialPort1.Write("1"+ (char)13);
            serialPort1.Close();



        }
    }
}



Ali_54

#1
Gelen == "0xaa"

picden data bu şekilde gelmez. hex olarak yollamışsın. string olarak almaya çalışmışsın. asci tablosuna göre karşılığını bulman gerekiyor. integer olarak veya char tipinde alman lazım
1 harf öğretenin 4 gün kölesi olurum.

bbs2006

printf("%u",66);

şeklinde göndersem olurmu. ayrıca pic veriyi gönderiyor. ancak c#programı almıyor. sebebini araştırıyorum. bulamadım. e-mailinizi versenizde dosyaları göndersem olurmu.

kudretuzuner

Merhaba,
C# da nasıldır bilemiyorum ama VB.net ile yazılmış programlarda PIC'in HEX'31' larak yolladığı klavye "1" rakkamını VB.Net'te DEC49 olarak okursunuz.Böylece yollanan hex bilgilerin dec değerlerini bularak programa öyle sorgulatınız.Kolay gelsin.
http://www.asciitable.com/
Amatör

bbs2006

Merhaba
aşağıda c# kodlarını veriyorum.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace seeeriiii
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (!serialPort1.IsOpen)
            {
                serialPort1.Open();
            }
            serialPort1.Write("2 " + (char)13);
            serialPort1.Close();
        }
        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            //serialPort1.ReadTimeout = 300;
          //  textBox1.Text = serialPort1.ReadExisting();

            string bilgi;
            bilgi = serialPort1.ReadLine();
            //textBox1.Text += serialPort1.ReadByte().ToString("al");
            if (Convert.ToDecimal(bilgi) == 56)
            {
                MessageBox.Show("geldi");
            }
       
        }     
    }
}

ccsc kodları


#include <16F877.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_e1,rcv=PIN_e2,bits=8)
//#use rs232(baud=9600,parity=N,xmit=PIN_e1,rcv=PIN_e2,bits=8)
#include <LCD420.C>

//char x;

veri(){
  char  x[80];
 
   gets(x);

   if(x[0]=='2'){
 
   output_c(0x01);
   //output_high(pin_C2);
//  puts("al");
   printf("%u",8);
  delay_ms(500);


   }
         return;
}

void main(){                           //Ana Fonksiyon.
   
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
while(1){
//printf("%u",8);
//delay_ms(1000);
//puts("b");
veri();
}}




//veri();



ben  butona bastığım zaman led yanacak led yandığı zaman c# veri gönderecek. picten veri gönderme işini yapamadım. yardımcı olursanız sevinirim.