Thông báo

Collapse
No announcement yet.

Cách thức gửi một số nguyên 16 bit xuống pic6f877a

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Cách thức gửi một số nguyên 16 bit xuống pic6f877a

    Khung truyền thông:

    STX + Command + Data + ETX

    Với:
    STX: 1 byte
    Command : 1 byte (Write: 'W')
    Data: 2 byte (byte thấp, byte cao)
    ETX: 1 byte

    Code:
    #include <16F877A.h>                  // PIC16F877 header file
    #use delay(clock=8000000)             // for 8Mhz crystal
    #fuses HS, NOWDT, NOPROTECT, NOLVP    // for debug mode
    #include "LCD_LIB.c"
    #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, stream=MYPC)
    
    int8 temp;
    int8 buffRev[5];// Bộ đệm nhận.
    int8 idx = 0; 
    unsigned int32 value = 0; // KẾT QUẢ
    
    void display();
    void Initialize();
    
    #INT_RDA 
    void serialPort_itr()
    {   
       if(0 != kbhit())
       { 
          temp = fgetc(MYPC);
          if(temp==0x02 || temp==0x03) // Nếu gặp ký tự STX hoặc ETX thì
          {
             if(buffRev[0] == 'W') // nếu là lệnh ghi(W) thì
             {
                / / byte cao = buffRev[1]*256, byte thấp = buffRev[2].
                value = buffRev[1]*256 + buffRev[2];
                LCD_clear();
             }                                   
             idx = 0;
             return;
          }
          buffRev[idx++]=temp; // gán dữ liệu vào bộ đệm nhận buffRev
       } 
    }
    
    void main(void)
    {
       Initialize();
       do
       {   
          display(); // Hiển thị K.Q
       }while(TRUE);
              
    }
    
    // Hàm khởi tạo mọi thứ.
    void Initialize()
    {
       enable_interrupts(INT_RDA); // cho phép ngắt truyền thông nối tiếp
       enable_interrupts(GLOBAL); // cho phép ngắt toàn cục
       lcd_init(); // Init LCD.
    }
    
    void display()
    {   
       lcd_gotoxy(1,1); 
       printf(lcd_putc, "16 bit: %ld", value);
    }
    
    
    
    =================================================
    
    VISUAL C# Source
    =================================================
    
    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;
    using System.IO.Ports;
    
    namespace HMI_PIC16F877A
    {
        public partial class FRMMAIN : Form
        {
    
            private const char STX = (char)2; // Start of text.
            private const char ETX = (char)3; // End of text.
    
            private string BufferRecv = "";
            private byte[] BuffSend;
            private SerialPort serialPort = null;
    
            public FRMMAIN()
            {
                InitializeComponent();
            }
    
            private void FRMMAIN_Load(object sender, EventArgs e)
            {
                Initialize();
            }
    
            private void FRMMAIN_FormClosed(object sender, FormClosedEventArgs e)
            {
                try
                {
                    if (serialPort.IsOpen) serialPort.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, ex.Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
    
            private void btnGui_Click(object sender, EventArgs e)
            {
    
                try
                {
                    char command = 'W'; // Lệnh ghi
                    UInt16 value = UInt16.Parse(txtGui.Text); // giá trị nguyên dương 16 bit.
                    BuffSend = new byte[5];
                    BuffSend[0] = (byte)STX;
                    BuffSend[1] = (byte)command;
                    BuffSend[2] = (byte)(value >> 8); // dịch sang phải 8 bit(byte cao).
                    BuffSend[3] = (byte)(value); //(byte thấp).
                    BuffSend[4] = (byte)ETX;
                    serialPort.Write(BuffSend, 0, BuffSend.Length); // gửi message này xuống PIC.
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, ex.Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);                                
                }
            }
    
            private void Initialize()
            {
                try
                {
                    serialPort = new SerialPort();
                    serialPort.PortName = "COM3";
                    serialPort.BaudRate = 9600;
                    serialPort.DataBits = 8;
                    serialPort.Parity = Parity.None;
                    serialPort.StopBits = StopBits.One;
                    if (serialPort.IsOpen) serialPort.Close();
                    serialPort.Open();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, ex.Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);                
                }
            }
        }
    }

    Example.zipClick image for larger version

Name:	PIC01.PNG
Views:	1
Size:	89.9 KB
ID:	1414807
    Last edited by katllu; 03-11-2012, 23:55.

  • #2
    Cám Ơn!!!!!!!!!!!!!!!!!!!!!!!!!!

    Comment


    • #3
      1000 lần cám ơn !

      Comment

      Về tác giả

      Collapse

      katllu THIẾT KẾ CÁC PHẦN MỀM ĐO ĐẠC, GIÁM SÁT VÀ ĐIỀU KHIỂN Tìm hiểu thêm về katllu

      Bài viết mới nhất

      Collapse

      Đang tải...
      X