想用PIC单片机的RB 口电平变化中断写一个4*4矩阵键盘,烧片后运行不了.又不知道怎么用SIM调试中断,请大侠帮忙.<br /><br /><br /><br /><br /><br /><br /><br /><br />extern uchar key; //外部的全局变量<br /><br /> static uchar key_i;<br /> static uint key_a=2000;<br /><br />void port_init()<br />{<br /> ADCON1=0X07; // 初始化I/O,使其工作在数字I/O状态<br /> TRISA = 0xFF; //ff; 0 out; 1 in<br /><br />//初始化RB口为电平变化中断<br /> TRISB = 0xF0; //设置为高4位输出..<br /> RBPU=0; //使用RB口弱上拉<br /> PORTB=0; //PORTB 低4位输出0<br /> INTCON=0; // 清除INTCON 所有中断禁止;<br /> RBIE=0 ; //允许RB口电平变化中断;<br /> <br /><br /><br /> TRISC = 0x3E; //fe "0011 1110"<br /> TRISD = 0x00; <br /> TRISE = 0x01; //df; "0000 0001" busy(输入) req(输出)<br /> } <br /><br />void interrupt INTS(void)<br />{<br /> <br /> <br /> if(RBIE && RBIF)<br /><br /> {<br /> RBIF=0; //清除RB口中断标志;<br /> key=PORTB; //读一次RB口清除中断条件;<br /> if(key!=0xf0)<br /> { <br /> while(key_a--); //有键按下消抖后再判断;<br /> if(key!=0xf0)<br /> { <br /> PORTB=0x0e; <br /> NOP();<br /> NOP();<br /> for(key_i=0;key_i<4;key_i++)<br /> {<br /> if( (PORTB^0xff)!=0)<br /> {key=PORTB;<br /> break;<br /> }<br /> else <br /> {CARRY=1;<br /> PORTB=PORTB<<1;<br /> }<br /> <br /> }<br /> <br /> }<br /> }<br /> PORTB=0; //清除PORTB口为下次检测做准备<br /> PORTB=PORTB; //再读读一次RB口清除中断条件;<br /> }<br /><br />}<br /> |
|