atmega8515简单按键程序为什么要改成这样才有响应?

[复制链接]
2476|0
 楼主| mm7989680 发表于 2007-6-10 21:05 | 显示全部楼层 |阅读模式
#include&nbsp;&ltiom8515v.h&gt<br />#include&nbsp;&ltmacros.h&gt<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br />#define&nbsp;uint&nbsp;unsigned&nbsp;int<br />#define&nbsp;ulong&nbsp;unsigned&nbsp;long<br /><br />void&nbsp;port_init(void)<br />{<br />&nbsp;PORTA&nbsp;=&nbsp;0x00;<br />&nbsp;DDRA&nbsp;&nbsp;=&nbsp;0xFF;<br />&nbsp;PORTB&nbsp;=&nbsp;0x04;<br />&nbsp;DDRB&nbsp;&nbsp;=&nbsp;0x00;<br />&nbsp;PORTC&nbsp;=&nbsp;0xC8;<br />&nbsp;DDRC&nbsp;&nbsp;=&nbsp;0x18;<br />&nbsp;PORTD&nbsp;=&nbsp;0x00;<br />&nbsp;DDRD&nbsp;&nbsp;=&nbsp;0x00;&nbsp;<br />&nbsp;PORTE&nbsp;=&nbsp;0x00;<br />&nbsp;DDRE&nbsp;&nbsp;=&nbsp;0x00;&nbsp;<br />&nbsp;OSCCAL=&nbsp;0XA7;<br />&nbsp;SFIOR&=~BIT(2);&nbsp;<br />&nbsp;//SFIOR&=~BIT(PUD);&nbsp;<br />}<br /><br />void&nbsp;mDelay(uint&nbsp;Delay)<br />{&nbsp;uint&nbsp;K;<br />for(;Delay&gt0;Delay--)<br />{&nbsp;for(K=0;K&lt900;K++)<br />{;}<br />}<br />}<br /><br />//call&nbsp;this&nbsp;routine&nbsp;to&nbsp;initialize&nbsp;all&nbsp;<br /><br />peripherals<br />void&nbsp;init_devices(void)<br />{<br />&nbsp;//stop&nbsp;errant&nbsp;interrupts&nbsp;until&nbsp;set&nbsp;up<br />&nbsp;CLI();&nbsp;//disable&nbsp;all&nbsp;interrupts<br />&nbsp;port_init();<br /><br />&nbsp;MCUCR&nbsp;=&nbsp;0x00;<br />&nbsp;EMCUCR&nbsp;=&nbsp;0x00;<br />&nbsp;GICR&nbsp;=&nbsp;0x00;<br />&nbsp;TIMSK&nbsp;=&nbsp;0x00;<br />&nbsp;SEI();&nbsp;//re-enable&nbsp;interrupts<br />&nbsp;//all&nbsp;peripherals&nbsp;are&nbsp;now&nbsp;initialized<br />}<br /><br />//<br />void&nbsp;main(void)<br />{<br />&nbsp;uint&nbsp;i=0;<br />&nbsp;init_devices();<br />&nbsp;//insert&nbsp;your&nbsp;functional&nbsp;code&nbsp;here...<br />&nbsp;CLI();<br />&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((PINB&0x04)==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{mDelay(10);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//消除按键抖动<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((PINB&0x40)==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTA=i++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i&gt0xff)&nbsp;i=0;&nbsp;&nbsp;<br /><br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;<br />}<br /><br />目的是PB2的按键使PORTA的数据递增,问题是按<br /><br />键下去没反映,while(1)中换成<br />while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((PINB&0x04)==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{//mDelay(10);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//消除按键抖<br /><br />动<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//if&nbsp;((PINB&0x40)==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTA=i++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i&gt0xff)&nbsp;i=0;&nbsp;&nbsp;<br /><br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />就可以响应按键,难道中间的消除按键抖动不能<br /><br />用?<br />刚学习AVR还请做过的人指教,谢谢!<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

113

主题

374

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部