[技术问答] N76E003 串口接收问题

[复制链接]
566|5
 楼主 | 2019-6-6 17:27 | 显示全部楼层 |阅读模式
N76E003 8位是不是串口接收每次只能接收一个字符,多字符就会出现乱码。
  1. #include "N76E003.h"
  2. #include "SFR_Macro.h"
  3. #include "Common.h"
  4. #include "Delay.h"
  5. #include "Function_define.h"

  6. #define BUFFER_SIZE                16
  7. UINT8  UART_BUFFER[BUFFER_SIZE],temp;
  8. UINT16 u16CNT=0,u16CNT1=0;
  9. bit riflag;


  10. /**
  11. * FUNCTION_PURPOSE: serial interrupt, echo received data.
  12. * FUNCTION_INPUTS: P0.7(RXD) serial input
  13. * FUNCTION_OUTPUTS: P0.6(TXD) serial output
  14. */
  15. void SerialPort0_ISR(void) interrupt 4
  16. {
  17.     if (RI==1)
  18.     {                                       /* if reception occur */
  19.         clr_RI;                             /* clear reception flag for next reception */
  20.         UART_BUFFER[u16CNT] = SBUF;
  21.                           u16CNT ++;
  22.                                 riflag =1;
  23.     }
  24.     if(TI==1)
  25.     {
  26.         clr_TI;                             /* if emission occur */
  27.     }
  28. }

  29. /************************************************************************************************************
  30. *    Main function
  31. ************************************************************************************************************/
  32. void main (void)
  33. {
  34.                 P12_PushPull_Mode;
  35.                 P06_Quasi_Mode;
  36.                 P07_Quasi_Mode;
  37.           InitialUART0_Timer1(115200);            /* 115200 Baud Rate from timer1*/
  38.                 SCON = 0xD0;                        // Special setting the mode 3 and 0xD0
  39.                 TMOD |= 0x20;            //Timer1 Mode1
  40.    
  41.     set_SMOD;                //UART0 Double Rate Enable
  42.     set_T1M;
  43.     clr_BRCK;                //Serial port 0 baud rate clock source = Timer1
  44.                 TH1 = 256 - (1000000/115200+1);               /*16 MHz */
  45.                 //TH1 = 256 - (1037500/38400);                /*16.6 MHz */
  46.           set_TR1;
  47.        
  48.                 set_RB8;                                        //This bit is for setting the stop bit 2 high/low status,
  49.        
  50.                 clr_TI;
  51.     set_ES;           //enable UART interrupt 启用串口中断
  52.     set_EA;           //enable global interrupt 启用全局中断

  53.     while(1)
  54.                 {
  55.                         if (riflag)
  56.                         {
  57.                                 P12 = ~P12;                //In debug mode check UART_BUFFER[u16CNT] to check receive data
  58.                                 temp = SBUF;        //This part send the receive data from RXD to TXD
  59.                                 Send_Data_To_UART0(temp);
  60.                                 Send_Data_To_UART0(0x5c);
  61.                                 Send_Data_To_UART0(0x6e);
  62.                                 Send_Data_To_UART0(0x00);
  63.                                 Send_Data_To_UART0(0x48);
  64.                                 Send_Data_To_UART0(0x65);
  65.                                 Send_Data_To_UART0(0x6c);
  66.                                 Send_Data_To_UART0(0x6c);
  67.                                 Send_Data_To_UART0(0x6f);
  68.                                 riflag = 0;
  69.                                
  70.                                 //u16CNT = 0;
  71.                         }
复制代码

使用特权

评论回复
 楼主 | 2019-6-6 17:28 | 显示全部楼层
我用官方的示例代码,每次只接收第一个字符是对的。有没能办法接收字符串,有没有大牛给个例子

使用特权

评论回复
 楼主 | 2019-6-6 17:55 | 显示全部楼层
现在使用字符拼接的方法,是可以成为字符串,效率太差,有没有其它方法。

使用特权

评论回复
 楼主 | 2019-6-7 13:22 | 显示全部楼层
自己找到了问题所在,
  1.         TH1 = 256 - (1000000/115200+1);               /*16 MHz */
复制代码
关键是这行代码。115200改成9600 就可以了,还有缓存区BUFFER_SIZE16位, 超过字符还是会出现乱码,可以每次接收字符串后把u16CNT清0 如果要发送的字条很长,试着把值设置大一些。我的16位够用了。这个问题折腾了三天。

使用特权

评论回复
| 2019-6-10 08:02 | 显示全部楼层
改baudrate只是讓你的收資料變慢。
8051 tx rx共用一個buf,不能同時作傳收

使用特权

评论回复
| 2019-6-13 23:58 | 显示全部楼层
说明时钟和波特率没有配置对

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表