串口调试发送数据不对
/*=====================================================Name: UART6
Write by:
Date:
MCU: NEC78F9224
FSYS: 8MHz
Fxp: 8MHZ
IDE: PM+
Original version: V00
Revised version:
======================================================*/
#pragma interrupt INTSR6 Uart6_Irq_Rec
#pragma interrupt INTST6 Uart6_Irq_Trans
#pragma section @@CNST OPT AT 80H //option byte setting
const char OPT=0B10011100; //1,DEFOSTS1,DEFOSTS0,1,RMCE,OSCSEL1,OSCSEL0,LIOCP;
//bit4,bit7 must be '1'
//bit6,bit5 for external crystal
//bit3: 0-->i/o port, 1-->reset port
//bit2,bit1: 10-->internal 8MHZ
//Fcpu=8MHZ;(set by PCC=00H,PPCC=00H);
//Fxp=8MHZ;Tcpu=1/8MHZ; (set by PPCC=00H);
//bit0: 0-->WDT control by software. (if LSRSTOP==1.)
//!!! must be connected Rx to VCC for sets P34 as IO.
/*===========================================
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=0;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=tdata;
return 1; //send successed
}
else
return 0; //send failure
}
/**************************************************************************
function: Sys_Init()
specification: no
***************************************************************************/
__callt void Sys_Init(void)
{
PCC=0x00;//Fsys=8Mhz; Fxp=8Mhz;
PPCC=0x00;
DI();
Uart6_Init_Trans();
EI();
}
__interrupt void Uart6_Irq_Trans(void)
{ STIF6=0;
NOP();
TXB6=101;//trans_data; //writing "data";
}
/********************************** main *************************************/
//////////////////////////////////////////////////////////////////////////////
void main(void)
{ unsigned int temp_buf=0;
unsigned int x=0;
unsigned char y=0;
Sys_Init();//initialize MCU;
while(1)
{
for(x=0;x<10;x++)
{
y=Uart6_Trans(101);
}
}
}
问题:设置感觉没有问题,发送的数据为什么一直不对?
内部晶振难道不能做串口时钟吗?是不是不准?
如果我用中断来发送,电脑串口接收反而没有任何反应了?(STMK6=0;STIF6=0;)
请高手指点下。
先谢了。
页:
[1]