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

      • Andrea14
        Vấn đề về tốc độ quay
        bởi Andrea14
        Chào mọi người,

        Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
        Hôm qua, 12:42
      • bqviet
        Trả lời cho Đấu tắt điện cho máy tính bảng
        bởi bqviet
        Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
        06-12-2025, 17:17
      • nguyendinhvan
        Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
        bởi nguyendinhvan
        Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
        05-12-2025, 19:59
      • afrendly
        Trả lời cho Đấu tắt điện cho máy tính bảng
        bởi afrendly
        Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
        04-12-2025, 01:27
      Đang tải...
      X