ashaohlt 发表于 2013-5-3 14:10:05

mega16下载程序后只能运行一次,复位或者重新上电就不行了

本帖最后由 ashaohlt 于 2013-5-3 19:57 编辑

如题。
测试程序是使用SPI接口,下载时可以在CLK脚测到正常的时钟信号,程序写进去后,按键复位,CLK恒为低电平,多次复位依然。重新上电变成恒为高电平,复位后边低电平,在重新上电,又变为高电平,就一直不能正常工作了。


如果不用SPI,直接把PB口当普通IO输出方波可以正常。

测试代码如下(编译器winavr):

#include<avr/io.h>
#include<util/delay.h>
#define DD_MOSI   PB5
#define DD_SCK   PB7
#define DDR_SPI    DDRB
#define SS             PB4
int main (void)
{
    DDR_SPI = (1<<DD_MOSI) | (1<<DD_SCK) | (1<<SS);
    SPCR = (1<<SPE) | (1 << CPOL) | (1<<MSTR) | (1<<SPR0);

    SPDR = 0xAA;

    while(!(SPSR & (1<<SPIF)));

    while (1);
}

很短的代码,大家看看,知道怎么回事不?谢谢了~

jim20090418 发表于 2013-5-3 16:37:26

SPI 的硬件模組工作在master模式時,ss腳位(portx.4)需設置成輪出.

NemoGu 发表于 2013-5-3 17:15:22

你是用萬用表測量的CLK引腳的電平吧?

ashaohlt 发表于 2013-5-3 19:12:17

NemoGu 发表于 2013-5-3 17:15 static/image/common/back.gif
你是用萬用表測量的CLK引腳的電平吧?

用示波器测的

NemoGu 发表于 2013-5-3 19:19:14

ashaohlt 发表于 2013-5-3 19:12 static/image/common/back.gif
用示波器测的

從程序上看,MCU復位后SPI接口只向外發送了一字節的0xAA
比較懷疑是不是示波器沒有抓到波形

可以考慮使用Reset信號作為觸發信號,來觀察CLK信號,一般示波器都是雙通道

ashaohlt 发表于 2013-5-3 19:50:06

NemoGu 发表于 2013-5-3 19:19 static/image/common/back.gif
從程序上看,MCU復位后SPI接口只向外發送了一字節的0xAA
比較懷疑是不是示波器沒有抓到波形



示波器捕捉没问题的,因为正常的时候是可以看到的,还可以同步的得到数据线的信号。
页: [1]
查看完整版本: mega16下载程序后只能运行一次,复位或者重新上电就不行了