AT89C51单片机实现单片机串口互动(中断方式,单片机--单片机,应答)

这篇具有很好参考价值的文章主要介绍了AT89C51单片机实现单片机串口互动(中断方式,单片机--单片机,应答)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

AT89C51单片机实现单片机串口互动(中断方式,单片机--单片机,应答),单片机,嵌入式硬件

 说一下功能:客户机发送0x01到服务机

2服务单片机应答0xf2到客户机

3客户机接收到0xf2,发送信息153432这6个数字到服务机

4client发送完信息后发送0xaa结束通信

5server接收到0xaa后回复0xaa结束通信,从此老死不相往来

看代码:

//发送端代码

#include "reg51.h"
#include "myheader.h"
#define uchar unsigned char
long int sleep_i=0;
long int main_i=0;
int bufferc[6]={0};
uchar tag=0;
void test()
{
	P17=0;
}
void main()
{
	uchar sendx[6]={1,5,3,4,3,2};
	sleep(1000);
	TMOD=0x20;//采用初值自动重载的方式
	TH1=0XF4;//根据波特率计算公式这里需要设置为这么多才能够在串行数据传输模式1的状况下实现波特率2400B/S
	TL1=0XF4;
	TR1=1;//启动定时器开始计时
	SCON=0X40;
	REN=1;
	EA=1;
	ES=1;
	SBUF=0x01; //发送01
	while(TI==0);
//	test();
	for(;;)
	{
			if(tag==1)break;
	}
	if(tag==1)
		{
		EA=0;
		for(main_i=0;main_i<6;main_i++)
		{
			SBUF=sendx[main_i];
			while(TI==0);
			TI=0;
		}
		EA=1;
		tag=0;
	}
	SBUF=0XAA;
	while(1);
}

void int_4() interrupt 4
{
	EA=0;
	if(SBUF==0X01) 
	{
		;//while(RI==0);
	}
	else if(SBUF==0XF2)  
	{
		tag=1;
	}
	else if(SBUF==0Xaa)
	{
		
		if(TI==1)
		{
			;
		}
		else if(RI==1)  
		{
			REN=0;
		}
	}
	else
	{
		;
	}
	RI=0;TI=0;
	EA=1;
}


void sleep(long int a)
{
	for(sleep_i=0;sleep_i<a;sleep_i++)
	{
		;
	}
}

服务端代码:

#include "reg51.h"
#include "myheader.h"
#define uchar unsigned char
int szc[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int bufferc[6]={0};
int sza[6]={0x01,0x02,0x04,0x08,0x10,0x20};
int t=0;
int i=0;
void display()   //显示设备没有问题,因为可以忠实的显示出012345  如果是显示异常比如是数据出问题:bufferc[6]数据出了问题
{									//设备全部显示0,说明bufferc[6]没有被赋值  ,找到赋值bufferc语句
	uchar i=0;
	uchar num=0;
	for(i=0;i<6;i++)  //显示异常,只能显示一个数字P1角有问题
	{
		num=bufferc[i];  //bufferc【】数据异常,0位置:3  1位:4  2位:5  3位置:6    4位置:后面都是0 也就是说1,2都被另外那个东西给截住了
		P2=szc[num];
		P1=sza[i];
		sleep(1);
		P2=0xff;
	}
}

void test()
{
	P17=0;
}

void main()
{
	TMOD=0x20;
	TH1=0XF4;//根据波特率计算公式这里需要设置为这么多才能够在串行数据传输模式1的状况下实现波特率2400B/S
	TL1=0XF4;
	TR1=1;
	SCON=0x40;//串口工作与方式1,定义了传送数据的格式
	EA=1;
	ES=1;   //串口中断开关打开
	REN=1;
	while(1)
	{
		display();
	}
}

void int_4() interrupt 4
{
	static uchar first=0;
	EA=0;
	t=SBUF;
	if(t==0x01&&first==0)
	{
		first++;
		SBUF=0xF2;
		while(TI==0);
		TI=0;
	}
	else if(SBUF==0XF2)
	{
		first++;
	}
	else if(SBUF==0Xaa)
	{
		//需要判断是接收的0XAA,还是发送的0xaa
		if(RI==1)//接收的0xaa
		{
			SBUF=0XAA;
			while(TI==0);
		}
		else if(TI==1)
		{
			REN=0;		
		}
	}
	else if(RI==1)
		{
			bufferc[i]=SBUF;
			i++;
	}
	if(RI==1&&TI==0)RI=0;
	if(TI==1&&RI==0)TI=0;
	EA=1;
}

void sleep(long int a)
{
	uchar i=0;
	for(i=0;i<a;i++)
	{
		;
	}
}

 文章来源地址https://www.toymoban.com/news/detail-643975.html

 

到了这里,关于AT89C51单片机实现单片机串口互动(中断方式,单片机--单片机,应答)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于AT89C51单片机的交通灯设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87779238?spm=1001.2014.3001.5503 源码获取 主要内容: 在日常生活中,交通灯是一项必不可少的公共设施,可 以维护道路的畅通和交通的秩序。如若交通灯发生故障,那 么后果可想而知。因此,交通灯

    2024年02月08日
    浏览(44)
  • 单片机AT89C51六位数码管秒表

    详细代码讨论加我QQ:1271370903   本设计的数字电子秒表系统采用AT89C51单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计计时器。将软、硬件有机地结合起来,使得系统能够实现LED显示,显示时间为0~9999.99秒,计时

    2024年02月03日
    浏览(49)
  • 基于AT89C51单片机的温度检测报警设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87777752?spm=1001.2014.3001.5503 源码获取 主要内容: 基于51单片机设计一个温度检测报警器,至少具有以下功能:温度的检测和超过设定值时的报警功能 基本要求: 1、功能齐全,要配有功能说明;

    2024年02月03日
    浏览(51)
  • 毕业设计 单片机推箱子游戏(AT89C51)

    一、电路设计 此电路由AT89C51最小系统、LCD12864显示模块、74LS08芯片和四个独立按键组成。 LCD12864显示模块 带中文字库的128X64 是一种具有4 位/8 位并行、2 线或3 线串行多种接口方式,内部含有国标一级、二级简体 中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置

    2024年02月21日
    浏览(53)
  • 基于AT89C51单片机的电子秒表设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87775018添加链接描述 源码获取 主要内容: 设计一个电子秒表,至少具有以下功能:开始/暂停、记录、复位等。设计方案主要分为实验的系统分析,具体的设计方案,以及最终的测试,最终完成实

    2024年02月16日
    浏览(45)
  • 基于AT89C51单片机的电子时钟设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87779867?spm=1001.2014.3001.5503 源码获取 主要内容: 使用DS1302芯片作为计时设备,用6个7段LED数码管或者LCD162作为显示设备,实现时钟功能; 基本要求: (1)可以分别设定小时、分钟和秒,复位后时

    2024年02月06日
    浏览(42)
  • 基于AT89C51单片机的电子万年历系统

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87708258 源码获取 主要内容: 电子万年历系统以实时时钟芯片DS1302和AT89C52单片机为主要研究对象,着重进行51单片机控制系统的设计研究和如何读取DS1302内部时钟信息的研究。以及运用18B20进行实

    2024年02月09日
    浏览(43)
  • 基于AT89C51单片机的倒数计时器设计

    1.设计任务 利用AT89C51单片机为核心控制元件,设计一个简易的数字电压表,设计的系统实用性强、操作简单,实现了智能化、数字化。 本设计采用单片机为主控芯片,结合 周边 电路组成 LED 彩灯的 闪烁 控制系统器,用来控制 红色 的LED 闪烁 发光,实现 LED灯在倒计时结束后

    2024年02月03日
    浏览(52)
  • 单片机设计_8路抢答器(AT89C51)

    想要更多项目私wo!!!         此电路由AT89C51最小系统、四位数码管、蜂鸣器电路和按键模块组成。 运行原理:         该抢答器电路可同时进行八路优先抢答。按键按下后,蜂鸣器发声,同时数码管 显示优先抢答者的号码,抢答成功后,再按按键,显示不会改变,除非

    2024年02月11日
    浏览(41)
  • 基于AT89C51单片机的简易计算机设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87715642?spm=1001.2014.3001.5503 源码获取 主要内容: 本设计是以单片机AT89C51为核心的简易计算器设计,要通过芯片AT89C51实现计算器程序运行来完成加、减、乘和除的简单计算功能。 基本要求: 1、采

    2024年02月08日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包