|
本帖最后由 biying 于 2014-5-19 09:45 编辑
在用马潮老师的avr学习板制作单键密码锁时,用M16实验通过的程序,移植到ATTINY85上后(只是改下端口,主要的程序没有动),输入按键端口居然表现出长按闪灯6次就认为是输入6位密码了,我闪为是不是ATTINY85用片内8M时钟,导致端口不稳定,于是在按键状态机函数扫描中增加了一条1毫秒的延时后,延时效果居然和M16g一样了,也就是说长按按键后闪灯的次数就是你想要输入的密码了。问题解决了,好开心!可是到底是什么原因导致这个故障呢?没有ATTINY85的仿真器,不好进一步找原因了,我想试试片内6.4M,或者更低时钟,还有片外晶振。希望知道原因的朋友能指点一下!
- unsigned char read_key_n(void)
- {
- static unsigned char key_state = 0, key_time = 0;
- unsigned char key_press, key_return = 0;
- duankouPORTD |=( 1<<key_LED_fu); //置位
- duankouPORTD &=~( 1<<key_LED_zheng); //清零
- duankouDDRD &=~( 1<<key_LED_fu);
- #asm("nop") //端口操作后插入空指令能正确读端口
- delay_ms(1); // 如果没有这条延时的话,长按按键,闪一次灯就表现出 key_return = 5;的现象,也就是说闪6次后等于输入了6个密码1。
- key_press = key_input; // 读按键I/O电平
- switch (key_state)
复制代码
补充一下:如果不加那条1毫秒的延时,把PB1口直接对电源负极,输入密码效果是正常的
这是上面问题的ATTINY85程序包
这是M16的程序包,调试通过的
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。
|