搜索
bottom↓
回复: 4

LPC2103 UART0发送乱码...

[复制链接]

出0入0汤圆

发表于 2010-10-26 15:47:59 | 显示全部楼层 |阅读模式
晶振11.0592M  波特率9600  8位  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错误..  使用第一句才正常...这是为何?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2010-10-26 15:54:01 | 显示全部楼层
补充下..  UART0  ISP下载正常..   Proteus下载直接将P0.0 P0.1和虚拟终端连接..

出0入0汤圆

发表于 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;

出0入0汤圆

发表于 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;

出0入0汤圆

发表于 2010-10-26 16:44:59 | 显示全部楼层
使用示波器实测波特率,看看差多少
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-14 03:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表