PIC单片机与PC机实现串行通信的设计

单片机软件:

单片机软件主要由以下几个部分组成:初始化程序,显示程序,键盘输入程序,串行接收程序,串行发送程序。

程序采用C语言,简单明了,经过PICC编译通过。

全部程序如下:

#include

//预定义

#define uch unsigned char

//显示用码表

const uch shu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0xff};

//变量

int data,temp1,temp2,temp3,temp;

uch flag,keylock;

uch point,buffer[3];

//初始化

void init()

{

TRISB=0;

PORTB=0;

TRISC=0;

PORTC=0;

keylock=1;//初始化键盘按键标志位,用于锁定按键

//USART部件初始化

SPBRG=0x19;//设置波特率为9600bps

TXSTA=0x04;//选择异步高速8位数据传输模式

RCSTA=0x80;//允许串行端口工作

TRISC=0x80;//设置为高阻态,防止干扰

TXEN=1;//发送允许

CREN=1;//接收允许

PEIE=1; //开放外设中断

RCIE=1; //开放串行口中断

ei(); //开放总中断

}

//显示需要的延时

void delay()

{

int i;

for(i=0;i《1000;i++);

}

//发送子程序

void send_usart()

{

uch i;

for(i=0;i《3;i++)//每次发3个数据

{

if(i==0)TXREG=data/100+0x30;//求得百位

if(i==1)TXREG=data%100/10+0x30; //求得十位

if(i==2)TXREG=data%10+0x30; //求得个位

while(1)

{

if(TXIF==1)break;//等待发送完成

}

}

}

//中断接收子程序

void interrupt receive(void)

{

if(point《3)//是否已经接收到3个数据

buffer[point++]=RCREG-48;//没有,继续接收

else point=0;//是,指针复位

data=buffer[0]*100+buffer[1]*10+buffer[2];//组合成三位数

}

//数码管显示

void display(int dis_data)

{

int dis_data_ge,dis_data_shi,dis_data_bai;

dis_data_ge =dis_data%10;//个位

dis_data_shi=dis_data%100/10;//十位

dis_data_bai=dis_data/100; //百位

if(dis_data==0)//若数据为0,只显示1位

{

dis_data_ge=0;

dis_data_shi=10;

dis_data_bai=10;

}

if(dis_data《10)//若数据小于10,则十位与百位关闭显示

{

dis_data_shi=10;

dis_data_bai=10;

}

if(dis_data《100)//若数据小于100,则只显示两位

{

dis_data_bai=10;

}

RC0=0;

RC1=0;

RC2=1;

PORTB=shu[dis_data_ge];//个位送显

delay();

RC0=0;

RC2=0;

RC1=1;

PORTB=shu[dis_data_shi];//十位送显