Thông báo

Collapse
No announcement yet.

Giao tiếp P89 với máy tính qua DB9 bằng VB6.0 ?

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

  • Giao tiếp P89 với máy tính qua DB9 bằng VB6.0 ?

    Tôi đang làm 1 chương trình test giao tiếp giữa VDK P89V51RB2 với máy tính giống như trên chủ đề đã ghi rõ. Chương trình trên VB viết như bên dưới.

    Code:
    Private Sub Command2_Click()
    Me.MSComm1.Output = "b"
    End Sub
    
    Private Sub Command1_Click()
    Me.MSComm1.Output = "a"
    End Sub
    
    Private Sub Form_Load()
    MSComm1.Settings = "9600,N,8,1"
    MSComm1.RThreshold = 1
    MSComm1.CommPort = 1
    MSComm1.PortOpen = True
    End Sub
    
    Private Sub MSComm1_OnComm()
    If Me.MSComm1.CommEvent = comEvReceive Then
    Me.MSComm1.InputLen = 0
    End If
    End Sub
    Còn chương trình asm trên P89 như sau :
    Code:
    	org	0h
    main:
    	MOV	TMOD,#21H		;TIMER 1 TAO BAUD, TIMER 2 TAO THOI GIAN QUAY
    	MOV	SCON,#52H
    	MOV	TH1,#0FDH
    	SETB	TR1
    
    	MOV	IE,#81H			;CHO PHEP NGAT DO TIMER0
    	SETB	ET0
    
    	MOV	TH0,#HIGH(-50000)
    	MOV	TL0,#LOW(-50000)
    
    CHUONG_TRINH_THU:
    	JNB	RI,$
    	CLR	RI
    	MOV	A,SBUF
    	
    CT1:
    	CJNE A,"a",CT2
    	MOV	P1,#11001111B
    	RET
    CT2:
    	CJNE A,"b",CT1
    	MOV	P1,#11110011B
    	RET
    	END
    -----


    Giao diện trên VB gồm nút command1 và command2 cùng với 1 điều khiển MScomm1. Tôi đã test nhiều lần, kết quả vẫn như thế
    Tôi chỉ thực hiện được việc gửi tín hiệu từ command1 còn command2 hoàn toàn không điều khiển được ngoại vi. Tôi xin hỏi là chương trình viết cho VĐK hay trên VB bị sai gì ? Xin mọi người giải đáp giúp. Cám ơn nhiều.

  • #2
    Thu-phát dữ liệu 89v51rb2

    MẤY ĐẠI CA ƠI GIÚP VỚI, KHÔNG HIỂN THỊ ĐÚNG NHỮNG GÌ EM LÀM!! VÍ DỤ: XUẤT TỪ MÁY TÍNH SỐ NÀO ĐÓ, LẠI HIỆN RA 1 SỐ KHÁC! KHÔNG BIẾT CHƯƠNG TRÌNH EM VIẾT CÓ GÌ SAI KHÔNG?


    INCLUDE 89c51.mc
    ;INCLUDE mod51fx

    ORG 00H
    CLR TI
    CLR RI
    MAIN:
    MOV SCON,#52H ;UART 8 BIT, TÔC DÔ BAUD THAY DÔI
    MOV TMOD,#20H ;CHÊ DÔ 8 BIT TU NAP LAI
    MOV TH1,#(-3) ;THIÊT LÂP BAUD RATE: 9600
    SETB TR1 ; KHOI DÔNG TIMER
    ;*********************
    KT_TN: ;KIÊM TRA THU NHÂN
    NHAN: ;KIÊM TA NHÂN
    JNB RI,NHAN ;NHÂN HOÀN TÂT? RI =1, CHUA RI =0, KT LAI.
    LCALL INDATA ; RI=1, GOI CT XU LÝ NHÂN
    RET
    PHAT: ;KT PHAT
    JNB TI,PHAT ;PHÁT HOÀN TÂT? TI=1, CHUA RI=0, KT LAI.
    LCALL OUTDATA ;TI=1, GOI CT XL PHAT
    RET
    ;SJMP KT_TN
    ;@@@@@@@@@@@@@@@@
    INDATA:
    CLR RI
    CLR REN
    MOV A,SBUF
    MOV B,#10
    DIV AB
    SWAP A
    ADD A,B
    MOV P2,A
    SETB REN
    RET
    SJMP KT_TN
    ;****************************
    OUTDATA:
    CLR TI
    LCALL KEYBOARD
    MOV SBUF,A
    RET
    ;@@@@@@@@@@@@@@@@@@@@@@
    KEYBOARD:
    LCALL SCANKEYPAD
    JC MP1
    MOV A,#0FFH
    MP1:
    ;MOV P2,A
    LJMP KEYBOARD
    ;****************************************
    SCANKEYPAD:
    PUSH 03H
    MOV R3,#50
    BACK:
    ACALL GETKEY
    JNC NOPRESSED
    DJNZ R3,BACK
    NOPRESSED:
    POP 03H
    RET
    ;*******************************************
    GETKEY:
    PUSH 05H
    PUSH 06H
    PUSH 07H
    MOV A,#0EFH
    MOV R6,#4
    TEST:
    MOV P2,A
    MOV R7,A
    MOV A,P2
    ANL A,#0FH
    CJNE A,#0FH,KEYPRESSED
    MOV A,R7
    RL A
    DJNZ R6,TEST
    CLR C
    SJMP EXIT
    KEYPRESSED:
    MOV R7,A
    MOV A,#4
    CLR C
    SUBB A,R6
    MOV R6,A
    MOV A,R7
    MOV R5,#4
    AGAIN:
    RRC A
    JNC DONE
    INC R6
    INC R6
    INC R6
    INC R6
    DJNZ R5,AGAIN
    DONE:
    SETB C
    MOV A,R6
    EXIT:
    POP 07H
    POP 06H
    POP 05H
    RET
    ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    END
    Attached Files

    Comment


    • #3
      Trong đoạn chương trình bạn viết cho vi điều khiển, phần kiểm tra dữ liệu bạn viết không đúng. Để kiểm tra có phải dữ liệu nhận được là chữ 'a' không bạn phải viết là CJNE A,'a',CT2 chứ không phải như bạn đã viết đâu. Bạn kiểm tra lại xem sao. Chúc bạn thành công.

      Comment


      • #4
        Còn vấn đề này nữa, khi bạn viết lệnh RET sau khi kiểm tra dữ liệu thì chương trình đã kết thúc rồi nên không thực hiện việc kiểm tra lần thứ hai là phải. Bạn phải bỏ lệnh RET ở lần kiểm tra đầu tiên thì chương trình sẽ chạy thôi. Chúc bạn thành công!

        Comment

        Về tác giả

        Collapse

        bear.tiny Tìm hiểu thêm về bear.tiny

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

        Collapse

        Đang tải...
        X