51单片机串口通信c程序

#include<STC12C5A60S2.h>

#include<delay.h>

#define XTAL 32000000 // CUP 晶振频率

#define baudrate 4800 // 通信波特率

int c[20];

unsigned char js=0;

unsigned char i=0,bz=0;

unsigned int nn=0;

void jieshou()

{

ES=0;

c[i]=SBUF;

nn=nn*10+c[i]; P0=c[i];

i++; RI=0; ES=1;

bz=1;

}

void send()

{

unsigned char m;

js=0;

for(m=0;m<i;m++)

{

SBUF=c[m];

while(!TI)

;

TI=0;

}

i=0;ES=1;bz=0; P0=nn;

}

void main(void)

{

TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率

TH1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate)));

TL1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate))); // 时器0赋初值

P0=1; 定

SCON = 0x50;

TR1 = 1; ES = 1; //开中断. EA = 1;

while(1)

{

while(js==0)

{

if(RI==0&&bz==1)

{

delay10ms(5) ;

if(RI==0)

js=1; ES=0;

}

}

send ();

;

}

delay500ms(1) ;

}

void serial () interrupt 4 {

jieshou();

}

 

第二篇:(原创)51单片机C语言程序设计--速学教程实例(入门篇)之串口通信

/******************************************************************//*名称:与电脑串口通信演示程序*//*作者:苏涛*//*时间:2011-01-18*//*单位:安徽建筑工业学院电子与信息工程学院*//*07级电子信息工程专业二班*//******************************************************************/#include<reg52.h>//头文件调用,写程序时都要加上

#defineuintunsignedint//宏定义,为了后面定义变量书写简便#defineucharunsignedchar

/******************************************************************//*名称:主函数*//*内容:打开串口调试程序,将波特率设置为9600,无奇偶校验*//*晶振11.0592MHz,发送和接收使用的格式相同,如都使用*//*字符型格式,在发送框输入hello,ILoveMCU,在接*//*收框中同样可以看到相同字符,说明设置和通信正确*//******************************************************************/voidmain(void)

{

SCON=0x50;//SCON:模式1,8-bitUART,使能接收TMOD|=0x20;

TH1=0xfd;//波特率9600初值

TL1=0xfd;

TR1=1;

EA=1;//打开总中断

ES=1;//打开串口中断

while(1)

{

}

}

/******************************************************************//*串口中断程序*//******************************************************************/voidUART_SER()interrupt4

{

ucharTemp;//定义临时变量

if(RI)

{

RI=0;

Temp=SBUF;//判断是接收中断产生//标志位清零//读入缓冲区的值//主循环不做任何动作

P1=Temp;SBUF=Temp;}if(TI)TI=0;}//把值输出到P1口,用于观察//把接收到的值再发回电脑端//如果是发送标志位,清零

相关推荐