#include<pic18.h>
#define TXD RC6 //宏定义:发送数据的引脚
#define RXD RC7 //宏定义:接收数据的引脚
//#define TIMER_ENABLE() {TMR0L=0XAE;TMR0IE=1;TMO_FLAG=0;} //使能T/C
//#define TIMER_DISABLE() {TMR0IE=0;TMO_FLAG=0;} //禁止T/C
//#define wait_timer() {while(!TMO_FLAG);TMO_FLAG=0;}//等待T/C超时
//unsigned char TMO_FLAG; //T/C超时溢出标志位
/*****************************
*函数名称:delay
*输 入:无
*输 出:无
*功 能:延时1ms
******************************/
void delay()
{
unsigned char j,k;
for(k=0;k<250;k++)
for(j=0;j<250;j++)
{;}
}
/*****************************
*函数名称:init
*输 入:无
*输 出:无
*功 能:程序初始化
******************************/
void init()
{
TRISC6=0;
TRISC7=1;
T0CON=0Xc0;//定时器0使能,外部晶振,8bit数据,分频给定时器0,分频比是2
}
/*****************************
*函数名称:send
*输 入:要发送的字节
*输 出:无
*功 能:串口发送单个字节
******************************/
void send(unsigned char a)
{
unsigned char i;
TXD=0;
TMR0IE=1;
TMR0L=0XA9;
TMR0IF=0;
while(!TMR0IF);
TMR0IF=0;
for(i=0;i<8;i++)
{
TXD=(a&0x01);
TMR0L=0XA9;
TMR0IF=0;
while(!TMR0IF);
a=a>>1;
}
TXD=1;
TMR0L=0XA9;
TMR0IF=0;
while(!TMR0IF);
TMR0IE=0;
}
/*****************************
*函数名称:receive
*输 入:无
*输 出:单个字节
*功 能:串口接收单个字节
******************************/
unsigned char receive()
{
unsigned char j;
unsigned char newrec_data=0;
while(!RXD);
{
TMR0IE=1;
TMR0L=0X54;
TMR0IF=0;
while(!TMR0IF);
while(!RXD);
{
TMR0L=0Xa9;
TMR0IF=0;
while(!TMR0IF);
for(j=0;j<8;j++)
{ newrec_data=newrec_data>>1;
if(RXD)
{
newrec_data|=0x80;
TMR0L=0XA9;
TMR0IF=0;
while(!TMR0IF);
continue;
}
else
{
newrec_data&=0x7f;
TMR0L=0XA9;
TMR0IF=0;
while(!TMR0IF);
continue;
}
}
while (RXD)
{
//break;
TMR0L=0XA9;
TMR0IF=0;
while(!TMR0IF);
}
}
}
TMR0IE=0;
return newrec_data;
}
/*****************************
*函数名称:StartBitCome
*输 入:无
*输 出:0/1
*功 能:是否有起始位到来
unsigned char StartBitCome(void)
{
return (RXD==0);
}
******************************/
/*****************************
*函数名称:main
*输 入:无
*输 出:无0/1
*功 能:函数主体
******************************/
void main()
{
unsigned char gch;
init();
while(1)
{ send(0x00);
//delay();
//if(StartBitCome())
//{
gch=receive();
send(gch);
//delay();
//}
}
}
发送程序没有问题,就是接收不到数据,起始位好像一直是高电平,不知道如何置低 |