打印

SH88F516串口使用问题

[复制链接]
2211|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我根据例程,改了个十分简单的串口通信程序,该方法我通过proteus仿真,能够实现功能,但是下载到SH88f516中,就出问题了,按理说,即使波特率,和停止位位数这些不正确,通过串口助手仍然能够收到数据才是,虽然数据可能是错的。经过调试发现,有块PCB上是SBUF一直不能够得到值,但是TI会变化;有一块则是SBUF能得到一次赋值,但一直在执行while(TI == 0);即TI一直无法变成1.
使用EUART1,没有问题。这是我串口没有配置好?请各位不吝赐教!
主要的配置程序如下:
T2MOD        =        Bin(00000000);        //设置Timer2用于产生波特率(baudrate generator
T2CON        =        Bin(00110000);
SCON        =        Bin(11010000);
RCAP2L        =        LOBYTE(UART_BAUDRATE);
TL2        =        LOBYTE(UART_BAUDRATE);
RCAP2H        =        HIBYTE(UART_BAUDRATE);
TH2        =        HIBYTE(UART_BAUDRATE);
//////////////////////////////////////////////////////
while(1)
{
SBUF = 10;                 
while(TI == 0);
TI = 0;
}
沙发
ningyuan198|  楼主 | 2013-4-8 13:44 | 只看该作者
查出问题了,原来是因为MCU使用的一直是Tx1和Rx1,所以只能使用EUART1了。

使用特权

评论回复
板凳
guduniao16| | 2013-10-29 13:54 | 只看该作者
你好。看你这个问题都发布这么久了,应该都调试好了吧。我现在遇到的问题是单片机发没问题。就是接收上有问题,接收的时候IR能置位就是SBUF没有任何数据,看了几遍手册也没发现哪里有问题,代码用的论坛上的一段代码。你帮忙看下哪里的问题。#include<sh88f54.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义  
#include<delay.h>

unsigned char Data[8] = {0};                    
bit Flag;

/*------------------------------------------------
                    串口初始化
------------------------------------------------*/
void InitUART  (void)
{        
        
        SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
           TMOD |= 0x20;                        // TMOD: timer 1, mode 2, 8-bit 重装
           TH1   = 0xF7;                        // TH1:  重装值 4800 波特率 晶振 16.6MHz
        TL1   = TH1;
                TR1   = 1;                           // TR1:  timer 1 打开
        PCON  = 0X80;                        // 倍频  得到波特率为9600         
        IEN0  = 0x90;                         // 打开串口中断

   
}                           
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{
               
        unsigned char i;
        unsigned char wei;
        wei = 1;

        P0M0 = 0X00;
        P0M1 = 0XFF;//推挽输出
        P1M0 = 0X00;
        P1M1 = 0XFF;//推挽输出
        P2M0 = 0X00;
        P2M1 = 0XFF;//推挽输出
        P3M0 = 0X01;
        P3M1 = 0XFE;//推挽输出
        P4M0 = 0X00;
        P4M1 = 0XFF;//推挽输出

        P3_0  = 1;
        P3_1  = 1;

        InitUART();


        while(wei)
        {
                if(Flag)
                {
                        Flag  = 0;
                        for(i=0;i<8;i++)
                        {
                                SBUF  = Data[i];
                                while(!TI);
                             TI = 0;
                        }
                        if(i==8)
                          {
                                i       = 0;
                                wei     = 0;
                        }
                }
        }

        
}


/*------------------------------------------------
                     串口中断程序
------------------------------------------------*/
void UART_SER (void) interrupt 4 //串行中断服务程序
{
        
        static unsigned char Count;        

    if(RI)                       //判断是接收中断产生
    {
          RI=0;                                                 //标志位清零                                         
          Data[Count] = SBUF;
          Count++;                                    
        }
         if(Count==8)
         {

                 Count = 0;
                Flag  =        1;
               
         }        
   

使用特权

评论回复
地板
ningyuan198|  楼主 | 2013-10-31 15:59 | 只看该作者
本帖最后由 ningyuan198 于 2013-10-31 16:01 编辑
guduniao16 发表于 2013-10-29 13:54
你好。看你这个问题都发布这么久了,应该都调试好了吧。我现在遇到的问题是单片机发没问题。就是接收上有问 ...

你的TH1的值算错了,根据公式,TH1应该是108。
波特率不对,当然收不到数据,或者收到乱码。

使用特权

评论回复
5
yuedonghai| | 2013-12-12 14:01 | 只看该作者
ningyuan198 发表于 2013-10-31 15:59
你的TH1的值算错了,根据公式,TH1应该是108。
波特率不对,当然收不到数据,或者收到乱码。
...

TH1=108?你这里的系统频率是多少,是等于晶振频率吗?还是经过分频器分频?

使用特权

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

本版积分规则

3

主题

12

帖子

0

粉丝