为什么我的这个只能发送,但是接受不到呢,有谁能帮我解答一下吗?
#include <pic18.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define TX PORTCbits.RC6
#define RX PORTCbits.RC7
#define LED PORTAbits.RA1
//==========================================================================
// 1、通用基本函数体
// (包含程序数:4个)
//==========================================================================
/****************************************************************************
* 功 能:延迟函数1us
* 名 称:Delay_us(uchar n)
* 说 明:经过示波器检测,11.0592MHz下粗略精确到1us,实际略大于1us。
****************************************************************************/
void Delay_us(uchar n)
{
uint j,k;
for(j=0;j<n;j++)
for(k=1;k>0;k--) asm("NOP");;
}
/****************************************************************************
* 功 能:延迟函数1ms
* 名 称:Delay_ms(uchar n)
* 说 明:经过示波器检测,11.0592MHz下精确1ms。
****************************************************************************/
void Delay_ms(uint n)
{
uint j,k;
for(j=0;j<n;j++)
for(k=730;k>0;k--) asm("NOP");
}
/****************************************************************************
* 功 能:10进制数据转换为BCD码
* 名 称:Num_BCD(uchar data)
* 说 明:用在时钟DS3231处。
****************************************************************************/
uchar Num_BCD(uchar data)
{
uchar i,j,k;
i=data/10;
j=data%10;
k=j+(i<<4);
return k;
}
/****************************************************************************
* 功 能:BCD码转换为10进制数据
* 名 称:BCD_Num(uchar data)
* 说 明:用在时钟DS3231处。
****************************************************************************/
uchar BCD_Num(uchar data)
{
uchar i;
i=data&0x0F;
data=data>>4;
data&=0x0F;
data*=10;
i+=data;
return i;
}
/****************************************************************************
* 功 能:单片机初始化设置。
****************************************************************************/
void Init()
{
/***************IO口设置*********************/
ADCON1=0x0F; //禁止所有AD转换口
CMCON=0x07;
CVRCON=0x00;
TRISA=0x00;
TRISB=0x07;
TRISC=0xC0; //PIC18F4520的TX/RX必须置1
TRISD=0x00;
TRISE=0x00;
PORTA=0x08;
PORTB=0x00;
PORTC=0x0E;
PORTD=0x03;
PORTE=0x00;
/*****************中断设置******************/
INTCON=0xE0; //全局中断开,TMR0中断开
INT0IE=1;
INT1IE=1;
INT2IE=1;
INTEDG0=0;
INTEDG1=0;
INTEDG2=0;
RCIE=1; //使能接收RC中断
/***************定时器0设置****************/
T0CON=0x05; //16位定时器,256分频//
T1CON=0xb0; //16位读写,8分频
/****************UART设置******************/
TXSTA=0x04; //TX发送寄存器
RCSTA=0x90; //RC接收寄存器
BAUDCON=0x08; //16位波特率控制器默认值
SPBRGH=0x00;
SPBRG=0x47; //波特率38400
Delay_ms(100); //延迟100ms等待时钟稳定
}
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
/****************************************************************************
* 名 称:main()
* 功 能:主函数
* 入口参数:无
* 出口参数:无
* 说 明:无
****************************************************************************/
/****************************************************************************
* 功 能:主函数。
****************************************************************************/
void main()
{
Init();
SPEN=1;
CREN = 1; //enable receiver circuitry of eusart
TXEN = 1; //enable transmitter circuitry of eusart
RCIE = 1; //enable usart receiver interrupt
GIE = 1; //enable all active interrupts
PEIE = 1;
LED=1;
Delay_ms(1000); //enable all active peripheral interrupts
while(1)
{
LED=0;
Delay_ms(1000);
}
}
void interrupt INT_ISR(void)
{
if(RCIF && RCIE)
{
TXREG = RCREG;
while(!TRMT);
}
}
|