bị lỗi khi chạy thử giao tiếp UART
http://i181.photobucket.com/albums/x.../uarterror.jpg
code: /************************************************** ***************************** ; viet lai Vidu4-1.c cua anh Nam bang C30 de chay tren mot dsPIC * ; Chuong trinh thuc hien viec sau: Xuat chuoi ky tu 'Xin chao!' ra cong * ; RS232 * ;************************************************* ****************************** #include "p33FJ256GP710.h" //Cac prototype cho cac chuong trinh con void Init_TMR1(void); void Init_UART1_Module(void); //Bang hang so trong ROM const unsigned char __attribute__ ((space(psv), address (0x0200))) Chuoi1[] = "Xin chao! \0"; //Cac bien toan cuc unsigned char flag, idx; //------------------------------------------------------------------------------ //Chuong trinh chinh int main(void) { // Init_TMR1(); //Khoi tao Timer 1 Init_UART1_Module(); //Khoi tao module UART1 _PSV=1; PSVPAG = __builtin_psvpage(Chuoi1); flag = 0; //Xoa co bao het thoi gian cho while (1) { if (flag) { //Cho den khi het thoi gian cho idx = 0; while (Chuoi1[idx]) { //Neu chua het chuoi thi U1TXREG = Chuoi1[idx++]; //Xuat tiep 1 ky tu while (!U1STAbits.TRMT); //Cho den khi truyen xong ky tu }; flag = 0; }; }; } //Chuong trinh con khoi tao module UART1 void Init_UART1_Module(void) { U2MODEbits.STSEL = 0; //Main I/O, 8-bit, no parity, 1 stop bit U2STAbits.UTXEN = 1; // Enable UART Tx U1BRG = (((8000000/38400)/16)-1); //38400 bps @ Fcy = 8 MHz } mong anh chị giúp đỡ |
Bạn dùng dsPIC33F, với bảng vectơ ngắt dài hơn so với dsPIC30F. Địa chỉ đầu tiên dành cho chương trình ứng dụng đối với dsPIC33F là 0x0200, trùng với địa chỉ mà bạn đang dùng cho chuỗi Chuoi1[]. Do đó, bạn nên chỉnh lại địa chỉ 0x0200 thành một giá trị đủ lớn để có chỗ cho code của chương trình.
Thân, |
Trích:
BUILT successful dùng 1 chuyển đổi USB-to-serial Port (com7) đã setup các thông số đầy đủ cho Hyper 38400>>8-bit>>1 stop bit nhưng hiển thị trên Hyper Terminal mà không thấy gì hết ạ. mong anh chỉ giúp ạ |
anh namqn giúp em với.. sửa mãi mà nó vẫn vậy.
code: #include "p33FJ256GP710.h" _FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_XT); // Clock Switching is enabled and Fail Safe Clock Monitor is disabled // OSC2 Pin Function: OSC2 is Clock Output // Primary Oscillator Mode: XT Crystanl _FWDT(FWDTEN_OFF); //Turn off WatchDog Timer _FGS(GCP_OFF); //Turn off code protect _FPOR(FPWRT_PWR1); //Turn off power up timer //Cac prototype cho cac chuong trinh con void Init_TMR1(void); void Init_UART1_Module(void); //Bang hang so trong ROM const unsigned char __attribute__ ((space(psv), address (0xF000))) Chuoi1[] = "Xin chao! \0"; //Cac bien toan cuc unsigned char idx; //------------------------------------------------------------------------------ //Chuong trinh chinh int main(void) { CLKDIVbits.PLLPOST=0; // N1=2 CLKDIVbits.PLLPRE=0; // N2=2 Init_UART1_Module(); //Khoi tao module UART1 _PSV=1; PSVPAG = __builtin_psvpage(Chuoi1); while (1) { idx = 0; while (Chuoi1[idx]) { //Neu chua het chuoi thi U1TXREG = Chuoi1[idx++]; //Xuat tiep 1 ky tu while (!U1STAbits.TRMT); //Cho den khi truyen xong ky tu }; }; } //Chuong trinh con khoi tao module UART1 void Init_UART1_Module(void) { U2MODEbits.STSEL = 0; //Main I/O, 8-bit, no parity, 1 stop bit U2STAbits.UTXEN = 1; // Enable UART Tx U1BRG = (((4000000/9600)/16)-1); //9600 bps @ Fcy = 4 MHz } |
còn code của em không hiểu sao nó cũng không tuyền được dữ liệu lên phần mền giao tiếp công com là Terminal .Làm thế nào để bit được là cổng Com đã nhận được chip?
code của em : //------------------------------------ConFig cho DsPic------------------- _FOSC(CSW_FSCM_OFF & FRC_PLL4); _FWDT(WDT_OFF); _FBORPOR(PBOR_OFF & MCLR_EN & PWMxL_ACT_HI & PWMxH_ACT_HI); _FGS(CODE_PROT_OFF); //------------------------------------------------ ----------------------- unsigned int t=100; void Init_UART1_Module(void) { U1MODE = 0x8000; //Main I/O, 8-bit, khong co parity, 1 stop bit U1STA = 0x0400; //bit10=UTXEN U1BRG = (((8000000/38400)/16)-1); //38400 bps @ Fcy = 8 MHz } int main() { Init_UART1_Module(); while(1) { while (!U1STAbits.TRMT); //Cho den khi bo dem phat trong t=U1TXREG; } } |
Để kiểm tra công com còn hoạt động hay không thì nối chân TX và RX lại với nhau rồi truyền thử bằng terminal nếu nhận được là vẫn ổn.
Mình đã từng làm một số chương trình nhỏ về UART theo mình nếu chương trình của bạn bị lỗi thì nên tìm một chương trình mẫu có sắn trên mạng về nạp thử để kiểm tra xem có lỗi phần cứng không. Nếu ok thì đem só sánh với chương trình của bạn để tìm chỗ sai. Mình nghĩ đây là một cách học tốt, anh Nam và mọi người chắc không có nhiều time để ngồi đọc code từng người tìm giúp chỗ sai được |
Trích:
|
Trích:
|
Trích:
|
Code:
#include <p33FJ256GP710.h> nhớ include uart.h nhé...để nó còn biết các hàm putsUART1 và WriteUART1 khuyến mãi thêm hàm đểu , gửi số kiểu int lên terminal Code:
putiUART1(unsigned int number) |
tình hình là thế nầy ạ:
1. em thử cổng COM: nối 2 chân 2,3 vào--> truyền nhận ở terminal rất tốt, gõ cái j là ra cái đó --> vậy là ok đúng không ạ 2. em thử mạch RS232: em nhấc 2 chân truyền nhận (nối với VDK) thì kết quả --> truyền nhận ở terminal cũng rất tốt vậy lỗi tại VDK?? 3. em dùng oscilloscope đo ở chân OUT của chip kết quả là có xung xuất sau mỗi thời gian ngắt timer, cho trễ ở timer dài thì xuất xung chậm, mà ngắn thì cũng xuất nhanh. ah có điều là cứ báo Unable to open COM7. please check your port setting em set các thông số cho terminal là : 9600 data bits:8, parity: none, stop bits: 1, Flow control: none huhuhuhu... làm thế nào đây ạ... hic.. |
à thì ra bạn dùng com ảo, chắc là dùng máy tính xách tay rồi. T cũng đã bị trường hợp code chạy ngon với com 1 đến 4, còn từ 5 đến 9 là héo, o biết làm sao
Code:
U1BRG = (((4000000/9600)/16)-1); //9600 bps @ Fcy = 4 MHz Trích:
Code:
while (1) |
Múi giờ GMT. Hiện tại là 11:39 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam