9234 UART在仿真运行时正常,去掉仿真器时,无输出
各位DX,9234 UART在连接仿真运行时正常,TXD有数据输出,但去掉仿真器后单独加5V电源,TXD无输出,其它功能正常,只是UART无输出,不明白是怎么回事。 第一次用NEC的UART,有没遇到类似情况的大侠? 使用的是内部振荡器void UART_Init(void)
{
//--------------------------------UART6 define
CKSR6=0x04; //Fxp/16 => 8M/16=500KHz
//Baud ratio setting
BRGC6=26; //BGR=CKSR6/BRGC6=9.6Kbps
ASIM6=0x04; //General "INTSRE6" (NO INTSR6),Stop bit = 1,8bit format
//No receive check bit,No send check bit
ASICL6=0; //TxD6=Normal mode no reverse,The first bit is MSB
POWER6=1; //Enable internal clock operation
ISC=0x03;
TXE6=1; //Enable TX
RXE6=1; //Enable RX
//TxD port setting
PM4&=~0x08;
}
void uart_pro(void)
{
if(uart_update_intvl==0)
{
uart_update_intvl=100; //10ms X uart_update_intvl
while(ASIF6&0x02);
TXB6=0xaa;
while(ASIF6&0x02);
__asm("nop");
}
} /*===========================================
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;
页:
[1]