这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » C51单片机与PC串口通信的单片机部分程序

共2条 1/1 1 跳转至

C51单片机与PC串口通信的单片机部分程序

工程师
2021-05-21 00:00:35     打赏

注意波特率是9600

功能:电脑通过串口给单片机发一个字节,单片机收到后又给电脑发回去


,#包括

#define uchar无符号字符

#define uint unsigned int


uint temp;

bit flag;

void init_ser1();

main()

{

init_ser1();

而(1)

{

如果(RI == 1)

{

P1 = SBUF;

RI=0;

}

如果(标志== 1)

{

ES=0;//暂时关闭接收

标志= 0;

SBUF =温度;

while(!TI);//等待发送完毕

TI=0;

ES = 1;

}

}

}


无效sel()中断4

{

RI=0;

P1=SBUF;

temp=SBUF;

flag=1;

}


void init_ser1()

{


REN=1;

SM0=0;

SM1=1;

TMOD=0x20;

TH1 = 0xFD;

TL1 = 0xFD;

EA = 1;

TR1 = 1;

ES = 1;

}





//======声明======

#包括

无符号字符Read_Keyboard();

无效的RS232_SendData(unsigned char Sdata);

//======延迟函数======

无效延迟(无符号int t)

{

for(;t>0;t--); //延迟循环

}

//======UART初始化函数=====

无效的RS232_Init()

{

SCON=0x50; //0101 0000 UART工作模式1,REN=1(本位为串行接收启用位1:开始接收 0:停止接收)

TMOD=0x20; //0010 0000 Timer1 工作模式2

PCON=0x80; //SMOD1=1

TH1=0xfa; //波特率9600 bps at 11.0592MHZ

TL1=0xfa; //波特率9600 bps at 11.0592MHZ

TR1=1;

}

//======主函数============

void main()

{

unsigned char Keyboard_Status=0xff; //定义按键

RS232_Init(); // 初始化UART

while(1)

{

Keyboard_Status=Read_Keyboard()|0xf0; //读取按键值(屏蔽高4位)

//

switch(Keyboard_Status)

{

case ~0x01:RS232_SendData('A');break;

案例〜0x02:RS232_SendData('B'); break;

案例〜0x04:RS232_SendData('C'); break;

案例〜0x08:RS232_SendData('D'); break;

默认值:RS232_SendData('X'); break;

}

}

}

//===========发送数据函数========

无效的RS232_SendData(unsigned char Sdata)

{

SBUF=Sdata; //发送数据

while(TI==0); //等待发送结束

TI=0; //清除发送结束标志

}

//========读取按键函数==========

未签名的字符Read_Keyboard()

{

unsigned char Keys_Value; //定义按键变量

unsigned char Keys_Temp;

{

P1=0xff; //P2口置高,准备读取按键状态

Keys_Temp=P1; //读取按键状态

delay(150); //消抖延时

P1=0xff; //P2口置高,准备读取按键状态

Keys_Value=P1; //读取按键状态

}

while(Keys_Value!=Keys_Temp); //如果读状态不一致,则重复读取键值

return Keys_Value; //返回按键状态值




高工
2021-06-04 23:50:11     打赏
2楼

程序写的蛮不错的


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]