View Single Post
Old 25-06-2008, 01:32 AM   #3
hpecom
Đệ tử 2 túi
 
Tham gia ngày: Nov 2005
Bài gửi: 45
:
Chào anh Nam và các bạn,

Em đã cắm tụ mà vẫn không xử lý được hiện tượng trên, em dùng điện trở 10K treo chân Tx của dsPIC lên nguồn thì thấy không còn tình trạng trên, nhưng lại sinh một tình trạng mới khi viết code truyền. Đoạn code em viết như sau:
Code:
#include	<p30f4011.h>

	_FOSC(CSW_FSCM_OFF & XT_PLL4);//FRC_PLL4
	_FWDT(WDT_OFF);
	_FBORPOR(PBOR_OFF & MCLR_EN);
	_FGS(CODE_PROT_OFF);

//------------------------------------------------------------------------------
//Cac hang so cua chuong trinh (gia tri tuc thoi dung trong chuong trinh)
#define	Fcy		4000000		//Tan so thuc thi lenh (Thach anh 4MHz)
#define	baud	9600			//Toc do baud cua RS232
#define _ISR_PSV __attribute__((interrupt, auto_psv))

//Cac prototype cho cac chuong trinh con
void Init_PORTS(void);
void Init_ADC10(void);
void Init_TMR1(void);
void Init_UART1(void);
//void Init_UART2(void);
unsigned int CRC_Calc(int* pMes);

//Cac bien toan cuc
unsigned int gFlag_1,gFlag_2;
unsigned char gFwd[]={0x01,0x06,0x01,0x50,0x00,0x01,0x49,0xE7};
unsigned char gRev[]={0x01,0x06,0x01,0x50,0x00,0x02,0x09,0xE6};
unsigned char gStop[]={0x01,0x06,0x01,0x50,0x00,0x00,0x88,0x27};
unsigned char gSpe[]={0x01,0x06,0x00,0x80,0x03,0x89,0x0A};
unsigned char gRec[10]={0,1,2,3,4,5,6,7,8,9};
unsigned char gRPos=0;
unsigned char gTPos=0;
unsigned char gRCount=0;
unsigned char gCmd=0;
int gEE_Return;
//------------------------------------------------------------------------------
//Chuong trinh chinh
int main(void) {
	Init_PORTS();			//Khoi tao cac cong I/O
	Init_TMR1();			//Khoi tao Timer 1
	Init_UART1();			//Khoi tao module UART1
	//Init_UART2();			//Khoi tao module UART2
	_LATB3=0;				//Cho phep nhan Data
	while (1) 
	{	if(gFlag_1)
		{	gFlag_1=0;
			_LATB0^=1;
			_LATB3=1;						//Cho phep gui Data
			while(gTPos!=gRPos)
			{	//U1TXREG = gRec[1];			//Neu bo dong nay
				//while (!U1STAbits.TRMT);	//va bo dong nay thi lenh truyen ben duoi khong duoc thuc hien
				U1TXREG = gRec[gTPos];
				while (!U1STAbits.TRMT);
				if(++gTPos>9) gTPos=0;
			};
			_LATB3=0;						//Cho phep nhan Data
		}
	};
}
//============================================================================
//Function tinh CRC
//============================================================================
unsigned int CRC_Calc(int* pMes)
{	unsigned int mCRC_Reg=0xFFFF;
	unsigned char mHighByte;
	unsigned char mLowByte;
	return 1;	
}
//Chuong trinh con khoi tao cac cong I/O, de xuat cac tin hieu PWM, va doc tin
//hieu dieu chinh cua bien tro tai AN0
void Init_PORTS(void) {
	TRISB = 0x0000;			//Chan RB0 la ngo vao analog AN0, cac chan khac
							//la ngo ra
	LATD = 0;			//Xoa thanh ghi chot cong D
	TRISD = 0xFFFE;
	//LATE=0;
	//TRISE=0xFF;
}
//Chuong trinh con khoi tao Timer 1, tran sau moi 1 giay o muc xung 8 Mips
void Init_TMR1(void) {
	TMR1 = 0;				//Xoa so dem trong TMR1
	PR1 = 0x3D09;			//Nguong tran la 1 giay ung voi clock = 32 MHz
	_T1IF = 0;				//Xoa co ngat cua Timer 1
	T1CON = 0x8030;			//Dung fcy lam clock, prescale = 1:256
	_T1IE = 1;				//Cho phep ngat khi Timer 1 tran
}
//Chuong trinh con khoi tao module UART1
void Init_UART1(void) {
	U1MODE = 0x8000;		//Main I/O, 8-bit, no parity, 1 stop bit
	//U1MODE = 0x8400;		//ALT I/O, 8-bit, no parity, 1 stop bit
	U1STA = 0x0400;			//bit10=UTXEN
	U1BRG = (((Fcy/baud)/16)-1);	//38400 bps @ Fcy = 8 MHz
	_U1RXIF = 0;
	_U1RXIE=1;
}
//Chuong trinh xu ly ngat Timer 1
//void _ISR _T1Interrupt(void) 
void _ISR_PSV _T1Interrupt(void)
{	_LATD0^=1;
	_T1IF = 0;				//Xoa co ngat
}
//Chuong trinh xu ly ngat truyen thong UART
void _ISR_PSV _U1RXInterrupt(void)
{	gFlag_1 = 1;
	while(U1STAbits.URXDA)
	{	gRec[gRPos]=U1RXREG;
		if (++gRPos>9)	gRPos=0;
		if(++gRCount>9) gRCount=0;
	};
	_U1RXIF = 0;
}
Nếu bỏ 2 dòng lệnh 71 và 72 thì 2 dòng lệnh 73 và 74 không được thực hiện, mặc dù khi có dữ liệu đến thì dsPIC vẫn xảy ra ngắt UART.
Khi có 2 dòng lệnh này thì cả hai dòng dưới cũng được thực hiện. Dữ liệu truyền không còn bị nhiễu như trước.
Mong anh và mọi người trợ giúp!!!

Chúc mọi người một ngày mới tốt đẹp!

namqn: bạn chú thích thẳng dòng 71 và 72 là những dòng nào trong code.
__________________
Biết thì nói là biết,
Không biết thì nói là không biết,
..

thay đổi nội dung bởi: namqn, 25-06-2008 lúc 02:11 AM.
hpecom vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn