pic16f685的串口程序是怎么样的流程?

[复制链接]
1600|5
 楼主| 渔夫的烟斗 发表于 2017-4-9 07:25 | 显示全部楼层 |阅读模式
本帖最后由 渔夫的烟斗 于 2017-4-9 07:28 编辑

file:///C:/Users/YING/AppData/Local/Temp/snap_screen_20170409071121.pngfile:///C:/Users/YING/AppData/Local/Temp/snap_screen_20170409071121.png






1.查询方式:是对哪个REG进行查询“
2.中断方式:中断服务号是多少”
3.波特率设置是不是也同STC一样要先设定定时器“
blog
  1. #include "pic.h"
  2. #include
  3. __CONFIG (CP_OFF&WDTE_OFF& BOREN_OFF&PWRTE_OFF &FOSC_HS&WRT_OFF&LVP_OFF&CPD_OFF);

  4. //-------------------------------------------------------------------------
  5. #define uint unsigned int
  6. #define uchar unsigned char
  7. //-------------------------------------------------------------------------
  8. //串口接收、发送变量
  9. void delay10ms(void);
  10. void delay10ms_x(unsigned char x);
  11. char strSentData[20]="Hello World!\r";
  12. char m=0; // i做为访问数组的下标
  13. main()
  14. {
  15. char i=0;
  16. SPBRG=25;
  17. SPBRGH=0;
  18.    
  19. SYNC=0; // 选择异步模式
  20. BRGH=0; // 低波特率方式
  21. BRG16=0; // 高波特率方式   
  22.    //BRGH=1; // 高波特率方式

  23.    TXEN=1; // 发送使能
  24.    TX9=0;  // 不发送第9位
  25.    SPEN=1; // USART使能
  26.    // 以上几条语句是分别对每位赋值,目的使初学者看清楚每位功能
  27.    // 实际项目中建议用以下两条语句替代,效率更高
  28.    //RCSTA=0b10000000;  
  29.    //TXSTA=0b00100100;
  30.    TXREG='A'; // 把要发送的数据放到TXREG中,USART模块开始自动发送
  31.    while(1)
  32.    {
  33.      while(strSentData[i]!='\0') // 当没到字符串结束时
  34.      {
  35.        TXREG=strSentData[i];
  36.        while(TRMT!=1) // 不为一说明发送未完成,则等待
  37.        {         
  38.        }
  39.        i++;
  40.      }
  41.     i=0;
  42.    }
  43. }
网上找的一段代码。
首先没有发现波特率的具体设定,只说高低波特率。。在PDF手册有看到一个自动波特率,不知道是不是这么用的
二也没有发现定时器,即波特率发生器,难道这个PIC已经不需要这个了?
*******************************************************************************
PIC16f串口通信程序_百度文库
这边的程序却有波特率的具体值的设定。
两者有什么不一样么?


本帖子中包含更多资源

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

×
GeekyGeek 发表于 2017-4-9 09:19 | 显示全部楼层
1. 接收轮询RCREG 或RXREG,
2. PIC16只有一个中断入口
3. PIC 不需要额外设置定时器给UART用
hj007 发表于 2017-4-9 11:12 | 显示全部楼层
1、楼主说的查询应该是指发送查询吧,如果是发送查询那只要查询TRMT寄存器,该寄存器常态为1,当在发送数据时为0,而且只能读由硬件置1或清零。
2、PIC单片机没有中断服务序号。
3、关于波特率的设置PIC单片机有一个专门的波特率发生器寄存器,不需要使用特定的定时器,直接配置寄存器即可,而且数据手册里面也有计算公式。

注:楼主你自己要多看数据手册,好多详细的说明手册里面都有,不总是依赖别人和网络,我是从今年2月份才开始接触PIC单片机的,一上来就是PIC18系列,我也是一直在看数据手册。以上为个人的学习积累所回答,如有误点还请指教。
 楼主| 渔夫的烟斗 发表于 2017-4-9 20:59 | 显示全部楼层
hj007 发表于 2017-4-9 11:12
1、楼主说的查询应该是指发送查询吧,如果是发送查询那只要查询TRMT寄存器,该寄存器常态为1,当在发送数据 ...

可能是换了一种芯片,思考的方式有点呆板吧
 楼主| 渔夫的烟斗 发表于 2017-4-9 21:03 | 显示全部楼层
hj007 发表于 2017-4-9 11:12
1、楼主说的查询应该是指发送查询吧,如果是发送查询那只要查询TRMT寄存器,该寄存器常态为1,当在发送数据 ...

那就是说PIC的没有中断?这个中断应该会有吧?
像stc的是 void interrupt_timer1(void) interrupt 3 这种形式的。
 楼主| 渔夫的烟斗 发表于 2017-4-9 21:11 | 显示全部楼层
hj007 发表于 2017-4-9 11:12
1、楼主说的查询应该是指发送查询吧,如果是发送查询那只要查询TRMT寄存器,该寄存器常态为1,当在发送数据 ...

中档系列 PIC
单片机的中断入口只有一个,因此整个程序中只能有一个中断服务函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

185

帖子

2

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