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

📄 模拟中断shou.c

📁 I/O口模拟串口(利用中断
💻 C
字号:
#include<STC12C5410AD.H>
sbit BT_REC=P3^4;
#define F_TM F0
unsigned char msm[23];
unsigned char rspoint,x,z;
sbit ACC0=   ACC^0;
sbit ACC1=   ACC^1;
sbit ACC2=   ACC^2;
sbit ACC3=   ACC^3;
sbit ACC4=   ACC^4;
sbit ACC5=   ACC^5;
sbit ACC6=   ACC^6;
sbit ACC7=   ACC^7;
void sendasc(unsigned char asc);//发送一个ASCII码
void sendtogsm(unsigned char *p,int L);//发送字符串

//--------------发送字符串---------------------
void sendtogsm(unsigned char *p,int L)//1、字符串数组   2、字符串长度
{
	while (L--)
		{
			sendasc(*p++);
		}
}

/**********************延时*****************/
void delay(int x)
{
	int i;
	for (i=0;i<=x;i++);
} 

/**********检测起始位**********************/
bit StartBitOn()
{
return  (BT_REC==0);

}
/***************外部中断*******************/
void time() interrupt 0
{
	F_TM=1;

}

/*************外部中断初始化**************/
void init()
{
   IT0=1;
   EA=1;
   EX0=1;
   ACC=0XFF;
}

/***********串口通讯设置**************/
void cksz()
{	

	TMOD=0x20; //波特率设置
	TH1=0xfd;
	TL1=0xfd;
	TR1=1;

	REN=1;//工作方式设置
	SM0=0;
	SM1=1;
	EA=1; //开启中断
	ES=1;
}

//-----------发送一个ASCII码----------------
void sendasc(unsigned char asc)
{
	bit es;
	es=ES;
	ES=0;
	TI=0;
	SBUF=asc;
	while(!TI);
	TI=0;
	ES=es;
}




/********************接收函数***************/
unsigned char PGetChar()
{ 
		F_TM=0;
		while(!F_TM); //等过起始位
		ACC0=BT_REC;
		
		F_TM=0;
		while(!F_TM);
		ACC1=BT_REC;
		
		F_TM=0;
		while(!F_TM);
		ACC2=BT_REC;
		
		F_TM=0;
		while(!F_TM);
		ACC3=BT_REC;
		
		F_TM=0;
		while(!F_TM);
		ACC4=BT_REC;
		
		F_TM=0;
		while(!F_TM);
		ACC5=BT_REC;
		
		F_TM=0;
		while(!F_TM);
		ACC6=BT_REC;
		
		F_TM=0;
		while(!F_TM);
		ACC7=BT_REC;
		
		F_TM=0;
		while(!F_TM)
		{
			if(BT_REC)
			{
				break;
			}
        }
        return ACC;
}



/**************主函数****************/
void main()

{  
   //PCON=0x80;//设置波特率为19200  若想变成9600删除此行即可 
   cksz();
   rspoint=0;
   init();
   z=0;
   while(1)
   {

    

    if(StartBitOn())

	{
	   
        x=PGetChar();
		if(x=='~')
		{
			z=1;
		}
		if(x=='!')
		{
			rspoint=0;
			z=0;
			sendtogsm(msm,23);
		}
		if(z==1)
		{
			msm[rspoint]=x;
			
			if(rspoint==3)
				{
					if(x=='A') P0=0x00;
					if(x=='B') P0=0XFF;
				} 
			rspoint++;
		} 
			
			
	
    }
	
	}
		
}
void time4() interrupt 4
{
	    RI=0;	
		
}
		 


⌨️ 快捷键说明

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