单片机
返回首页

PIC单片机精通_串口通信模块C实现

2018-07-30 来源:eefocus

1.串口通讯头/定义文件 usart.h





#ifndef _SERIAL_H_

#define _SERIAL_H_

 

#define BAUD 9600      

#define FOSC 9216000L

#define NINE 0     /* Use 9bit communication? FALSE=8bit */

 

#define DIVIDER ((int)(FOSC/(16UL * BAUD) -1))

#define HIGH_SPEED 1

 

#if NINE == 1

#define NINE_BITS 0x40

#else

#define NINE_BITS 0

#endif

 

#if HIGH_SPEED == 1

#define SPEED 0x4

#else

#define SPEED 0

#endif

 

#if defined(_16F87) || defined(_16F88)

#define RX_PIN TRISB2

#define TX_PIN TRISB5

#else

#define RX_PIN TRISC7

#define TX_PIN TRISC6

#endif

 

/* Serial initialization */

//'\'是对函数内属性的定义 不可缺少

#define init_comms()\

RX_PIN = 1; \

TX_PIN = 1;  \

SPBRG = DIVIDER;     \

RCSTA = (NINE_BITS|0x90); \

TXSTA = (SPEED|NINE_BITS|0x20)

 

void putch(unsigned char);

unsigned char getch(void);

unsigned char getche(void);

 

#endif

2.串口通讯源/实现文件 usart.c



/******************************************/

/*Author:Shen Chucu  All Rights Reserved!**

/*Tsinghua University

/*2016-11-15

/********************************************/

#include

#include

#include 'usart.h'

__CONFIG(0x3ffa);

 

 

void delay(unsigned int x);

static int label=0; //不做事件响应

void main()

{

   INTCON=0x00;

   GIE=1;

   PEIE=1;

   RCIE=1;

   init_comms();

   CREN=1;

   SPEN=1;

   while(1)

   {//等待中断 并进行事件响应设定

     if(label==1)

      {

        printf('OK'); 

label = 0; //发送一个回馈信号即可

        delay(50);

      }

     if(label==2)

     {

        printf('ERROR');

    label = 0; //发送一个回馈信号即可

        delay(50);

      }   

   }

}  

 

void interrupt IsReceive()

{  

   if(RCIE&&RCIF==1) //接受中断使能位 + 接收中断标志位

    {

        unsigned char temp=RCREG;  //把上位机发送的数据保存下来

        if(temp=='S')

          { 

            label=1;   //发送数据标志 1

          } 

       else if(temp=='E')

             {

               label=0; //发送数据标志 0 

             }

             else 

               label=2;  //发送数据标志 2  

    }

}

 

void delay(unsigned int x)

{

    unsigned int a,b;  //延时时间110x

    for(a=x;a>1;a--)

       for(b=110;b>1;b--)

          ;


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 用数字电路CD4069制作的万能遥控轻触开关

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • 用NE555制作定时器

  • 带有短路保护系统的5V直流稳压电源电路图

    相关电子头条文章