打印
[其它应用]

接收问题

[复制链接]
1089|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenho|  楼主 | 2022-6-11 16:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机发没问题。就是接收上有问题,接收的时候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;
               
         }        

使用特权

评论回复
沙发
juventus9554| | 2022-6-11 16:52 | 只看该作者

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

使用特权

评论回复
板凳
pengf| | 2022-6-11 16:53 | 只看该作者
TH1=108?你这里的系统频率是多少,是等于晶振频率吗?还是经过分频器分频?

使用特权

评论回复
地板
chenho|  楼主 | 2022-6-11 16:56 | 只看该作者
多谢大家讨论这么多哈,呵呵

使用特权

评论回复
5
tpgf| | 2022-7-5 11:52 | 只看该作者
什么接收模式啊

使用特权

评论回复
6
wakayi| | 2022-7-5 11:59 | 只看该作者
波特率 一致吗

使用特权

评论回复
7
wowu| | 2022-7-5 12:08 | 只看该作者
这是多少分频啊

使用特权

评论回复
8
xiaoqizi| | 2022-7-5 12:14 | 只看该作者
那应该就是波特率的问题啊

使用特权

评论回复
9
木木guainv| | 2022-7-5 12:42 | 只看该作者
接收中断代码会不会有点多

使用特权

评论回复
10
磨砂| | 2022-7-5 13:25 | 只看该作者
其实可以实测就知道对不对了

使用特权

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

本版积分规则

748

主题

9853

帖子

5

粉丝