Thông báo

Collapse
No announcement yet.

Giao tiếp máy tính với 89c51?

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

  • Giao tiếp máy tính với 89c51?

    hi mọi người cho mình hỏi tại sao mình phải click đến 2 lần nút gửi(trong vb6.0)lần thì vòng lặp while (chương trình nạp cho vdk ) mới hoạt động lần thứ nhất nó gửi dữ liệu đến vdk kiểm tra dữ liệu trên vdk prot P0 nhân đươc là ok mình click đến lần 2(chuong trình vb6.0) thì dữ liệu mới cho ra cỗng P1 (tuc là khi clik lần 2 thì vòng lặp while trong vdk 89 mới hoạt đọng) cho mình hỏi tại sao như vậy các pác xem hộ rùi cho ý kiến nha giúp mình tí
    Click image for larger version

Name:	untitled.JPG
Views:	1
Size:	183.0 KB
ID:	1413654
    #include <REGX51.H>
    #include <stdio.h>
    //=========================
    #define led1 P0_0
    #define led2 P0_1
    #define led3 P0_2
    #define led4 P0_3
    #define led5 P0_4
    #define led6 P0_5
    #define led7 P0_6
    #define led8 P0_7

    //=========================
    int i;
    char c[10],ch1,ch2;
    //==========================
    void delay(int t)
    {
    while(t--);
    }
    void SetupSerial()
    {
    SCON = 0x52; /* Che do 1: 8-bit UART, cho phep truyen */
    TMOD = 0x20; /* timer 1 che do 2: 8-Bit tu dong nap lai. */
    TH1 = 0xfd ; /* toc do 9600 baud */
    TL1 = 0xfd ;
    TI = 0; /* co ngat nha^n.=0*/
    RI=0; /* co ngat' truye^n =0*/
    TR1 = 1; /* timer 1 run */
    ES =1; /* cho phep ngat noi tiep */
    EA = 1 ;
    }
    void NhanData() interrupt 4
    {
    unsigned int i;
    if (RI)
    {
    ES=0;

    for (i = 0; i < 9; i++)
    {
    while (!RI);
    RI = 0;
    c[i] = SBUF;
    if (c[i]==65) led1=0; //kiem tra du lieu nhan duoc tren cong P0
    if (c[i]==66) led2=0;
    if (c[i]==67) led3=0;
    if (c[i]==68) led4=0;
    if (c[i]==69) led5=0;
    if (c[i]==70) led6=0;
    if (c[i]==71) led7=0;
    if (c[i]==72) led8=0;
    if (c[i]==73)
    {
    P0=0xFF;
    }
    }
    }


    }

    //===========================
    void main()
    {
    int i;
    SetupSerial(); //Khoi tao cac thong so cho truyen thong noi tiep

    //Cho phep ngat nhung chi? có ngat noi tiep duoc dung trong code nay
    while(1)//xu li du lieu sau khi nhan duoc
    {
    for(i=0;i<=8;i++)
    {
    P1=c[i];
    delay(10000);
    }

    }

    }

  • #2
    chương trình ngắt bạn viết chưa hợp lý ! vì ngắt được viết theo nguyên tắc càng ngắn càng tốt ! bạn nên kiểm tra kỹ ! nếu bạn truyền theo chuỗi ( nhiều ký tự liên tiếp) thì nên sử dụng bộ đệm !
    lập trình vi điều khiển 8051 - avr - pic- thiết kế mạch điện tử

    Học Hiểu Nguyên Tắc - Tuân Theo Nguyên Tắc - Giải Trừ Nguyên Tắc

    Comment


    • #3
      sao hong co ai biet ha beo nheo zay nhan tai di dau het rui heo me heo me please!

      Comment

      Về tác giả

      Collapse

      sunbinbon Tìm hiểu thêm về sunbinbon

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

      Collapse

      Đang tải...
      X