MEGAL8 485程序调不通,希望大家能帮帮忙,看一看~~~

wenqiang   2009-2-5 14:32 楼主
/*PD0为RXD,PD1为TXD,PD2为控制端~RE/DE;
整个程序就是测试下从外部发送到板子上的数据再返回
*/
#define F_CPU        8000000                // 定义晶振频率,硬件上采用7.3728M
#include
#include
#include

#define        SET_LED0        PORTD|=_BV(2);
#define CLR_LED0        PORTD&=~_BV(2);

volatile static uint8_t data;

int main(void)
{
        UCSRB = (1<         UBRRL = 51;                                                                                // 波特率9600

        DDRD = 0xfe;

        CLR_LED0;                                                 
        sei();
        while(1)
        {

        }
}
// 接收完成中断服务程序
SIGNAL(SIG_UART_RECV)
{
    data = UDR;
    _delay_ms(10);
    SET_LED0;
    _delay_ms(10);
   UCSRB |= _BV(UDRIE);                                        // 使能USART数据寄存器空中断
}


// USART数据寄存器空中断服务程序
SIGNAL(SIG_UART_DATA)
{
        UDR = data;
        _delay_ms(10);
        CLR_LED0;       
        _delay_ms(10);
        UCSRB &= ~(1< }

出现的问题是从串口调试助手上收到的全是00,做单个接受中断测试的时候感觉像是没有进入中断
数据传送是由485转232的转换工具 传到pc机的
希望大家帮忙看看程序哪里不对了

回复评论 (9)

这种问题很不好说了。
不过这极有可能是你的配置不正确,比如485相关寄存器、中断服务程序及中断控制器等。调试一下看寄存器的值和预期是否一致。

---------------------
UCSRB = (1 <
RXCIE、RXEN、TXEN这些是怎么定义的, 是某一位的序号吗?

另外,中断怎么还传参数进去?

随便说说,不妥当处请多多包涵。
---------------------
点赞  2009-2-5 14:55
M8的串口极其成熟,你应该先确认用RS232转换芯片(比如MAX232),以确保你这段程序的正确性。然后再考虑用485芯片。
还有,AVR的建议去www.ouravr.com讨论,现在改成www.ourdev.com了。唉,好久不玩avr了。
点赞  2009-2-5 22:48
如果你手头有逻辑分析仪的话,开发起来就容易了
点赞  2009-2-6 23:15
ding
点赞  2009-2-7 08:48
ding
点赞  2009-2-7 08:48
谢谢楼上的各位大侠,就是没谁说到点子上的
自己up下~~~
点赞  2009-2-10 21:26
有示波器没有啊?
直接看你出来的数据对不对,一步一步看,应该能查出来哪里出了问题

另,能接受到全0的数据,应该说物理上是通的
是不是拨特率不一致导致的?
点赞  2009-2-11 12:42
引用: 引用 6 楼 napoleon_7th 的回复:
谢谢楼上的各位大侠,就是没谁说到点子上的
自己up下~~~


一个星期了还没确定?那估计不是什么紧急的任务了。

你的485转232的东西好吗?
你的M8出来的UART信号是好的吗?
你的PC上接收软件是好的吗?
点赞  2009-2-11 13:06
不知道楼主解决了没有,我跟你遇到同样的问题,接收数据正常,但是发送数据的时候,用usb转485的线,串口调试助手收到的数据全是0,换了几个串口的软件都是一样的结果。一直找不到原因,如果楼主解决了,能在发给帖说明一下是什么问题吗,谢谢。
点赞  2009-12-10 21:44
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复