历史上的今天
今天是:2025年07月30日(星期三)
2018年07月30日 | PIC单片机精通_串口通讯与串口调试实例
2018-07-30 来源:eefocus
1.引子
团队之所以称之为团队,就意味着多个人在一起共事。需要的是谦虚,谦逊,切勿言之偏偏。也要学会尊重,任何一门编程语言都有自己的优势与不足,否则早就有一门语言一统天下啦!!!我由VB入门,利用C、C++、Java、TCL进行过开发,至今不敢妄言哪种语言最好,只知道把事情做好,才是最成功的。
耐心与细心,至关重要。最忌浮于事,遇到问题要仔细分析,千万不可抱怨。作为软件出身的傻大个,竟然“沦落”到进行电子线路测试、故障排除、阻抗匹配,不得不说是配合的环节出现了问题,再此感谢一下我的母校——华中大,还好本科管得严,任务重,电子电力的知识还没有忘记。
今天记载的是独立开发的串口通信程序,没有利用PIC自带的Example,很适合新手,共同进步。
2.串口通信实例与详解
/********************************************************/
/*Author: Chunxu Shen; All Rights Reserved!
/*Tsinghua University
/*2016-11-14
********************************************************/
#include
__CONFIG(0x3ffa);
#define BAUD ???UL
#define FOSC ???UL //根据实际情况,自己设定
#define DIVIDER ((int)(FOSC/(16UL * BAUD) -1))
unsigned int send1[2] = {0x4f,0x4b}; //'O'=ASCII 0x4f;'K'=ASCII 0x4b; “OK”
unsigned int send2[5] = {0x45,0x52,0x52,0x4f,0x52}; //'E'=ASCII 0x45;'R'=ASCII 0x52 “ERROR”
unsigned char rece; //全局变量
unsigned int cnt; //计数器
void main(void)
{
//初始化端口程序
TRISC7 = 1; //RX端口设为输入有效
TRISC6 = 0; //TX端口设为输出有效
//初始化串口设置
SPBRG = DIVIDER; //波特率设置
TXSTA = 0x04; //异步通讯-禁止发送数据-高速模式
RCSTA = 0xA0; //串口使能-接收单字符-禁止连续接受
//中断设计
RCIE = 1; //允许接收信号触发中断
GIE = 1; //打开中断总开关
PEIE = 1; //允许外围设备触发中断
//无限循环,等待PC机触发中断
while(1)
{
......
}
}
//接收上位机送发的信号
void interrupt usart(void)
{
if( RCIE )
//RCIE:开放串行中断请求 RCIF:接收中断允许(接收区满or单字符)
{
......
}
}
3.心得感悟
1.“查询”和“中断”哪种方式好?
这个问题就很奇怪了;其实没有绝对的好与不好。就个人而言,我更偏向于中断,思路比较清晰。无论哪种方式,记住核心就好。中断:采用的是通信外围设备触发(也就是PC机发送信号);而查询方式:采用的是接收移位寄存器溢出标志位以及发送移位寄存器清空的标志位。
2.为什么在main函数中设置字符数组mplab一直报错?
这个问题同学问我之后我一直没有答上来,因为我感觉这本身是没有错的。可能是配置的问题。为什么我没有碰到?因为我习惯把字符数组放到程序的预定义处。我也很推崇这种方式,这会大大增强程序的可读性。
3.通信流程该如何设定?
单片机通信模块都很相似:端口方向配置(那个是发送数据?哪个是接收数据?);串口状态配置(打开串口?连续发送?同步/异步?);中断配置(打开接收中断触发事件、开启总中断、开启外围中断触发);最后一个是进行数据处理。
4.TXSTA=0x24;会怎么样?
TXSTA=0010 0100B;异步-高速-允许发送模式
就个人而言,不建议这样写。因为接收信号触发中断,如果此时发送还是允许的,容易陷入一直都发送的死区。所以,我们可以试着这样做:“激发信号”触发中断->允许数据发送->发送数据->关闭数据发送。
史海拾趣
|
IP摄像机(标清)潜在优势 使用IP摄像机最突出的优势在于它可以直接把摄像机连接到IP网络或计算机网络上,而在模拟摄像机系统中则需要另外再增加一个计算机(通常是编码器或者DVR),因此,在某些情况下,使用IP网络能很大程度上减 ...… 查看全部问答> |
|
void CStyCString2ValueDlg::OnButton1() { char *s=\"123\", *stops; int i; //这三种方法无论在VC还是eVC均正常 i=strtol( ...… 查看全部问答> |
|
享受32位的乐趣---EJ-STM32体验板,请各路大侠拍砖! 人人都能有机会享受32位的乐趣了! 重庆优易特电子公司最新推出的EJ-STM32,是一款基于意法半导体(ST)STM32系列高性能32位处理器(Cortex-M3内核)的DEMO板。该板采用底板与核心板组合的工作方式,只需通过换插不同的CPU核心 ...… 查看全部问答> |
|
$(\'swf_K8k\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/sid/XMjcyNjgxNDUy/v.sw ...… 查看全部问答> |
|
日前,德国改装公司Abt Sportsline发布了奥迪Q3改装套件。 外观套件包括前格栅,前扰流板,车门饰条,集成了排气系统的后保险杠和尾翼。 动力方面,Abt将提供汽油发动机不同程度的升级,针对2.0 TSI发动机,经过提升后从原来的21 ...… 查看全部问答> |




