1.前言
PIC16F876a异步串口通信的定义以及寄存器控制,这里不再多谈,前面已经进行过详细的分析。这里注意集中在几个关键点上。
串口中断服务程序应该注意什么?
利用串口助手进行调试应该注意什么?
串口助手接收不到数据的几种可能因素?
2.实例分析
PIC单片机与上位机握手程序如下:
/********************************************************/
/*Author: Chunxu Shen; All Rights Reserved!
/*Tsinghua University 2016-11-19
/*Serial Test Low Speed
********************************************************/
#include
__CONFIG(0x3ffa);
#define BAUD 9600
#define FOSC 9216000L
#define DIVIDER ((int)(FOSC/(16UL * BAUD) -1))
unsigned char Rece_flag ; //初始化,串口接受标志
void main(void)
{
//初始化端口程序
TRISC7 = 1; //RX端口设为输入有效
TRISC6 = 0; //TX端口设为输出有效
//初始化串口设置
SPBRG = DIVIDER; //波特率设置
TXSTA = 0x24; //内部波特率-8bit-允许发送-异步通讯 空-低速模式-发送寄存器满空-无奇偶校验
RCSTA = 0x90; //串口使能-不接收单字符-允许禁止连续接收
//中断设计
GIE = 1; //打开中断总开关
PEIE = 1; //允许外围设备触发中断
RCIE = 1; //允许接收信号触发中断
RCIF = 0;
//等待PC机触发中断
while(1)
{
if('E' == Rece_flag) //对应上位机“结束”按键
{//给PC机反馈信号“END”
TXREG = 'E';
while( TRMT == 0 )
continue; //检验发送是否结束
TXREG = 'N';
while(TRMT==0)
continue;
TXREG = 'D';
while(TRMT==0)
continue;
}
else if( 'S' == Rece_flag )
{
//给PC机反馈信号“OK”
TXREG = 'O';
while(TRMT==0)
continue;
TXREG = 'K';
while(TRMT==0)
continue;
}
else //其他信号不响应
{ ; }
}
}
//接收上位机送发的信号
void interrupt usart(void)
{
if( RCIF )
{
RCIF = 0; //软件清零
Rece_flag = RCREG;
}
}
3.经验总结
1.编写中断服务程序时,一定要注意接收中断标志位这个事儿!RCIF这个标志位,硬件不会自动清空。因此,一旦我们编写中断服务程序时,先把RCIF清零!!!
2.利用串口助手进行调试的时候,关注端口号!!!(计算机->管理->设备管理器->端口)确定你选择的端口是与PIC单片机是相连的,否则即使协议很正确,端口号没对上,也白扯。
3.波特率很关键,看好高低速,把初值算对很重要。
4.感想
曾经下过决心,不碰硬件,可是呢,有的时候你不去做就没有人做,这不得不说是一种悲哀!接下来的软件,瞧!看我飞起~~~
关键字:PIC单片机 异步 串口通讯
引用地址:
PIC单片机精通_异步串口通讯实例与细节
推荐阅读最新更新时间:2024-03-16 16:10
基于PIC单片机的自动喷料机设计与应用
1 引言 目前,我国人工养殖业发展迅速。但是养殖方法却很落后,多数仍旧是采用传统的人工方式投放饲料,费时费料、饲料投放不均、距离不远,不便于定时定量地科学养殖。文中介绍了一种在鱼塘里自动喷料机的电路设计。经过实践证明。该自动喷料机不仅能够定时定量地喷洒饲料。而且喷料均匀,喷洒距离远,能明显节约饲料。大大提高养殖效益。 2 自动喷料机的硬件设计 在渔业养殖中,大多数需要在早、中、晚喷洒饲料,每次喷料时间约在两三个小时。喷饲料是按喷几十秒、停几十秒断续进行,具体一天喷饲料几次、喷料时间长度、喷停时间长度,因鱼的品种、饲料的品种、鱼的养殖密度、环境气候等因素而不同,可由用户根据具体情况自行设定。为实现上述自动控制,本设计采用以PI
[单片机]
PIC单片机入门_同步/异步通信技术基础
1.前言 通用同步 / 异步收发器 (Universal Synchronous/Asynchronous Receiver/Transmitter, USART) 模块是两个串行 I/O 模块之一 ( 另一个是 Synchronous Serial,SSP 模块 )。 USART也称为串行通讯接口(Serial Communication Interface,SCI)。 USART 可以配置为全双工异步系统,可与 CRT 终端和个人计算机等外设进行通信(RC6=TX, RC7=RX);也可配置为半双工同步系统,可与 A/D 或 D/A 集成电路,以及串行 EEPROM等外设器件进行通信。USART 可配置为以下几种工作模式:全
[单片机]
pic单片机p18f458上实现发送
//该程序运行在p IC 单片机 p18f458上实现发送 缓冲器 0向接收缓冲器0发送数据的自测试模式,其中接收采用中断方式 //发送采用查询方式 #include p18f458.h int CAN _FLAG; //定义标志寄存器 //**************初始化子程序*************** void initcan() { TRISB=(TRISB|0X08)&0XFB; //设置CANRX/RB3为输入,CANTX/RB2为输出 //设置CAN的波特率为125K,在Fosc=4M时,Tbit=8us,假设BRP=01h //则TQ= /Fosc=2*(1+1)/4=1us。 //NOMINAL BIT
[单片机]
基于PIC单片机的多媒体终端遥控器设计
1 设计理念和原理 1.1 设计理念 随着数字家庭等领域技术的迅速发展,在多媒体终端上的增值业务将越来越多,浏览网页、搜索、短信等都需要遥控器进行输入。但作为连接用户和终端之间的重要外设,遥控器的设计理念还停留在模拟电视时代,体验感较差。目前用户输入的解决方式是呼出终端的内置输入法,这样就带来了两个问题:一,不同厂家的终端都需要内置自己的中英文输入法,占用资源,而且必须搭配自己的遥控器使用,通用性不高;二,用户在输人时必须一边看遥控器输入一边看屏幕确认输入,如果文字较多会造成频频抬头和低头的麻烦,难以忍受。基于以上缺点,本文提出将输入法内置于遥控器的理念,在遥控器上输入文字后再统一将文字编码用 红外 线发给终端,终端接收后将编码译
[单片机]
PIC单片机实例八:四种方式24X24点阵显示
最近终于有空更新了,花了几天时间,弄出个小东西,虽然有很多种实现方式在网上流传了,但我却从没有试过,乘有时间,也弄出了四种方式的显示,各位帮忙看看,哪里还有不好的地方,希不吝指教. 一.原理及仿真图 此种为从右往左显示. 此中为从左往右显示 此种为从下往上显示 此种为从上往下显示 原理图说明: 1.本实例采用微芯PIC16F877A单片机,此单片机适合初学者 2.点阵采用24X24点,左边为行线,采用U1-U3三个74LS373地址所存芯片,复用单片机RB端口. 右边为列线,采用U4-U6三个74LS373地址所存芯片,复用单片机RD端口. 3.单片机RC端口控制六片373的选通. 4
[单片机]
PIC单片机相比其他单片机的四大优势介绍
本人从事单片机应用系统的开发已有多年,使用过多种型号的PIC单片机,深感PIC单片机使用起来确实很方便: 1、 PIC单片机采用精简指令集,中档产品仅需35条指令,入门门槛低,而在使用过程中绝不会感到不方便。 2、PIC单片机的数据线和指令线各自独立,代码效率高,是传统51系列单片机的2-3倍,除几个跳转类指令外均为单周期指令,在计算延时时间时非常方便。 3、PIC单片机外围接口十分丰富,能满足绝大部分应用系统的需求;比如PIC16F877A包含8路ADC,1个CCP、PWM、USART、SSP、I2C/SPI,3个定时/计数器,1个硬件WDT等接口,8K FLASH程序存储器、256字节EEPROM,能满足较复杂测
[单片机]
基于PIC单片机在电话远程控制器中的低功耗设计
引言
20世纪90年代以来,随着集成电路特征线宽的持续缩小以及芯片密度和工作频率的相应增加,降低功耗已经成为亚微米和深亚微米超大规模集成电路设计中的一个主要考虑因素。功耗的增加会带来一系列问题,例如电路参数漂移、可靠性下降、芯片封装成本增加等。因此,系统的功耗在整个系统设计中,尤其是在采用电池供电的系统中显得十分重要。
Microchip公司PIC系列的单片机为设计高性能、低功耗的单片机系统提供了很好的解决方案。下面从低功耗设计方法及具体例子来介绍PIC单片机低功耗应用。 1 低功耗设计方法
为使系统工作在低功耗状态,必须正确设置单片机的配置及工作方式。下面结合最常用的PIC12、PIC16等单片机介绍低功耗系统的设
[单片机]