#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;
}
/*上位机发给单片机发一个字符,单片机回“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;//方便在主程序中查询判断是否收到了数据}
一个c语言的串口通信程序范例标签分类技术笔记c语言串口通信通信程序it最近接触一个项目用HLC1C激光位移传感器易控组态软件完成生…
writeincludeltstdiohgtincludeltstdlibhgtincludeltsystypeshgtincludeltsyssta…
includeltSTC12C5A60S2hgtincludeltdelayhgtdefineXTAL320xx000CUP晶振频…
用Win32API实现串行通信20xx7975618PCVCNETwangxi阅读次数11366给大家说明一下我用word编辑的时…
includeltstdiohgtincludeltstringhgtincludeltdoshgtincludeltstdarghgtinclude…