OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5533|回复: 8

51?串口通信功能无法实现。路过的哥子看看,谢谢。

[复制链接]

4

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-3-21
在线时间
0 小时
发表于 2014-5-11 10:50:42 | 显示全部楼层 |阅读模式
5金钱
功能:单片机收到一个字符,然后发送回PC。

问题:编译通过,但是跟PC串口通信,就是功能实现不了。???
 1.硬件正常,我复制别人的代码,能够正常通信。
 2软件设置也正常,串口助手波特率设置正确。9600,若设置错误至少有返回
[mw_shl_code=c,true]#include"stc12c5a60s2.h" //#include<reg52.h> //#include <string.h> typedef signed char schar8_t; typedef signed int sint16_t; typedef unsigned char uchar8_t; typedef unsigned int uint16_t; sbit led5=P4^0; //bit flag_get=0; //标志,收到后立马发送给PC //uchar8_t send_tem; uchar8_t g_get,flag_get; //收到的字符 标志 void uart_send(uchar8_t send_tem); void init_uart() ; void delay_ms(uint16_t ms_number); /*function:1ms延时函数*/ void delay_ms(uint16_t ms_number) // 1ms延时函数 (STC @ 11.0592MHz) { uint16_t i,j; //unsigned char j; for(i=0;i<ms_number;i++) { for(j=0;j<500;j++); for(j=0;j<360;j++); } } /*function:串口初始化函数*/ void init_uart() { TMOD=0X20; //定时器1,模式2 8位自动重装 TCON=0X40; //TR=1,T1启动 SCON=0X50; //M0 M1 M2 REN 0101 PCON=0X00; TH1=0XFD; //波特率9600=sysclk/12(256-THx) TL1=0XFD; EA=1; ES=1; } /*function:串口接收*/ void uart_get()interrupt 4 { uchar8_t get_tem; //收到的字符 if(RI==1) { RI=0; get_tem=SBUF; g_get=get_tem; flag_get=1; } } /*function:串口发送*/ void uart_send(uchar8_t send_tem) //串口发送字符 { SBUF=send_tem; while(TI==0); TI=0; } void main() { void init_uart(); while(1) { if(flag_get==1) { flag_get=0; uart_send(g_get); // EA=1; /* led5=1; delay_ms(500); led5=0; delay_ms(500); */ } } } [/mw_shl_code]


最佳答案

查看完整内容[请看2#楼]

终于被我把错误找到了,啊啊啊啊,在主函数中的函数调用错误,前面多加了一个 void 这样子是不是里面的TH1,TL1没有装入值,空的呀?继续求师兄回复。 void main()  62 { 63   void init_uart(); ...
等待就是浪费时间!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-3-21
在线时间
0 小时
 楼主| 发表于 2014-5-11 10:50:43 | 显示全部楼层
终于被我把错误找到了,啊啊啊啊,在主函数中的函数调用错误,前面多加了一个 void
这样子是不是里面的TH1,TL1没有装入值,空的呀?继续求师兄回复。

void main() 
62 {
63   void init_uart();
64   while(1)
65   {
66       if(flag_get==1)
67       {
68        flag_get=0;
69        uart_send(g_get);
70      //  EA=1; 
71      /*    led5=1;
72        delay_ms(500);
73        led5=0;
74        delay_ms(500);   */
75       }
76  }
77 }

等待就是浪费时间!
回复

使用道具 举报

4

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-3-21
在线时间
0 小时
 楼主| 发表于 2014-5-11 10:50:43 | 显示全部楼层
回复【4楼】Badu_Space:
---------------------------------
我找到原因了,但是如果加上void是不是计数器就没有加入初值,TH1,TL1=0;
等待就是浪费时间!
回复

使用道具 举报

4

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-3-21
在线时间
0 小时
 楼主| 发表于 2014-5-11 11:09:56 | 显示全部楼层
不要沉了,help!!!
等待就是浪费时间!
回复

使用道具 举报

4

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-3-21
在线时间
0 小时
 楼主| 发表于 2014-5-11 11:24:42 | 显示全部楼层
主函数修改如下 加了ES串口中断的开关,让它发完了再说。但是仍然不行。求救

 void main()
{
  void init_uart();
  while(1)
  {
  if(flag_get==1)
  {
   flag_get=0;
        ES=0;
       uart_send(g_get);
   ES=1;
 /*    led5=1;
   delay_ms(500);
   led5=0;
   delay_ms(500);   */
  }
 }
}
等待就是浪费时间!
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-11 12:32:17 | 显示全部楼层
看着没啥问题,初始化get_tem=0试下
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

4

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-3-21
在线时间
0 小时
 楼主| 发表于 2014-5-11 13:06:48 | 显示全部楼层
回复【4楼】Badu_Space:
---------------------------------
 不行,串口没有任何反应。好纠结,卡这里无法继续了
等待就是浪费时间!
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-11 19:36:31 | 显示全部楼层
回复【7楼】dianzi430:
---------------------------------
你这样写不会报警?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

4

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-3-21
在线时间
0 小时
 楼主| 发表于 2014-5-28 17:40:47 | 显示全部楼层
回复【8楼】Badu_Space:
---------------------------------
sorry,sir,貌似不会报警。
等待就是浪费时间!
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 22:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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