迪文科技论坛

 找回密码
 立即注册
搜索
查看: 237|回复: 3

【提问】求助,用迪文开发板UART4口发送信号不成功,请帮...

[复制链接]

1

主题

6

回帖

170

积分

注册会员

Rank: 2

积分
170
发表于 2023-6-20 17:58:07 | 显示全部楼层 |阅读模式
本帖最后由 MASTER4 于 2023-6-21 08:11 编辑

我用迪文开发板EKT043B进行开发,希望从UART4口向外发送485信号,在keilc51内进行编程,程序如下
  1. #include <stdio.h>
  2. #include <sys.h>

  3. #define MAX                100                        //定义了串口包的最大长度
  4. #define TI SCON2T&0X01
  5. #define RI SCON2R&0X01

  6. //变量申明
  7. xdata u16  count;
  8. xdata u16  Flag_Rec_Over;
  9. xdata u16  uart4_buf[MAX];
  10. xdata u16  num;
  11. xdata u16  i,j;


  12. //函数申明
  13. void uart4_init(u32 baud);
  14. void T0_Init(void);
  15. void T0_ISR_PC(void);


  16. void uart4_init(u32 baud)
  17. {
  18.         SCON2T = 0x80;
  19.         SCON2R = 0x80;//接受使能和模式设置
  20.         
  21.         baud = FOSC/8/baud;
  22.         BODE2_DIV_H = 0X0A;  
  23.         BODE2_DIV_L =0x80;
  24.         
  25.                 EA = 1;
  26.           ES2T = 0;
  27.                 ES2R = 1;// received中断使能               
  28.                 count = 0;
  29.                 Flag_Rec_Over = 0;

  30. }

  31. void T0_Init(void)
  32. {
  33.     TMOD|=0x01;
  34.     TH0=T1MS>>8;        //1ms定时器
  35.     TL0=T1MS;
  36.     ET0=1;              //开启定时器0中断
  37.     EA=1;               //开总中断
  38.     TR0=0;              //关闭定时器
  39. }



  40. //用uart4串口实现printf函数
  41. char putchar(char c)
  42. {
  43.         SBUF2_TX = c;
  44.         while(!TI);
  45.         SCON2T &= 0xFE;
  46.         return c;
  47. }



  48. void T0_ISR_PC(void)    interrupt 1
  49. {
  50.    
  51.     ET0=0;
  52.     TH0=T1MS>>8;
  53.     TL0=T1MS;
  54.     i++;
  55.     if(i>=100)
  56.                 {   i=0;               
  57.         num++;
  58.     }         
  59.     ET0=1;
  60. }
  61. void main(void)
  62. { sys_init();//系统初始化
  63.         uart4_init(9600);//初始化        
  64.   T0_Init();
  65.         printf("UART4 HAS OPENED......\r\n");
  66.         while(1)
  67.         { //printf("123456");
  68.                 if(RI==1)
  69.                 {
  70.                         TR0=1;
  71.                         num=0;
  72.                         uart4_buf[count]=SBUF2_RX;
  73.                         count++;
  74.                         SCON2R &= 0xFE;//清除接受中断标志
  75.                
  76.                 }
  77.                 if(num>=10)
  78.                 { printf("data receive finish!\r\n");
  79.                         TR0=0;
  80.                         Flag_Rec_Over=0;
  81.                         num=0;
  82.                                 
  83.                         for(j=0;j<count;j++)
  84.                         {
  85.                                 SBUF2_TX = uart4_buf[j];
  86.                                 while(!TI);
  87.                                 SCON2T &= 0xFE;
  88.                         }
  89.                         count=0;
  90.                         printf("data send back finish!\r\n");
  91.                 }

  92.         }
  93. }

复制代码
然后通过硬件UART4-485口直接连接到电脑调试端口(USB转485),监视窗口没有发现打印信息,发送数据没有收到反馈,修改代码,在主循环内加printf("123456"),监视窗口显示如下图:显示的也不是完整的123456,而是断断续续的数值,波特率发送和接收都设置为9600,BODE2_DIV_H = 0X0A;
BODE2_DIV_L =0X80;补充一张硬件连接接口,EKT043B的UART/485A连接485A(电脑com端),UART/485B连接485B(电脑com端),图片

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

1

主题

6

回帖

170

积分

注册会员

Rank: 2

积分
170
 楼主| 发表于 2023-6-21 10:56:18 | 显示全部楼层
在GPT-4的指导下,修改好了代码,现在能够正常输出,晚一点上传修改好的代码,总之还是代码的问题
回复

使用道具 举报

2

主题

13

回帖

99

积分

注册会员

Rank: 2

积分
99
发表于 7 天前 | 显示全部楼层
MASTER4 发表于 2023-6-21 10:56
在GPT-4的指导下,修改好了代码,现在能够正常输出,晚一点上传修改好的代码,总之还是代码的问题 ...

你的串口4是自己写的还是用的官方的库呀,我能看看你写的吗?
回复

使用道具 举报

0

主题

671

回帖

9885

积分

论坛元老

Rank: 8Rank: 8

积分
9885
发表于 7 天前 | 显示全部楼层
可以参考这个;【OS用户核应用】T5L屏串口2、3、4、5的82、83协议C语言
http://inforum.dwin.com.cn:20080 ... 7&fromuid=24741
(出处: 迪文科技论坛)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-23 01:08 , Processed in 0.065730 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表