LPC2103 UART0发送乱码...
晶振11.0592M波特率96008位1个停止位以下是程序
#define uchar unsigned char
void UART0Init_9600(){
PINSEL0|=0x00000005;
PINSEL1|=0x00000000;
U0LCR=0x83;
U0DLM=0x00;
U0DLL=0x48;
U0LCR=0x03;
}
void UART0SendByte(uchar DATA){
U0THR=DATA;
while(!(U0LSR&0x20));
//while((U0LSR&0x40)==0);
}
void main(){
UART0Init_9600();
UART0SendByte(97);
UART0SendByte('B');
UART0SendByte('a');
while(1){}
}
未设置PLL
在硬件上调试和在Proteus下(虚拟终端)仿真,效果一样.. 结果均是xxx 发送其他字符,均是乱码..
IAR下编写代码..请高手指教...头都疼了..看了很多代码,都差不多.觉得代码没问题..不知道如何调试了..
还有这句while(!(U0LSR&0x20)); ,while((U0LSR&0x40)==0);其他代码中很多都用第二个,但是在Proteus会报busy错误..使用第一句才正常...这是为何? 补充下..UART0ISP下载正常.. Proteus下载直接将P0.0 P0.1和虚拟终端连接.. #define WORD_LENGTH_5BIT 0
#define WORD_LENGTH_6BIT 1
#define WORD_LENGTH_7BIT 2
#define WORD_LENGTH_8BIT 3
#define STOP_LENGTH_1BIT (0<<2)
#define STOP_LENGTH_2BIT (1<<2)
#define PARITY_DISABLE (0<<3)
#define PARITY_ENABLE (1<<3)
#define PARITY_ODD (0<<4)
#define PARITY_EVEN (1<<4)
#define PARITY_FORCED_1 (2<<4)
#define PARITY_FORCED_0 (3<<4)
#define BREAK_DISABLE (0<<6)
#define BREAK_ENABLE (1<<6)
#define DIVISOR_LATCH_DISABLE (0<<7)
#define DIVISOR_LATCH_ENABLE (1<<7)
// 设置工作方式
// USART configured as follow:
// - BaudRate = MY_USART0_BAUDRATE
// - Word Length = 8 Bits
// - One Stop Bit
// - No parity
//
USART_RegStructure->LCR = WORD_LENGTH_8BIT |
STOP_LENGTH_1BIT |
PARITY_DISABLE;
// 设置波特率, RTR=DLL, IER=DLM
USART_RegStructure->LCR |= DIVISOR_LATCH_ENABLE;
USART_RegStructure->RTR = (u8)(PCLK/16/MY_USART0_BAUDRATE);
USART_RegStructure->IER = (u8)((PCLK/16/MY_USART0_BAUDRATE)>>8);
USART_RegStructure->LCR &= ~DIVISOR_LATCH_ENABLE; USART_RegStructure 的定义:
typedef struct
{
vu8 RTR;
u8 RESERVED0;
u16 RESERVED1;
vu8 IER;
u8 RESERVED2;
u16 RESERVED3;
vu8 IIR_FCR;
u8 RESERVED4;
u16 RESERVED5;
vu8 LCR;
u8 RESERVED6;
u16 RESERVED7;
u32 RESERVED8;
vu8 LSR;
u8 RESERVED9;
u16 RESERVED10;
vu8 SCR;
u8 RESERVED11;
u16 RESERVED12;
} USART_REG, *pUSART_REG; 使用示波器实测波特率,看看差多少
页:
[1]