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:
Delphi:
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'
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.
Comment