mega169IC口输入检测问题
我在使用mega169时,在设置个端口输入情况下并且设置了上拉,单端口PINxn并不能检测到按键的变化(按键一头接端口线,另一头接地)PINxn各脚位在悬空状态下测得电压为1.67V,单片机5V供电,我不清楚为何各脚位在悬空状态下只有1.67V,难道mega169还要配置外部上拉电阻,各口在输出状态下工作都正常,且PINxn在此状态下也能检测到按键的高低电平变化,我不明白为何在输入状态下却不能,而我在使用MEGA8515L,MEGA48V都没遇到此情况,最初怀疑mega169损坏,更换单片机及线路都一样,是不是mega169在输入设置与其他AVR单片机不一样? 检查一下你使用的I/O口是否是JTAG口? 除了F口之外,其它口也一样,而且把JTAG的熔丝位去掉使能了.//ICC-AVR application builder : 2007-9-30 9:40:08
// Target : M169
// Crystal: 3.2768Mhz
#include <iom169v.h>
#include <macros.h>
void port_init(void)
{
PORTA = 0x00;
DDRA= 0xFF; // out
PORTB = 0xFF;
DDRB= 0x00;
PORTC = 0xFF;
DDRC= 0x00;
PORTD = 0xFF;
DDRD= 0x00;
PORTE = 0xFF;
DDRE= 0x00;
PORTF = 0xFF;
DDRF= 0x00;
PORTG = 0x1F;
DDRG= 0x00;
}
//=============================
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
MCUCR&=~(1<<PUD);
SEI(); //re-enable interrupts
}
void main(void)
{
init_devices();
while(1)
{
PORTA=PINE; //我依次用过PINB,PINC,PIND,PINF,PING,结果都一样,输入脚位的
} //高低电平变化改变不了A口的输出结果
} mega169我没用过,但对I/O的使用应该同其它的相同。
只能建议:
1。将语句MCUCR&=~(1<<PUD)去掉试试;
2。检查你的M169的地连接正确吗?
3。如果是上面的测试程序,你下载后,能确认M169在运行吗?(如果AVR一直处在RESET状态,引脚电平就不是5V) 最初我并没加MCUCR&=~(1<<PUD);MEGA169复位后输入口默认应是上拉的,因不来事才加这句。此程序下载后应该在运行,将E口改输出状态,此时PORTA=PINE起作用,A口能够反应E口的变化,输出口位接近5V,只是输入端口当时只是用来检测按键的开合,现在却将端口改输出状态才能反应按键的变化,不知复位异常对输出是否有影响?复位电路如下图,此复位电路我在其它AVR都使用
http://cache.amobbs.com/bbs_upload782111/files_8/ourdev_177298.jpg 复位电路问题不大,C7可以不用,否则复位时间长了点。
现在只能考虑是否是其它问题,如编译器的问题,或你编译时是否指定了M169。
笨的办法是用汇编写一个简单的读I/O的程序,在AVR STUDIO中编译,跳开C编译器;或检查C编译后的ASM代码等。
页:
[1]