6454|2

40

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

PIC单片机串口基础(一) [复制链接]

题外话:刚写了一篇软件串口调试手记,其中有一个问题要提出来,那个程序做多机通讯是有问题的,问题在于在多机通讯中,空闲时TX是不能置为输出状态的.....可以将程序改为TX=0,用TRISB来控制高低电平输出,当然,在硬件上需要对TX拉高。

复习一下学到的PIC自带串口的使用方法:

我这有一份从IC37.com下载的PIC18F2455的中文资料(顺便说一下,这个网站上似乎很多中文资料),相当详细!当然,很多东西我是用不到的,现在把重点抄下来:

设置异步发送的操作步骤如下:
1. 选择合适的波特率,对SPBRGH:SPBRG寄存器进行初始化。 按需要将BRGH 和BRG16 位置1或清零,以获得目标波特率。(16C6X系列的似乎没有BRG16)
2. 通过将 SYNC 位清零并将 SPEN 位置 1 使能异步串口。
3. 若要翻转TX 引脚的信号,将TXCKP位置1。(一般情况应该不用翻转)
4. 如果需要中断,将中断允许位TXIE 置1。(发送完成后引发中断(我估计的),如果有多很多数据要发送,你又很忙,那以你可以将一个字节的数据送给TXREG后就可以干别的去了,等中断后再来发一下字节)
5. 若需要发送9 位数据,请将发送位TX9 置1。 发送的第9 位可以是地址位也可以是数据位。(多机通讯的重点,如果不用多机通讯,也就不用理会了)
6. 通过将TXEN 位置 1使能发送,此操作同时也会将TXIF位置 1。
7. 如果选择发送9位数据,将第9位数据装入TX9D位。(同上,如果不用多机通讯也不用理会它)
8. 将数据装入TXREG 寄存器 (启动发送)。(你装进去,它就给你发出去,当然,发送完成是需要一点时间的,一个字节一个字节发,如果要发字符串,自己写程序吧)
9. 若想使用中断,请确保将 INTCON 寄存器中的GIE和 PEIE位(INTCON<7:6>)置 1。(既然是“若想”,那就是说用不用中断随便你咯。)
注意: “不管TXIE的状态如何,只要中断发生,TXIF就会置 1 并且不能用软件清零。 只有在新数据写入TXREG 寄存器时,TXIF才会复位。”
这是DATASHEET上的一段话,当时未看到,写了下面一段程序,结果死 了......
TXREG=x;
while(!TXIF);
TXIF=0;  //这是错的,删除这句就对了。TXIF的意思是如果RXREG空了就置1,当你写了数据它自然就是0了,所以不用你清0的。

上面这是不用中断的写法,如果你用中断,就不用这样写了。
看起来好象很复杂,其实写出来很简单:

  1. #include
  2. void main(void)
  3. {
  4. SPBRG=25;  //4MHZ,波特率2400
  5. SPEN=1;
  6. TXEN=1;
  7. TXREG='A';
  8. while(1);
  9. }

复制代码
如果下表中没有你要的波特率,可查datasheet

proteus仿真图
连我自己都大吃一惊:如此简单!
这篇文章太长了,标题加个“一”,再写接收部份。

最新回复

谢谢您! 挺好用的  详情 回复 发表于 2011-7-28 13:26
点赞 关注
 

回复
举报

219

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
好好
 
 
 

回复

36

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢您!
挺好用的
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表