找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2820|回复: 1
打印 上一主题 下一主题
收起左侧

pic18F4520串口通信 只能发送,但是接受不到

[复制链接]
跳转到指定楼层
楼主
ID:169653 发表于 2017-9-5 15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么我的这个只能发送,但是接受不到呢,有谁能帮我解答一下吗?
#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);
    }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:169653 发表于 2017-9-5 15:44 | 只看该作者
LED是为了测试程序是否进入中断,发现它进入了中断
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表