智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2949|回复: 3
打印 上一主题 下一主题

初学STC89C52RC单片机,串口都发不出去,我太菜了!求高手帮忙!

[复制链接]

8

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
威望
138
贡献
40
兑换币
49
注册时间
2012-10-31
在线时间
23 小时
毕业学校
集美大学诚毅学院
跳转到指定楼层
1#
发表于 2013-1-16 16:38:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
10贡献
问题是这样的,小弟刚刚接触STC89C52RC单片机,买了一个核心板,然后看着网上的视频跟P89V51的用户手册,写了一个串口发送数据的小程序,通过串口线跟PC机上的串口调试助手通信,结果发不了,小弟查了好久了都没能发现是哪里的问题,程序很短的,麻烦有耐心又有耐心的前辈帮小弟看一下,小弟感激不尽!再次感谢!小弟在线等啊!
代码如下:
  1. void UART_Open(void)
  2. {
  3. /*先关闭串口中断*/
  4. ES = 0;

  5. /*使用串口的模式1(8位数据位,波特率可变),打开串口接收使能*/
  6. SCON = 0x50;

  7. /*用定时器0的自动装载(模式2)来实现串口波特率*/
  8. TMOD |= 0x02;
  9. TH0 = 0xFD;
  10. //TL0 = 0xFD;
  11. TL0 = 0xFD;
  12. TR0 = 1;

  13. /*使能串口中断*/
  14. ES = 1;
  15. EA = 1;
  16. }
  17. u8 UART_Write(u8 acWriteBuff[])
  18. {
  19. u8 cWriteCount = 0;

  20. /*如果缓冲区内无数据*/
  21. if(0 == acWriteBuff[0]) return 0;

  22. while(acWriteBuff[cWriteCount] !=0 )
  23. {
  24. SBUF = acWriteBuff[cWriteCount++];

  25. while(!TI);
  26. TI = 0;
  27. }
  28. }
  29. int main(int argc, char *argv)
  30. {
  31. UART_Open();

  32. UART_Write("hello,world!\n");

  33. while(1);

  34. return 0;
  35. }
复制代码


31

主题

370

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6026

活跃会员奖章优秀会员奖章在线王奖章论坛元老奖章

威望
3707
贡献
1593
兑换币
1043
注册时间
2012-12-27
在线时间
363 小时
毕业学校
三江学院
2#
发表于 2013-1-16 16:59:02 | 只看该作者
波特率可变是通过定时器1的溢出率来控制的,不是定时器0。你把定时器0换成定时器1试试
回复

使用道具 举报

14

主题

369

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2881

优秀会员奖章活跃会员奖章

威望
1348
贡献
823
兑换币
493
注册时间
2012-11-13
在线时间
355 小时
3#
发表于 2013-1-16 18:36:19 | 只看该作者
帮顶
回复

使用道具 举报

1

主题

332

帖子

0

精华

高级会员

Rank: 4

积分
967
威望
530
贡献
187
兑换币
438
注册时间
2013-1-8
在线时间
125 小时
4#
发表于 2013-1-17 17:04:18 | 只看该作者
慢慢来
回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 00:28 , Processed in 0.155121 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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