qs130 发表于 2012-12-1 21:35:02

一个简单的485,发送正常,但就是不产生接收中断,请指...

本帖最后由 qs130 于 2012-12-1 21:38 编辑





#include <iom16v.h>
#include <macros.h>
#pragma interrupt_handler uartrupt:12
unsigned char temp; //接收临时变量
unsigned char adr;//从机地址及标志

unsigned int m;
//======================
//名称:延时
//功能:ms延时
//======================
void delay(unsigned int ms)
{
    unsigned int i,j;
        for(i=0;i<ms;i++)
           {
           for(j=0;j<1141;j++);
       }
}

//======================
//名称:USARTinit()
//功能:串行通信初始化,设置引脚功能,波特率,通信方式
//波特率=fosc/16(ubrr+1)
//======================
#define F_CPU 8000000
void USART_Init( unsigned int baud )
{

          unsigned int tmp;
                             /* 设置波特率*/
          tmp= F_CPU/baud/16-1;
          UBRRH = (tmp>>8);
          UBRRL = tmp;
          /* 接收器与发送器使能*/
          UCSRB = (1<<RXEN)|(1<<TXEN);
          /* 设置帧格式: 8 个数据位, 2 个停止位*/
          UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ0)|(1<<UCSZ1);
}

//======================
//名称:接收中断
//功能:接收数据
//======================
void uartrupt(void)
{
   m=1;
temp=UDR; //读数
}
//======================
//名称:发送
//功能:发送数据
//======================
void SEND(unsigned char mydata)
{
DDRD|=0X04; //MAX485允许输出
PORTD|=0X04;
UCSRB|=0x01; //TXB8=0发地址
delay(100);
while(!UDRE);
UDR=mydata;
delay(5);
PORTD&=~0X04; //发送后立即转为接收等从机发来数据
delay(5);

}
//======================
//名称:主函数
//======================
void main(void)
{ unsigned char str;
m=0;

DDRD|=0X04;   //MAX485使能端允许输出
USART_Init(9600);
while(1)
{
SEND(0X33);
delay(100);//读数据
SEND(temp);
delay(100);

}

}



检测n,一直都是0,一直不产生接收中断。串口的temp显示也一直是0.

dfood 发表于 2012-12-1 21:40:03

如果程序没问题请查下硬件电路,有没有开使能端,发接收引角等!一般485很好调通的..

qs130 发表于 2012-12-3 16:58:15

硬件检查过了 没问题

tkggsai2008 发表于 2012-12-3 19:44:52

程序的问题,你查下485的芯片资料就知道出什么问题了
页: [1]
查看完整版本: 一个简单的485,发送正常,但就是不产生接收中断,请指...