Thông báo

Collapse
No announcement yet.

Hỏi về giao tiếp AVR với máy tính bằng Delphi

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

  • Hỏi về giao tiếp AVR với máy tính bằng Delphi

    Chào bà con!E làm cái này 1 tuần rồi mà không chạy đúng. Mục tiêu của em là: máy tính sẽ gửi 1 số byte vào AVR bằng cổng COM, sau khi AVR nhận đủ sẽ gửi trả lại PC, kết quả sẽ hiển thị trên chương trình lập trình bằng delphi 7. Vì chương trình nhận trên Windows chưa làm xong nên em dùng Hyper của Windows, kết quả nhận tốt, nhưng đến phần truyền t/h từ PC xuống thì Hyper ko thấy có kết quả j(ko biết có truyền dc ko).Nếu em dùng chương trình tự viết thì truyền được nhưng ko biết nó truyền theo mã j, kích thước bao nhiêu byte vì nó toàn nhận sai thôi.
    Em muốn hỏi là:
    -Làm thế nào để truyền từ PC xuống bằng Hyper(Đã thử bằng Send text file-->ko dc)
    -Mã truyền xuống là như thế nào.Làm sao để thiết lập
    /*
    Các thiết lập cho AVR và PC là: baud=9600 8-N-1
    Mạch chạy tốt
    */
    Code kèm theo
    AVR:
    Code:
    ////////////////////////////
    //    EEE,JSC			 //
    // Start 13/09/2007		 //
    // Developer: hutcon2007 //
    ///////////////////////////
    
    .include "m16def.inc" ;
    
    .org 0x0000
    	rjmp reset
    
    .org 0x016	;USRART Rx Complete
    	rjmp 	UART_RXC
    /*
    .org 0x01A	;USRART Tx Complete
    	rjmp 	UART_TXC
    
    */
    
    reset:
    	ldi r16, high(RAMEND)
    	out SPH, r16
    	
    	ldi r16, low(RAMEND)
    	out SPL, r16
    	
    //Initial USART
    ;Baud rate
    	ldi r16,0x00
    	out	UBRRH,r16
    	ldi r16,51
    	out UBRRL, r16  ;f=8Mhz baud=9600
    
    ;Enable transmit n receive and Interrupt
    ;
    	ldi r16, 0b10010000	;
    	out UCSRB, r16
    
    ;Set frame format
    ;asyn, no parity,1 bit stop
    	ldi r16,0b10000110;
    	out	UCSRC, r16
    ;Nap dl truyen
    //	ldi Zh, high(Font<<1);
    //	ldi Zl, low(Font<<1);
    	ldi r16,0b00010000
    	out DDRC,r16
    	ldi r16,0xff
    	out DDRA,r16
    	
    	
    
    ;Global interrupt enable
    	sei
    loop: 	
    	cbi portc,pc4
    	rjmp loop
    
    /*
    //phat xong tin hieu
    
    UART_TXC:
    	
    	lpm	r17,Z+
    	out	UDR,r17	
    	inc r18
    	cpi	r18,68
    	brne	Exit_TxC
    	ldi r18,0
    	ldi Zh, high(Font <<1);
    	ldi Zl, low(Font <<1);
    	ldi r16, 0b00000000	
    	out UCSRB, r16
    Exit_TxC:
    
    	ldi r16, 0b01001000	;cho phep nhan dl, ko cho gui DL
    	out UCSRB, r16
    	cli
    	sbi	portc,pc4
    	reti ; 
    
    //Nha^.n xong tin hieu
    */
    UART_RXC:
    	clr	R18
    	in	r18, UDR  ;doc DL vao
    	cpi	r18,0b11010101
    	breq Exit_RxC
    	out porta,r18
    	ldi r16, 0b10010000	;
    	out UCSRB, r16
    	sbi portc,pc4
     	rcall delay
    
    Exit_RxC:
    	reti
    
    delay:
    ldi	r19,255
    loop1:
    	ldi r20,255
    	loop2:
    		ldi r21, 255
    		loop3:
    		dec r21
    		brne loop3
    	dec r20
    	brne loop2
    dec r19
    brne loop1
    	ret
    Font:
    .dw	'A',0x42, 0x43,0x44, 0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x50,0x51;
    .dw 13, 10
    .dw 'D', 'u', 'o', 'n', 'g', ' ', 'T', 'h', 'a', 'n', 'h', ' ', 'N', 'h', 'a', 'n'
    Delphi:
    Code:
    unit vidu2;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        TenCong: TEdit;
        Label1: TLabel;
        Label2: TLabel;
        NoiDung: TEdit;
        ComboBox1: TComboBox;
        Label3: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
      hCommFile : THandle;
      closed: boolean;
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      PhoneNumber : string;
      CommPort : string;
      NumberWritten : Dword;    //must be Dword
    
    begin
      PhoneNumber := NoiDung.Text + #13 + #10;
      CommPort := tenCong.Text ;
    
     {Open the comm port}
      hCommFile := CreateFile(PChar(CommPort),
                              GENERIC_WRITE,
                              0,
                              nil,
                              OPEN_EXISTING,
                              0,
                              0);
      if hCommFile=INVALID_HANDLE_VALUE then
      begin
        ShowMessage('Unable to open '+ CommPort);
        exit;
      end;
      label3.Visible := True;
     {Dial the phone}
      NumberWritten:=0;
      if WriteFile(hCommFile,
                   PChar(PhoneNumber)^,
                   Length(PhoneNumber),
                   NumberWritten,
                  nil) = false then begin
        ShowMessage('Unable to write to ' + CommPort);
      end;
      if NumberWritten = length(PhoneNumber) then
        label3.Caption := 'Da truyen xong';
        label3.Visible := true;
        CloseHandle(hCommFile);
        closed := true;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
     {Close the port}
      label3.Visible := false;
      if closed = false then
      CloseHandle(hCommFile);
    
    end;
    
    end.
    Last edited by dtn0hut; 19-09-2007, 09:57. Lý do: Gõ thiếu
    |

  • #2
    Vui quá, cuối cùng cái mạch cũng chạy ngon lành.Chương trình Atmega16 thì ko sao cả lập trình đúng.Còn chương trình trên Delphi chạy sai, xui quá. Nếu bác nào làm thì chỉ cần bỏ phần ghi chú trong chương trình trên Atmega là chạy ngon. mở Hyper Terminal lên chọn Send text file. DL gửi xuống VDK ntn thì nó gửi lại lên mt như thế. Còn chương trình trên delphi thì các bác tự viết.Lưu ý là các chân DTR,DSR, CD phải nối với nhau, RTS,CTS nối với nhau.
    Here is code:

    ////////////////////////////
    // EEE,JSC //
    // Start 13/09/2007 //
    // Developer: hutcon2007 //
    ///////////////////////////

    .include "m16def.inc" ;

    //initial space

    .org 0x0000
    rjmp reset

    .org 0x016 ;USRART Rx Complete
    rjmp UART_RXC
    /*
    .org 0x01A ;USRART Tx Complete
    rjmp UART_TXC

    */

    reset:
    ldi r16, high(RAMEND)
    out SPH, r16

    ldi r16, low(RAMEND)
    out SPL, r16

    //Initial USART

    Init_USART:
    ;Baud rate
    ldi r16,0x00
    out UBRRH,r16
    ldi r16,51
    out UBRRL, r16 ;f=8Mhz baud=9600

    ;Enable transmit n receive and Interrupt
    ;
    ldi r16, 0b10011000 ;
    out UCSRB, r16

    ;Set frame format
    ;asyn, no parity,1 bit stop
    ldi r16,0b10000110;
    out UCSRC, r16
    ;Nap dl truyen
    // ldi Zh, high(Font<<1);
    // ldi Zl, low(Font<<1);


    ldi r16,0b00010000
    out DDRC,r16
    ldi r16,0xff
    out DDRA,r16

    //X tro vao o dau tien cua buffer

    ldi r27,0x00
    ldi r26,0x60



    ;Global interrupt enable
    sei
    loop:

    rjmp loop

    /*
    //phat xong tin hieu

    UART_TXC:

    lpm r17,Z+
    out UDR,r17
    inc r18
    cpi r18,68
    brne Exit_TxC
    ldi r18,0
    ldi Zh, high(Font <<1);
    ldi Zl, low(Font <<1);
    ldi r16, 0b00000000
    out UCSRB, r16
    Exit_TxC:

    ldi r16, 0b01001000 ;cho phep nhan dl, ko cho gui DL
    out UCSRB, r16
    cli
    sbi portc,pc4
    reti ;

    //Nha^.n xong tin hieu
    */
    UART_RXC:
    clr R18
    in r18, UDR ;doc DL vao
    cpi
    cpi r18,'a'
    breq bat_den
    cbi portc,pc4
    rjmp exit_Rxc
    bat_den:
    sbi portc,pc4
    /*
    st X+,r18
    cpi r26,0x64

    brne Exit_RxC
    ldi r26,0x60


    */
    Exit_RxC:
    ldi r16, 0b10011000 ;
    out UCSRB, r16


    reti


    Font:
    .dw 'C','T', 'y', ' ', 'C' ,'P',0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x50, 0x51;
    .dw 13, 10
    .dw 'D', 'u', 'o', 'n', 'g', ' ', 'T', 'h', 'a', 'n', 'h', ' ', 'N', 'h', 'a', 'n'
    |

    Comment


    • #3
      delphi?????

      bác cho em hỏi hyper là cái ji vay? theo em biet muốn giao tiếp delphi với vdk khiển phải cần có component. hyper có phải là componet không?
      ****************
      moi gia nhap.

      Comment

      Về tác giả

      Collapse

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

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

      Collapse

      Đang tải...
      X