打印

CY68013串口问题

[复制链接]
3463|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CY68013串口 接收和发送的数据不一致
检查过 波特率 和方式设置 都没有问题啊 不仅是数据不对 位数也多了
大家能帮忙分析下吗 小女子先谢谢了
沙发
287075766| | 2011-11-10 09:42 | 只看该作者
68013默认使用的是串口1,其实68013的串口跟51的串口设置是一模一样的,我给你我的代码吧。
EA=0;TMOD&=0x0F;TMOD|=0x20;SCON1=0x50; PCON|=0x80;TH1=-fosc/384/bps;ES1=1; TR1=1; REN=1;EA=1;(这是初始化,fosc和bps分别是晶振和波特率),设置好了之后,只需要在中断7中读取SBUF1和写入SBUF1就可以完成接收和发送的工作了,不过前提是你的上位机的串口参数要对号!

使用特权

评论回复
板凳
harvard83|  楼主 | 2011-11-22 22:03 | 只看该作者
这个是我的程序 大家给看一下 设置有没有问题呢
BYTE  temp_data;
BYTE  flag;
void REG_Init()
{
    CPUCS = 0x10; //48Mhz
    CKCON = (CKCON&(~bmSTRETCH)) | 1;
}
void SerialPort_Init()
{
    TMOD = (TMOD & 0x0F) | 0x20;   // 定时器1工作方式2,自动重载  
  CKCON |= 0x10;  //T1M = CLKOUT/4
   EICON |= 0x80;  //设置SMOD1=1,波特率加倍  
  SCON1 = 0x50;  //串行口1工作方式1,10位异步收发,REN=0,允许接收。RI1=0,TI1=0
   TH1  = 0xD9;      //定时器1的初值      
  ES1 = 1;     //允许串口1中断
  TR1 = 1;
   EA = 1;
}
void Serial_SendChar(BYTE source)
{
    SBUF1 = source;
    while(TI1 == 0);
    TI1 = 0;
}
void Serial_Interrupt1() interrupt 7
{       
     if(RI1 == 1)
    {
        RI1 = 0;
        temp_data = SBUF1;
        flag = 1;
    }
}     

void main(void)
{
    REG_Init();
    SerialPort_Init();
    EA = 1;
    while(1)
    {
         if(flag==1)
        {
             flag=0;
            Serial_SendChar(temp_data);
        }
    }
}

使用特权

评论回复
地板
harvard83|  楼主 | 2011-11-23 09:14 | 只看该作者
2# 287075766
你的时钟是怎么设置的呢?

使用特权

评论回复
5
287075766| | 2011-11-23 15:26 | 只看该作者
有个选择时钟的寄存器,好像bit6就是选择是36M还是48M,就是根据这个来看的!寄存器的名字就是IFCONFIG。

使用特权

评论回复
6
287075766| | 2011-11-23 15:32 | 只看该作者
你把你的PCON|=0x80;然后我觉得你的TH1有问题,你如果波特率是9600的话,按照我的算法算出来就是TH1=-13,但是你的TH=217,你写成TH1=-13,试试看!

使用特权

评论回复
7
harvard83|  楼主 | 2011-11-23 16:04 | 只看该作者
6# 287075766
谢谢。
PCON是设置串口0的,我用的是串口1。
之前线接的有问题,改完后可以收发数据了,但是收到的数据不对。
把波特率改成4800就正常收发数据了,可是我的设置应该波特率是19200啊,很奇怪。
是波特率错了还是时钟设置错了呢?

使用特权

评论回复
8
287075766| | 2011-11-23 16:56 | 只看该作者
我也用的串口1,PCON的BIT7是设置SMOD的,SMOD=1的时候表示的是波特率加倍,你的波特率如果为19200的话,并且你的时钟选择的是48M的话,TH1=-2*(48000000/384)/19200; 7# harvard83

使用特权

评论回复
9
287075766| | 2011-11-23 17:01 | 只看该作者
出现你的问题不奇怪,你的问题应该是TH1的赋值上,你去看看TH1的值得到的公式!跟C51的串口设置是一样的! 7# harvard83

使用特权

评论回复
10
harvard83|  楼主 | 2011-11-24 10:36 | 只看该作者
9# 287075766
用示波器看过了CLKOUT引脚,发现输出是12MHZ。
我的CPUCS寄存器是设置的CPUCS=0X10,按道理来说输出应该是48MHZ啊。
时钟设置的问题在哪?

使用特权

评论回复
11
winkle.zhang| | 2011-11-25 20:27 | 只看该作者
我今天也遇到这个问题了 也还未解开 TRM 是这样写的

使用特权

评论回复
12
japrincess| | 2011-11-27 07:32 | 只看该作者
试试这个!

使用特权

评论回复
13
harvard83|  楼主 | 2011-11-28 15:10 | 只看该作者
11# winkle.zhang 还未解决 如果你找到原因 记得上来分享哦

使用特权

评论回复
14
harvard83|  楼主 | 2011-11-29 13:44 | 只看该作者
自己 顶一个 等待高人指点

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

201

帖子

1

粉丝