打印

自学PIC18,帮帮忙撒

[复制链接]
2320|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
不亦心|  楼主 | 2009-10-26 18:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 不亦心 于 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--);
}

沙发
不亦心|  楼主 | 2009-10-27 12:11 | 只看该作者
帮忙看一下嘛

使用特权

评论回复
板凳
不亦心|  楼主 | 2009-10-27 16:11 | 只看该作者
帮帮忙撒

使用特权

评论回复
地板
chen3bing| | 2009-10-28 18:35 | 只看该作者
ADCON1=0X0F;

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
不亦心 + 1 非常感谢,问题已解决。
5
不亦心|  楼主 | 2009-10-28 21:26 | 只看该作者
非常感谢!
初学PIC,数据手册还没看完,根本不知道这个寄存器的作用,让你见笑了。

再次谢谢啊。

7# chen3bing

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:电源方案,可批量订做供货。 微信:红红橙黄棕红紫白黑。TEL:棕绿灰灰白紫紫绿棕黄黑

2993

主题

10032

帖子

212

粉丝