⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dmcu.c

📁 两片51单片机通过三根IO口进行通讯的源程序
💻 C
字号:
#include "reg52.h"

sbit P10=P1^5;

sbit MST	=	P1^1;

sbit MCLK	=	P1^2;
sbit SCLK	=	P1^3;
sbit SDA	=	P1^4;

xdata unsigned char rsBufs[128];
bdata unsigned char sBUF;
sbit BUF0	=	sBUF^0;
sbit BUF7	=	sBUF^7;

unsigned char SndBits=0,RcvBits=0;
bit OE,SR,sTB,sRB;
bit sTI=0,sRI=0;

unsigned char SndCnt,SndPosi;
unsigned char RcvCnt;

sbit P37=P3^7;

void delay(unsigned char dly);

void DMCU_COM(void){
	if (SR){
		if (!SndBits){//发送前处理
			if (SndPosi<SndCnt){
				delay(0xFF);
				sBUF=rsBufs[SndPosi++];
				P0=sBUF;
				SndBits=1;
			}else{
				SR=0;
				MCLK=1;
				SCLK=1;
				SDA=1;
				RcvCnt=0;
				RcvBits=0;

				SndCnt=0;
				SndPosi=0;
			}					
		}//用于要发送的数据数量
		if (SndBits==1){
			if ((MCLK)&&(SCLK)){
				MCLK=0;
			}else if ((!MCLK)&&(!SCLK)){
				SndBits=2;
				MCLK=1;
			}
		}else if ((SndBits>=2)&&(SndBits<=9)){
			if ((SCLK)&&(MCLK)){
				SDA=BUF0;
				sBUF>>=1;
				MCLK=0;
			}else if ((!SCLK)&&(!MCLK)){
				SndBits++;
				MCLK=1;
			}
		}else{//发送完一个字节
			SndBits=0;
		}
	}else{
		if (!RcvBits){
			if ((!MCLK)&&(SCLK)){
				SCLK=0;
			}else if ((!SCLK)&&(MCLK)){
				SCLK=1;
				RcvBits=1;
			}
		}else if ((RcvBits>=1)&&(RcvBits<=8)){
			if ((!MCLK)&&(SCLK)){
				sBUF>>=1;
				BUF7=SDA;
				SCLK=0;
			}else if ((MCLK)&&(!SCLK)){
				RcvBits++;
				SCLK=1;
			}
		}else{//接收完初始化发送
			P2=sBUF;
			rsBufs[RcvCnt++]=sBUF;
			RcvBits=0;
		}
		if (RcvCnt>=8){	//接收后处理
			SR=1;
			SCLK=1;
			MCLK=1;
			SDA=1;
			SndBits=0;

			SndCnt=RcvCnt;
			SndPosi=0;
			RcvCnt=0;
		}				//用于接收完后进行后处理
	}
}

void delay(unsigned char dly){
	while(--dly);
}

void main(void){
	rsBufs[0]=0xF0;
	rsBufs[1]=0x03;
	rsBufs[2]=0x00;
	rsBufs[3]=0x00;
	rsBufs[4]=0x00;
	rsBufs[5]=0x10;
	rsBufs[6]=0x51;
	rsBufs[7]=0x27;

	SndCnt=8;
	SndPosi=0;

	while(1){
		if ((MST)&&(!SR))SR=1;//else SR=0;
		P37=SR;
		DMCU_COM();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -