目的:测试一下输入电平变化模块
描述:RB0作为输入,来检测电平变化,RB3作为输出,向RB0提供变化的电平;
在中断中,通过RB1来点亮灯检测是否进入中断。当检测到1时,不亮,当检测到0时,亮。效果应该是灯不断闪烁。
但是如果改成:检测到1时,亮,当检测到0时,不亮,灯就不亮了。求高手指点????
#include "p30F4011.h"
//配置位
_FOSC(CSW_FSCM_OFF & XT_PLL8); //Run this project using an external crystal,routed via the PLL in 8x multiplier mode
_FWDT(WDT_OFF); //Turn off the Watch-Dog Timer.
_FBORPOR(MCLR_EN & PWRT_OFF); //Enable MCLR reset pin and turn off the power-up timers.
_FGS(CODE_PROT_OFF); //Disable Code Protection
int j=0;
int i=0;
#define k PORTBbits.RB3
void delay(int n);
void InitCN(void);
void __attribute__((interrupt, no_auto_psv)) _CNInterrupt(void);
void main()
{
PORTB=0;
TRISB=1;
InitCN();
while(1)
{
k=1;
for(i=0;i<100;i++)
delay(3);
k=0;
for(i=0;i<100;i++)
delay(3);
}
}
void delay(int n)
{
int a=0,b=0;
for(a=0;a<n;a++)
for(b=0;b<20000;b++);//1.25ms
}
/*N interrupt function test program*/
//RB0输入电平奇数次变化,则RB1输出1,RB0输入电平奇偶数次变化,则RB1输出0
void InitCN(void)
{
CNEN1=4; //CN0(RB0) enabled
CNPU1=4; //enable internal pullups(CN0(RB0))
ADPCFG=0x0001;
IFS0bits.CNIF=0; //clear CNIF
IEC0bits.CNIE=1; //enable CN interrupt
IPC3=0x7000;//设置为最高优先级中断
}
void __attribute__((interrupt, no_auto_psv)) _CNInterrupt(void)
{
IFS0bits.CNIF=0; //clear CNIF
int a=0;
a=PORTB&1;
if(a==0)PORTBbits.RB1=1;
if(a==1)PORTBbits.RB1=0;
}
/*******************************************************/
目的:测试一下输入电平变化模块
描述:RB0作为输入,来检测电平变化,RB3作为输出,向RB0提供变化的电平;
在中断中,通过RB1来点亮灯检测是否进入中断。当检测到1时,不亮,当检测到0时,亮。效果应该是灯不断闪烁。
但是如果改成:检测到1时,亮,当检测到0时,不亮,灯就不亮了。求高手指点???? |