打印

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

[复制链接]
1207|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
PIC16F685中文资料.zip (3.02 MB)





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

//-------------------------------------------------------------------------
#define uint unsigned int
#define uchar unsigned char
//-------------------------------------------------------------------------
//串口接收、发送变量
void delay10ms(void);
void delay10ms_x(unsigned char x);
char strSentData[20]="Hello World!\r";
char m=0; // i做为访问数组的下标
main()
{
char i=0;
SPBRG=25;
SPBRGH=0;
   
SYNC=0; // 选择异步模式
BRGH=0; // 低波特率方式
BRG16=0; // 高波特率方式   
   //BRGH=1; // 高波特率方式

   TXEN=1; // 发送使能
   TX9=0;  // 不发送第9位
   SPEN=1; // USART使能
   // 以上几条语句是分别对每位赋值,目的使初学者看清楚每位功能
   // 实际项目中建议用以下两条语句替代,效率更高
   //RCSTA=0b10000000;  
   //TXSTA=0b00100100;
   TXREG='A'; // 把要发送的数据放到TXREG中,USART模块开始自动发送
   while(1)
   {
     while(strSentData[i]!='\0') // 当没到字符串结束时
     {
       TXREG=strSentData[i];
       while(TRMT!=1) // 不为一说明发送未完成,则等待
       {         
       }
       i++;
     }
    i=0;
   }
}
网上找的一段代码。
首先没有发现波特率的具体设定,只说高低波特率。。在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,当在发送数据 ...

可能是换了一种芯片,思考的方式有点呆板吧

使用特权

评论回复
5
渔夫的烟斗|  楼主 | 2017-4-9 21:03 | 只看该作者
hj007 发表于 2017-4-9 11:12
1、楼主说的查询应该是指发送查询吧,如果是发送查询那只要查询TRMT寄存器,该寄存器常态为1,当在发送数据 ...

那就是说PIC的没有中断?这个中断应该会有吧?
像stc的是 void interrupt_timer1(void) interrupt 3 这种形式的。

使用特权

评论回复
6
渔夫的烟斗|  楼主 | 2017-4-9 21:11 | 只看该作者
hj007 发表于 2017-4-9 11:12
1、楼主说的查询应该是指发送查询吧,如果是发送查询那只要查询TRMT寄存器,该寄存器常态为1,当在发送数据 ...

中档系列 PIC
单片机的中断入口只有一个,因此整个程序中只能有一个中断服务函数。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

178

帖子

2

粉丝