arm7 力天电子lpc2148 PLL实验(二)之 PLL重新设定实验参考程序

此程序是我根据周立功课本里面的程序修改的,

程序设定KEY1连接外部中断0,设置外部中断唤醒掉电CPU. 在掉电前,LED1闪烁10次(注意闪烁频率),然后进入掉电模式。一旦被外部中断唤醒,第一次实验不进行PLL重设定,再次让LED1闪烁10次,观察LED1闪烁频率。第二次实验进行PLL重设定,恢复掉电前的PLL设定,再次观察LED1闪烁的频率。

从实验结果可以看出,如果不进行PLL重设定,唤醒后LED1闪烁频率会比掉电前慢许多;进行PLL重新设定后,唤醒后LED1闪烁频率和掉电前一样。

实验程序如下所示:

#include <NXP/iolpc2148.h>

typedef unsigned char uint32;

void Delayn(unsigned long n);
void HC595_Init(void);
void WriteByte(unsigned char data);
void Write595(void);

unsigned int HC595_DATA = 0;
#define         SCLK  0x01<<24
#define         MISO  0x01<<5
#define         MOSI  0x01<<6
#define         RCK   0x01<<7

//初始化595接口
void HC595_Init(void)
{
  IO0DIR |= MOSI|RCK; 
  IO1DIR |= SCLK;
  IO1CLR |= SCLK;
  IO0DIR |= RCK;
  
  HC595_DATA = 0xFFFFFFFF;  
  Write595();
}
//写字节
void WriteByte(unsigned char data)
{
  unsigned char i;
  //IO0CLR = RCK;
  for(i=0;i<8;i++)
  {
    if(data&0x01)      IO0SET=MOSI;
    else      IO0CLR=MOSI;
    IO1SET=SCLK;
    data>>=1;
    IO1CLR=SCLK;
  }
  //IO0SET = RCK;
}
//刷新595的数据
void Write595(void)
{
  IO0CLR = RCK;
  WriteByte(HC595_DATA&0xff);
  WriteByte((HC595_DATA&0xff00)>>8);
  WriteByte((HC595_DATA&0xff0000)>>16);
  WriteByte((HC595_DATA&0xff000000)>>24);
  IO0SET = RCK;
}
main()
{
  //初始化74HC595
  HC595_Init();
  
  uint32 i;
  PINSEL1=0x00000001;  //P0.16连接EINT0
  PINSEL2=PINSEL2&(~0x08);//P1[25:16]连接GPIO
  IO1DIR |= SCLK;     //P.18控制LED1,低电平点亮(设置LED1控制口为输出,其余I/O为输入)
  EXTWAKE=0x01;    //外部中断0唤醒芯片
  EXTINT=0x01;     //清除EINT0中断标志
//掉电前闪烁10次,注意闪烁频率
 for(i=0;i<10;i++)
 {
   //IO1SET=1<<18;   //LED1亮
   HC595_DATA &=~(1<<18);
   Write595(); 
   Delayn(2500000);
   //IO1CLR=1<<18;   //LED1灭
   HC595_DATA |=(1<<18);
   Write595();
   Delayn(2500000);
 }
  PCONP=0x00;    //关闭定时器,RTC和UART等功能部件
  PCON=0x03;     //系统进入掉电模式
  
  //摁KEY1键唤醒CPU
  //实验分两次进行,第一次不进行PLL重新设定,观察掉电前和唤醒后LED1的闪烁频率;
  //第二次加上PLL重设定,再次观察掉电前和唤醒后LED1闪烁频率
  
  /*重新设定PLL——开始*/
 /* PLLCON=1;  //使能PLL
  PLLCFG=0x23; //设置M为4,P为2,和掉电前一样
  PLLFEED=0xaa;  //发送PLL馈送序列
  PLLFEED=0x55;
  while((PLLSTAT&(1<<10))==0); //等待PLL锁定
  PLLCON=3;      //PLL使能和连接
  PLLFEED=0xaa;
  PLLFEED=0x55;
 */
  /*重新设定PLL--结束*/
  //唤醒后闪烁10次,注意闪烁频率
  for(i=0;i<10;i++)
  {
    //IO1SET=1<<18;
    HC595_DATA &=~(1<<18);
    Write595(); 
    Delayn(250000);
    //IO1CLR=1<<18;
    HC595_DATA |=(1<<18);
    Write595();
    Delayn(250000); 
  }
  while(1);
}
//延时周期数
void Delayn(unsigned long n)
{
  while(n--);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值