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

📄 mcpu.c

📁 单片机C51 源程序
💻 C
字号:
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>

#define S8251C_1 0x9001
#define S8251D_1 0x9000
#define S8251C_2 0xa001
#define S8251D_2 0xa000
#define S8251C_3 0xb001
#define S8251D_3 0xb000
#define S8251C_4 0xc001
#define S8251D_4 0xc000
#define COMM_CPU 0xd000
#define RECBUFADDR 0x0000

#define uchar unsigned char
#define uint unsigned int

uchar xdata *RecBufPtr = RECBUFADDR;
uchar err = 0;

sbit p33 = P3^3;
bit rx_flag = 0;

void InitMcpu(void);
void init8251(void);
void COMM8251TX(uint, uchar);
void delay(uchar);
void SendDataToScpu(uchar);
uchar ReadDataFromScpu(void);
void Compare(uchar, uchar);


void main(void)
{
    uchar tx_data, rx_data, temp;

    InitMcpu();

   	init8251();

    while(1)
    {
	/*	for(tx_data=0;tx_data<=0xff;tx_data++)
		{
			SendDataToScpu(tx_data);
			p33 = 1;
			_nop_();
			p33 = 0;
			_nop_();
			p33 = 1;          */
			while(!rx_flag);
			temp = ReadDataFromScpu();
                        rx_flag = 0;
                        SendDataToScpu(temp);
                        COMM8251TX(S8251D_1,temp);
			p33 = 1;
			_nop_();
			p33 = 0;
			_nop_();
			p33 = 1;   
                        
         /*   if(RecBufPtr<=0x7fff)
            {
            	*RecBufPtr = temp;
            	rx_data = temp;
                RecBufPtr++;
            }
            else
            {
                RecBufPtr = RECBUFADDR;
                *RecBufPtr = temp;
            	rx_data = temp;
                RecBufPtr++;
             }

		//	Compare(tx_data, rx_data);       */

     }
 }

void InitMcpu(void)
{
	p33 = 1;

    IE = 0;
	IT0 = 1;
	EX0 = 1;
	EA = 1;
}

void init8251(void)
{
	XBYTE[S8251C_1] = 0;
	XBYTE[S8251C_1] = 0;
	XBYTE[S8251C_1] = 0;
	XBYTE[S8251C_1] = 0x40;		//方式字:异步x16,8位,无校验,1个停止位
	delay(10);
	XBYTE[S8251C_1] = 0x4e;
    XBYTE[S8251C_1] = 0x37;		//控制字:TxEN=1,DTR=1,RxE=1,SBRK=0,ER=1,RTS=x,IR=EN=0;
    XBYTE[S8251C_2] = 0;
	XBYTE[S8251C_2] = 0;
	XBYTE[S8251C_2] = 0;
	XBYTE[S8251C_2] = 0x40;		//方式字:异步x16,8位,无校验,1个停止位
	delay(10);
	XBYTE[S8251C_2] = 0x4e;
    XBYTE[S8251C_2] = 0x37;		//控制字:TxEN=1,DTR=1,RxE=1,SBRK=0,ER=1,RTS=x,IR=EN=0;

}

void ExInt0(void) interrupt 0 using 2
{       uchar temp;
	EX0 = 0;
	rx_flag = 1;
      // temp = ReadDataFromScpu();
	EX0 = 1;

}

void SendDataToScpu(uchar tx_data)
{
	XBYTE[COMM_CPU] = tx_data;
}


uchar ReadDataFromScpu(void)
{
	uchar tmp;
	tmp = XBYTE[COMM_CPU];
	return(tmp);
}


void Compare(uchar tx_value, uchar rx_value)
{
	if(tx_value == rx_value)
		err = 0;
	else
		err++;
}


void COMM8251TX(uint tx_addr, uchar tx_value)
{
	while(!(XBYTE[tx_addr+1]&0x01));

	XBYTE[tx_addr] = tx_value;
   }

void delay(uchar time)
{
	uchar i, j;
	for(j=0;j<time;j++)
		for(i=0;i<0xff;i++)
			_nop_();
}

⌨️ 快捷键说明

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