Thông báo

Collapse
No announcement yet.

Giúp đỡ LCD+89s52 giao tiếp cổng COM

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

  • Giúp đỡ LCD+89s52 giao tiếp cổng COM

    Mình đang làm 1 đề tài nhỏ về LCD+89s52 giao tiếp COM.
    Khi mình viết bằng ASM thì chạy tốt,nhưng khi chuyển qua viết bằng C(dùng Keil C) thì xảy ra tình trạng LCD chỉ xuất ký tự đầu tiên trong đoạn text (trên phần mềm tự viết) tui mìnhvào.

    void nhan(void) interrupt 4 //Chuong trinh con dung ngat noi tiep
    {
    unsigned char data ch;
    if(RI!=0)
    {

    ch=SBUF;
    LCDWriteCmd(0xC0);//Hien thi o dong thu 2

    RS=1;
    RW=0;
    LCD_PORT=ch;
    E=1;
    E=0;
    delay_5ms();

    RI=0;

    }
    }
    Nếu dùng ASM thì đoạn chương trình tương tự trên chạy tốt,vậy tại sao trong C thì nó chỉ xuất hiện ký tự đầu tiên,chẳng lẽ mình phải cần đếm số ký tự rồi xuất từng ký tự ra sao???
    Ai giúp mình với!!!

  • #2
    Nguyên văn bởi quangtho1413 Xem bài viết
    Mình đang làm 1 đề tài nhỏ về LCD+89s52 giao tiếp COM.
    Khi mình viết bằng ASM thì chạy tốt,nhưng khi chuyển qua viết bằng C(dùng Keil C) thì xảy ra tình trạng LCD chỉ xuất ký tự đầu tiên trong đoạn text (trên phần mềm tự viết) tui mìnhvào.

    void nhan(void) interrupt 4 //Chuong trinh con dung ngat noi tiep
    {
    unsigned char data ch;
    if(RI!=0)
    {

    ch=SBUF;
    LCDWriteCmd(0xC0);//Hien thi o dong thu 2

    RS=1;
    RW=0;
    LCD_PORT=ch;
    E=1;
    E=0;
    delay_5ms();

    RI=0;

    }
    }
    Nếu dùng ASM thì đoạn chương trình tương tự trên chạy tốt,vậy tại sao trong C thì nó chỉ xuất hiện ký tự đầu tiên,chẳng lẽ mình phải cần đếm số ký tự rồi xuất từng ký tự ra sao???
    Ai giúp mình với!!!
    đã dùng ngắt roy mà còn kiểm tra cờ RI . pó tay . Nếu dùng ngắt thì
    Code:
    void nhan(void) interrupt 4	  //Chuong trinh con dung ngat noi tiep
    {
    
    	LCDWriteCmd(0xC0);//Hien thi o dong thu 2
    		
            RS=1;RW=0;
           LCD_PORT=SBUF;
     	E=1;
     	E=0;
     	delay_5ms();
    
    }
    nếu k dùng ngắt , ta làm như sau
    Code:
    main()
    { while (1)
      { if(RI) 
            {RI=0 ; 
             if(SBUF!=0)
             {LCD_PORT = SBUF ; RS=1 ; RW=0 ; E=1 ; E=0 ; delay_ms(1);};
            };
      }
    }

    Comment


    • #3
      đã dùng ngắt roy mà còn kiểm tra cờ RI . pó tay . Nếu dùng ngắt thì
      [code]
      void nhan(void) interrupt 4 //Chuong trinh con dung ngat noi tiep
      {

      LCDWriteCmd(0xC0);//Hien thi o dong thu 2

      RS=1;RW=0;
      LCD_PORT=SBUF;
      E=1;
      E=0;
      delay_5ms();

      }
      Nhưng khi dùng ngắt thì cũng phải CLR RI phải không?Như vậy đoạn chương trình có thiếu RI=0?
      Mà khi dùng ngắt nếu thêm kiểm tra RI=0 thì đoạn chương trình thừa thôi hay ảnh hưởng gì nữa???
      Thời gian gấp quá nên mình quay lại viết bằng ASM nhưng cũng muốn tìm hiểu thêm

      Comment

      Về tác giả

      Collapse

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

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

      Collapse

      Đang tải...
      X