串口通信c

#include<reg52.h> //包含头文件,头文件一般不需改动 //头文件包含特殊功能寄存器的定义 #define uchar unsigned char

#define uint unsigned int

uchar a;

sbit K1=P3^7;

//串口初始化程序

void chuankou1()

{

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

TR1=1;

EA=1;

ES=1;

SCON=0x50;

}

//延迟函数

void delay(uint z)

{

uint x, y;

for(x=0;x<z;x++)

for(y=110;y>0;y--);

}

//主函数

void main()

{

chuankou1();

delay(5);

K1=1;

while(1)

{

if(K1==0)

{

while(!K1);

ES=0;

SBUF=0x55;

while(!TI);

TI=0;

ES=1;

}

}

}

//串口中断子程序 //打开定时器1方式2 //重装值9600波特率,晶振11.0592Hz //打开定时器1 //总中断打开 //使用模式一,使能接受

void chuankou() interrupt 4 //打开中断程序 {

RI=0;

a=SBUF;

P2=SBUF;

SBUF=a;

}

 

第二篇:串口通信C程序

/*上位机发给单片机发一个字符,单片机回“I get+字符”*/#include<reg52.h>unsigned char flag,i,x;//flag意为旗帜;这里用作标志位unsigned char code table[]={'I',' ','g','e','t',' '};void init()//初始化函数{ /*不用设置ET1=1来启动定时器中断,因为不需要*/TMOD=0x20;//把定时器1设定为工作方式2TH1=0xfd;//设定串口通信的波特率为9600TL1=0xfd;TR1=1;//把定时器1的控制位赋为1以开启定时器1REN=1;//允许串行口接受数据SM0=0;//置串行口工作方式为10位异步收发,波特率可变SM1=1;EA=1;//开总中断ES=1;//开中断允许寄存器IE中的串行口中断允许位 }void main(){init();//将与串口通信有关的特殊功能寄存器初始化while(1){if(flag==1)//如果flag为1说明程序已执行中段服务{ES=0;//关闭串口中段,下面开始发数据for(i=0;i<6;i++){SBUF=table[i];while(!TI);//数据发送完后TI会由硬件置1TI=0;//发射中断标志位置0停止申请中段}SBUF=x;//发送串口发送寄存器中的数据(即X)while(!TI);//数据发送完TI=0;//发射中断标志位置0停止申请中段ES=1;//关闭串口中段flag=0;//恢复flag初始值}}}void ser() interrupt 4{/*串行口中断服务程序*/RI=0;//接收中断标志位需要用软件置0使之停止申请中段x=SBUF;//取走SBUF中的数据,这是中断响应的目的flag=1;//方便在主程序中查询判断是否收到了数据}