Thông báo

Collapse
No announcement yet.

Hàm khởi tạo UART của Mikro C for 8051 bị lỗi

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

  • Hàm khởi tạo UART của Mikro C for 8051 bị lỗi

    Đang làm giao tiếp UART, định xử dụng Mikro C code 8051 phiên bản 2009 cho nhanh, ai ngờ loay hoay cả buổi chẳng xong. Cuối cùng mới phát hiện ra hàm khởi tạo UART bị lỗi.

    Mình gọi hàm như sau:

    UART1_Init(9600);

    mà nó không chạy .

    Giờ khắc phục được rùi, bạn nào bị lỗi tương tự có thể khác phục bằng cách dùng hàm sau thay thế đỡ:

    void UART_Init_9600()
    {
    SCON = 0x50;
    TMOD |= 0x20;
    TH1 = -3;
    TCON.B6 = 1;
    }

    Sau đó gọi nó trong phần khởi tạo của hàm main thay cho hàm UART1_Init(9600). Các hàm còn lại trong thư viện UART sử dụng bình thường.

  • #2
    Nguyên văn bởi dangemailbox Xem bài viết
    Đang làm giao tiếp UART, định xử dụng Mikro C code 8051 phiên bản 2009 cho nhanh, ai ngờ loay hoay cả buổi chẳng xong. Cuối cùng mới phát hiện ra hàm khởi tạo UART bị lỗi.

    Mình gọi hàm như sau:

    UART1_Init(9600);

    mà nó không chạy .

    Giờ khắc phục được rùi, bạn nào bị lỗi tương tự có thể khác phục bằng cách dùng hàm sau thay thế đỡ:

    void UART_Init_9600()
    {
    SCON = 0x50;
    TMOD |= 0x20;
    TH1 = -3;
    TCON.B6 = 1;
    }

    Sau đó gọi nó trong phần khởi tạo của hàm main thay cho hàm UART1_Init(9600). Các hàm còn lại trong thư viện UART sử dụng bình thường.
    Lỗi cái gì ? Có khi bạn tự làm lỗi thì có ... Tôi không dùng 8051 lâu lắm rồi ... Nhưng rất hay dùng MikroC ...

    Bạn Đã đánh dấu vào thư viện chưa ???

    --- Tôi vừa dùng con 89S51 test thử UART ... chạy ầm ầm !
    Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

    Comment


    • #3
      Trước khi dùng phải đánh dấu vào thư viện ! Click image for larger version

Name:	8051_UART.jpg
Views:	1
Size:	85.3 KB
ID:	1360446
      Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

      Comment


      • #4
        Code test thử UART !
        Code:
        char uart_rd;
        
        void main() {
        
          UART1_Init(9600);               // Initialize UART module at 4800 bps
          Delay_ms(100);                  // Wait for UART module to stabilize
            while (1) {                     // Endless loop
            if (UART1_Data_Ready()) {     // If data is received,
              uart_rd = UART1_Read();     //   read the received data,
              UART1_Write(uart_rd);       //   and send data via UART
            }
          }
        }
        Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

        Comment


        • #5
          Tất nhiên là phải đánh dấu thư viện mới biên dịch được, hi hi. Biên dịch được nhưng không truyền nhận được, ngay cả mình khi mình lấy đoạn code ví dụ của nó lun.
          Hoặc mình viết chương trình hello, world đơn giản như sau:

          void main() {
          UART1_Init(9600);
          UART1_Write_Text("Hello, world");
          while(1);
          }

          Chương trình thì quá đơn giản rùi, không thể sai được nhưng mô phỏng thử thì kết quả sai như sau:

          Click image for larger version

Name:	Mikro C bi loi.jpg
Views:	1
Size:	47.1 KB
ID:	1360461

          Mình dùng cả bộ MikroC nhưng chỉ có MikroC for 8051 là bị như dzầy thui bạn ah. Có thể phiên bản của bạn sử dụng khác chăng. có thể gửi cho mình được không? email của mình là dangemailbox@gmail.com, thanks!

          Source code + chương trình mô phỏng của mình:
          http://www.mediafire.com/download.php?nesb7773eo8iuoe
          Last edited by dangemailbox; 02-05-2012, 21:47.

          Comment


          • #6
            nhờ các tiền bối fix lỗi giúp em với
            PHP Code:
            ORG 0
            JMP START
            ORG    0030H
            START
            :    MOV IE,#00H
                
            MOV SCON,#50H
                
            MOV TMOD,#20H
                
            MOV TH1,#0FDH
                
            MOV IE,#00H
                
            CLR RI
                SETB TR1
                JNB RI
            ,$
                
            CLR RI
                MOV P0
            ,#0FFH
                
            MOV A,SBUF
                RET
            LED1
            :    CJNE A,#'A',LED2
                
            CLR P0.0
                CALL DELAY
                SETB P0.0
                JMP START
            LED2
            :    CJNE A,#'B',NHAY
                
            CLR P0.1
                CALL DELAY
                SETB P0.1
                JMP START
            NHAY
            :    CJNE A,#'C',EXIT
                
            CLR P0.0
                CALL DELAY
                CLR P0.1
                CALL DELAY
                SETB    P0.0
                SETB    P0.1
                JMP START
            EXIT:    RET
            DELAY
            :    MOV    R7,#10
            DELAY1:    MOV    R6,#200
            DELAY2:    MOV    R5,#250    
                
            DJNZ    R5,$
                
            DJNZ    R6,DELAY2
                DJNZ    R7
            ,DELAY1
                RET
                END 

            Comment

            Về tác giả

            Collapse

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

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

            Collapse

            Đang tải...
            X