智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2095|回复: 3
打印 上一主题 下一主题

求高手

[复制链接]

6

主题

39

帖子

0

精华

高级会员

Rank: 4

积分
805
QQ
威望
525
贡献
168
兑换币
9
注册时间
2011-9-21
在线时间
56 小时
跳转到指定楼层
1#
发表于 2012-2-5 16:28:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*---------------------------------------------------------*/
/************************************************************
刚开始学,各位见笑了       帮忙找找问题     问题还似乎挺多的

主要想实现通过“按键控制流水灯的流速”   
现在流水灯程序是没问题的
关键加了 按键中断的程序后流水灯就不流了   似乎没进for循环
按键中断没找到相关资料  相关寄存器也不是太了解  
学长帮忙看看程序  问题出在哪?  
有什么好资料麻烦发到   邮箱1047861637@qq.com
万分感谢
万分感谢
万分感谢

************************************************************/
/*---------------------------------------------------------*/
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#define LED PORTB                //B口
#define LED_dir DDRB  
#define UP PTIH_PTIH0             //按键  H口   上
#define DOWN PTIH_PTIH1                       //下
#define UP_dir DDRH_DDRH0
#define DOWN_dir DDRH_DDRH1
#define  BUS_CLOCK     32000000    //总线频率
#define  OSC_CLOCK     16000000    //晶振频率
unsigned char data=0x01;          //定义 流水灯 初始化

unsigned int time=20;              //时间
/*************************************************************/
/*                      初始化锁相环                         */
/*************************************************************/
void INIT_PLL(void)
{
    CLKSEL &= 0x7f;       //set OSCCLK as sysclk
    PLLCTL &= 0x8F;       //Disable PLL circuit
    CRGINT &= 0xDF;
   
    #if(BUS_CLOCK == 40000000)
      SYNR = 0x44;
    #elif(BUS_CLOCK == 32000000)
      SYNR = 0x43;     
    #elif(BUS_CLOCK == 24000000)
      SYNR = 0x42;
    #endif
    REFDV = 0x81;         //PLLCLK=2×OSCCLK×(SYNR+1)/(REFDV+1)=64MHz ,fbus=32M
    PLLCTL =PLLCTL|0x70;  //Enable PLL circuit
    asm NOP;
    asm NOP;
    while(!(CRGFLG&0x08)); //PLLCLK is Locked already
    CLKSEL |= 0x80;        //set PLLCLK as sysclk
}

/*************************************************************/
/*                        延时函数                           */
/*************************************************************/
void delay(unsigned int t)
{
  unsigned int i,j;
  for(j=0;j<t;j++)
  for(i=0;i<10000;i++)
  ;
}
/*************************************************************/
/*                       初始化按键                          */
/*************************************************************/
void init_key(void)
{
     UP_dir=0;     //设置为输入
     DOWN_dir=0;
     PPSH = 0x00;        //极性选择寄存器,选择下降沿;
     PIFH = 0x03;     //对PIFH的每一位写1来清除标志位;
     PIEH = 0x03;        //中断使能寄存器;
}
/*************************************************************/
/*                    按键中断函数                           */
/*************************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void PTH_inter(void)
{
   if(PIFH != 0)     //判断中断标志
   {
      PIFH = 0xff;     //清除中断标志
      if(UP == 0)         //按键UP按下
      {
        delay(1);
        if(UP == 0)
        {
            if(time<100)
                time+=5;   //流速加快
            while(UP == 0);
        }
      }
      if(DOWN == 0)
      {
        delay(1);
        if(DOWN == 0)
        {
         
            if(time> 0)
                time-=5 ;   //流速减慢
            while(DOWN == 0);
        }
      }
      
   }
}
#pragma CODE_SEG DEFAULT
/*************************************************************/
/*                          主函数                           */
/*************************************************************/
void main(void) {
DisableInterrupts;
init_key();
INIT_PLL();

  LED_dir=0xff;       //设置为输出
  LED=~data;          //点亮LED1
  
EnableInterrupts;

  for(;;)
  {
      delay(time);          //延时
      data=data<<1;         //左移一位
      if(data==0)
          data=0x01;        //for循环的流水灯正常  没问题
      LED = ~data;
  }
}

4

主题

117

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2100
威望
1066
贡献
440
兑换币
107
注册时间
2011-11-28
在线时间
297 小时
2#
发表于 2012-2-6 13:41:42 | 只看该作者
中断函数怎么没有中断号??
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
威望
124
贡献
56
兑换币
64
注册时间
2013-5-27
在线时间
21 小时
3#
发表于 2013-11-18 22:12:44 | 只看该作者
不懂
回复 支持 反对

使用道具 举报

15

主题

210

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3561
威望
2456
贡献
843
兑换币
679
注册时间
2013-10-8
在线时间
131 小时
4#
发表于 2013-11-20 12:49:17 | 只看该作者
中断写对了吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 12:51 , Processed in 0.045888 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表