[学习资料] PIC单片机(PIC16F877A)串行收发程序(转)

[复制链接]
 楼主| zljiu 发表于 2019-6-21 13:09 | 显示全部楼层 |阅读模式
#include<pic.h>
#define uchar unsigned char
uchar rtemp,sflag;
void SerialInit(void)
{
        TXSTA=0x24;        //开启发射使能位、高波特率,TRMT初始值可0可1
        RCSTA=0x90;        //开启串口、连续接收、
        SPBRG=0x19;        //4M晶振,波特率9600,则SPBRG初值为25
        RCIE=1;                //开启串口接收完成中断
        GIE=1;                //开全局中断
        PEIE=1;                //开第一外设中断       
}



 楼主| zljiu 发表于 2019-6-21 13:10 | 显示全部楼层
void interrupt SerialService(void)        //接收中断
{
        if(RCIE&&RCIF)
        {
                RCIF=0;        //清零接收完成标志位
                rtemp=RCREG;        //读接收缓冲区
                sflag=1;
        }
}


 楼主| zljiu 发表于 2019-6-21 13:10 | 显示全部楼层
void main(void)
{
        SerialInit();
        while(1)
        {
                if(sflag==1)
                {
                        RCIE=0;        //发送前关闭接收中断允许位
                        sflag=0;
                        TXREG=rtemp;        //数据送发送缓冲区
                        while(!TXIF);        //等待发送完成,众想教程中查询的是TRMT,并且发完后未清零TRMT
                        TXIF=0;                //清零发送完成标志位
                        RCIE=1;                //发送完成开启接收中断允许位
                }
        }
}

 楼主| zljiu 发表于 2019-6-21 13:10 | 显示全部楼层

本帖子中包含更多资源

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

×
mjs0528 发表于 2019-10-6 20:02 | 显示全部楼层
感谢分享,感谢楼主!!!
wahahaheihei 发表于 2019-10-7 07:49 | 显示全部楼层
这种写法,在今年已经OUT了,都是流行用MCC了。
wahahaheihei 发表于 2019-10-7 08:21 | 显示全部楼层
貌似Proteus就支持PIC的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

3327

帖子

3

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