為什么我的這個只能發送,但是接受不到呢,有誰能幫我解答一下嗎?
#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);
}
}
|