碧华维修

    1. 串口发送接收数据乱码 26/13411 嵌入式系统 2010-05-12
      #define GetSystemClock() (80000000ul)  这是多少晶震?8千万? 80M ? 下载一个软件自己生成一下都不想搞?还非要等别人给你生成好? 假定晶震是8MHZ的,很难产生一个准确的波特率,用定时器1 ////////////////////////////////////////////////////////////////////////// // 名称: SIO_Init // 说明: 8.0MHZ晶震下初始化串口波特率为1200bps //       8位数据位,1位停止位,无校验 // 返回: void void SIO_Init(void) {         //////////////////////////////////////         // 禁止串口中断         ES = 0;         //////////////////////////////////////         // SCON         // D7   D6 D5  D4  D3  D2  D1  D0         // SM0 SM1 SM2 REN TB8 RB8 TI  RI         // 0   1   0   0   0   0   0  0         //         // SM0=0 SM1=1 -> 8位UART 波特率可变         SCON = 0x40;         //////////////////////////////////////         // TMOD         // D7   D6  D5 D4    D3   D2  D1 D0         // GATA C/T M1 M0    GATA C/T M1 M0         // 0    0   1  0     ?    ?   ?  ?         //         // 定时器1定时方式2说明:         //     把16位计数器分为两部分,即以TL0为计数器,         // 以TH0作为预置寄存器。初始化时把计数初值分别         // 加载至TL和TH中。当计数溢出时,由预置寄存器TH         // 以硬件方法自动给计数器TL重新加载。         //         TMOD &= 0x0F;         TMOD |= 0x20;         TH1 = 0xDD;         TL1 = 0xDD;         //////////////////////////////////////         // PCON         // D7   D6 D5 D4 D3  D2  D1   D0         // SMOD -  -  -  GF1 GF0 PDWN IDLE         PCON |= 0x80;                 //////////////////////////////////////         TR1 = 1;// 启动定时器         REN = 1;// 允许串口接收数据         ES  = 1;// 开启串口中断                 //////////////////////////////////////         // EA         // D7 D6 D5  D4 D3  D2  D1  D0         // EA -  ET2 ES ET1 EX1 ET0 EX0         //         // 建议在全部初始化完成后,在主程序中启用         // EA = 1;         // } 复制代码 8M 用 1200bps 定时器1,还可以将就用一下, -0.83%的误差。 如果晶震本身再不准,估计就更难不乱码了
    2. 看来是要弄下PIC.

最近访客

< 1/1 >

统计信息

已有46人来访过

  • 芯积分:--
  • 好友:--
  • 主题:--
  • 回复:2

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言