gf3086 发表于 2010-10-26 15:47:59

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错误..使用第一句才正常...这是为何?

gf3086 发表于 2010-10-26 15:54:01

补充下..UART0ISP下载正常..   Proteus下载直接将P0.0 P0.1和虚拟终端连接..

xiaoking 发表于 2010-10-26 16:43:09

#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;

xiaoking 发表于 2010-10-26 16:44:21

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;

xiaoking 发表于 2010-10-26 16:44:59

使用示波器实测波特率,看看差多少
页: [1]
查看完整版本: LPC2103 UART0发送乱码...