本帖最后由 不亦心 于 2009-10-28 17:52 编辑
我想用INT0中断流水灯程序,让蜂鸣器响,用Proteus仿真一直无法进入中断服务程序。
蜂鸣器接在RC0口。
由于以前一直用汇编学51,没有接触过C,所以C基础很差,写的程序让大家见笑了,麻烦大家帮忙看看是不是那里出错了。
谢谢先。
#include<p18f4520.h>
void int0(void);
#pragma code int0duan = 0x08
void int0_rukou (void)
{
_asm goto int0 _endasm;
}
#pragma code
#pragma interrupt int0//中断服务程序
void int0(void)
{
int a = 200;//蜂鸣器程序
void delay500us();
TRISCbits.TRISC0 = 0;
while(a--)
{
PORTCbits.RC0 = 1;
delay500us();
PORTCbits.RC0 = 0;
delay500us();
}
INTCONbits.INT0IF = 0;//清零标志位
}
//流水灯程序
void lamp (void)
{
void delay(void);
TRISD=0x00; //设置RD端口为输出口
while(1)
{
PORTD=0x01;
while(PORTD!=0x00)
{
delay();
PORTD<<=1; //RD端口左移1位
}
}
}
void main()
{
INTCONbits.GIE=0;//关中断
INTCON2bits.INTEDG0 =0; //下降沿触发
RCONbits.IPEN = 1;
INTCONbits.INT0IF = 0;//清零中断标志位
INTCONbits.INT0IE = 1; //开中断
TRISBbits.TRISB0 = 1;//RB0,输入状态
INTCONbits.GIE = 1;//开总中断
lamp();//流水灯
}
//1s延时
void delay(void)
{
unsigned int i;
unsigned int j;
i=1000;
while(i--)
{
j=177;
while(j--);
}
}
//500us延时
void delay500us()
{
unsigned int n = 100;
while(n--);
}
|