|
发表于 2011-9-9 22:58:01
|
显示全部楼层
/*===========================================
function: UART6 transmit data
input: single byte data
specification: no
============================================*/
void Uart6_Init_Trans(void)
{
//0. set I/O P43 as output mode for Txd6;
P4.3=1; PM4.3=0; //first set P4.3
//1. set CKSR6 register of UART6 clock;
CKSR6=0X04; //Fxclk6=Fxp/16=8M/16=500KHZ(Fx=Fxp=8MHZ);
//2. set BRGC6 register of UART6 band;
BRGC6=0X1A; //26 //band=Fxclk6/2*26=500k/52=9615 bps;
//3. set ASIM6 4-0 bit(PS61,PS60,CL6,SL6,ISRM6);
//ISRM6=1; //no INTSRE6 interrupt when receive error;
//allowance INTSR6 interrupt when receive error;
//but need check the data in interrupt routine.
//SL6=0; //one stop bit;
//CL6=1; //data length=8 bits;
//PS61=1;PS60=1; //even check;
//ASIM6.0=1;
//ASIM6.1=0;
//ASIM6.2=1;
//ASIM6.3=0;
//ASIM6.4=0;
ASIM6 =0b00011101;
//4. set ASICL6 1-0 bit(DIR6,TXDLV6);
//TXDLV6=0; //normally output with no inverse;
//DIR6=1; //MSB be sended first;
ASICL6 =0b00000010;
//5. set ASIM6 7 bit(POWER6=1);
POWER6=1; //allowance operating for UART6;
//TXD6 pin output '1' level;
//6. set ASIM6 6 bit(TXE6=1);
NOP();
TXE6=1; //allowance send mode;
//7. if using interrupt,must set below;
STMK6=1;STIF6=0; //prohibit interrupt
}
unsigned char Uart6_Trans(unsigned char tdata)
{ unsigned char i;
//start transmit data;
NOP();
i=ASIF6 & 0x02; //TXBF6 must be =0 before send next data;
if(i==0x00) //judge the TXBF6==0;
{
TXB6=101;
return 1; //send successed
}
else
return 0; //send failure
}
与楼主同问,我的有输出,但输出不对,是乱码,不知啥原因?
请楼主帮我也看看。
我看了下你的程序,回楼主:
while(ASIF6&0x02); //这里应该取反吧
应该改期成:while(!(ASIF6&0x02)); //必须等TXBF6为‘0’,才可写下一个数据。(规格书是这样写的)
TXB6=0xaa; |
|