自己弄的新手程序,主要问题处,我加了“注意”两个字的,所以对高手应该很好看清楚哦。谢谢哈,希望解答啊。
#include <REGX52.H>
#include"MAX232_H.H"
#include"MacroAndConst.h"
void main()
{
InitMax232();
SBUF=0x55;while(!TI)TI=0; //注意:此处本来应该由PC机发出,我调试的时候,先程序模拟的
SBUF=0xAA;while(!TI)TI=0;
SBUF=0x01;while(!TI)TI=0;
while(1)
{ RI=1;
if(Txdflag)
{
Txdflag=0;
Serial_Txd(Txdnum);
}
}
}
/***********************************************************************************
***********************************************************************************/
#ifndef __MAX232_H__
#define __MAX232_H__
/*---------------------------------------------------------------------------------*
调用的头文件
*---------------------------------------------------------------------------------*/
#include <REGX52.H>
#include"MacroAndConst.h"
/*---------------------------------------------------------------------------------*
可调用变量
*---------------------------------------------------------------------------------*/
extern bit Txdflag;
extern uchar Txdnum[15];
/*---------------------------------------------------------------------------------*
可调用函数
*---------------------------------------------------------------------------------*/
extern void InitMax232(void);
extern void Serial_Txd(uchar *p);
#endif
/***********************************************************************************
***********************************************************************************/
#include"MAX232_H.H"
bit Txdflag=0;
uchar Txdnum[15]={0,1,2,3,4,5,6,7,8,9,0xa0,0xa1,0xa2,0xa3,0xa4};
/*-------------片内RAM初始化-----------------------*/
void InitMax232(void)
{
TMOD=0X21;
TH1=0XFD;TL1=0XFD;
SCON=0X50;
PCON=0X00;
TR1=1;ES=1;
TH0=0XDC;TL0=0X00;
ET0=1;
EA=1;
}
/*-----------------------------------------*/
void Serial_Txd(uchar *p)
{
uchar i;
for(i=0;i<15;i++)
{
SBUF=*p++;
while(!TI);TI=0;
}
}
/*------------T0中断块---------------------*/
void T0interrupt() interrupt 1
{
static uchar timercount=200;
TH0=0XDC;
TL0=0X00;
if(--timercount==0)
{
timercount=200;
Txdflag=1;
}
}
/*-----------------串口中断块------------------*/
void Serial_Int() interrupt 4
{
uchar temp;
ES=0;
if(RI) // 注意:为什么一直进不了这个if()里面??我直接将RI=1。或者把RI换成1,都进不去
{
temp=SBUF;RI=0;
if(temp==0x55)
{
while(!RI);
temp=SBUF;RI=0;
if(temp==0xAA)
{
while(!RI);
temp=SBUF;RI=0;
if(temp==0x01)
{
P1=~temp;
TR0=1;
}
}
else ES=1;
}
else ES=1;
}
ES=1;
}
另外,想找个网络上的师傅,不知道那位DX看得起在下的 |