chenho 发表于 2022-6-11 16:49

接收问题

单片机发没问题。就是接收上有问题,接收的时候IR能置位就是SBUF没有任何数据,看了几遍手册也没发现哪里有问题,代码用的论坛上的一段代码。大家帮忙看下哪里的问题。#include<sh88f54.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<delay.h>

unsigned char Data = {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;
                              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 = 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

多谢大家讨论这么多哈,呵呵

tpgf 发表于 2022-7-5 11:52

什么接收模式啊

wakayi 发表于 2022-7-5 11:59

波特率 一致吗

wowu 发表于 2022-7-5 12:08

这是多少分频啊

xiaoqizi 发表于 2022-7-5 12:14

那应该就是波特率的问题啊

木木guainv 发表于 2022-7-5 12:42

接收中断代码会不会有点多

磨砂 发表于 2022-7-5 13:25

其实可以实测就知道对不对了
页: [1]
查看完整版本: 接收问题