Chinaunix首页 | 论坛 | 博客
  • 博客访问: 551554
  • 博文数量: 156
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1183
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-22 11:42
文章分类

全部博文(156)

文章存档

2015年(67)

2014年(89)

分类: C/C++

2015-03-31 17:09:59

一、寄存器

1IO  3

2PxSEL 功能选择

0普通IO(输入输出,外部中断)

1 外设(串口和定时器)

3PxDIR方向选择

  0输入,1输出

4Px数据寄存器,可以位寻址

5P1INP         电路上拉或者下拉   0开启  1三态

6IENI           Px口使能

7PxIEN          Px中断掩码(掩码就是屏蔽,相当于一个开关)

8PICTL          中断方式选择     0上升沿  1下降沿

9PxIFG          中断标志位,需要手动清零

二、系统时钟:

1CLK0NCMD时钟控制寄存器,用于选择系统工作的频率,复位16M

2OSC选择系统时钟源 032M外部, 116M内部

3CLKSPD 始终速度,是真正的系统工作频率,不能高于OSC

三、中断

1、写法:

#pragma vector = P0INT_VECTOR   

//格式:#pragma vector = 中断向量,紧接着是中断处理程序

  __interrupt void P0_ISR(void)

{

     清除中断标志,否则系统会一直停留在中断中

}

2、向量

/* ------------------------------------------------------------------------------------------------

 *                                        Interrupt Vectors

 * ------------------------------------------------------------------------------------------------

 */

  RFERR_VECTOR   /*  RFID模块串口中断  */

  ADC_VECTOR    /*   AD转换          */

  URX0_VECTOR  /*    串口0接收中断  */

  URX1_VECTOR  /*   串口1接收中断  */

  ENC_VECTOR  /* AES Encryption/Decryption Complete  */

  ST_VECTOR  /* 睡眠定时器比较中断  */

  P2INT_VECTOR  /* P2外部中断  */

  _VECTOR  /* UTX0串口0接收中断  */

  DMA_VECTOR  /*  DMA接收中断  */

  T1_VECTOR  /*  定时器1中断   */

  T2_VECTOR  /*  Timer 2 (MAC Timer)  */

  T3_VECTOR   /*  定时器3中断   */

  T4_VECTOR   /*  定时器4中断   */

  P0INT_VECTOR  /*  P0外部中断  */

  UTX1_VECTOR  /* 串口1发送中断 */

  P1INT_VECTOR  /*P1外部中断                  */

  RF_VECTO  /* RFID外部中断                  */

  WDT_VECTOR  /*  看门狗溢出中断           */

四、定时器

输入捕捉:可以用来捕获外部事件,并为其赋予时间标记以说明此事件的发生时刻。 外部事件发生的触发信号由单片机中对应的引脚输入(具体可以参考单片机的datasheet),也可以通过单元来实现。 时间标记可用来计算频率,及信号的其他特征,以及为事件创建日志

输出比较:中计数在初始化完后会自动的计数。从计数到top。并且有不同的工作模式。 另外还有个比较寄存器。一旦计数寄存器在从bottomtop计数过程中与比较寄存器匹配则会产生比较中断(比较中断使能的情况下) 然后根据不同的工作模式计数寄存器将清零或者计数到top值。

1、定时器1

2、定时器2

3、定时器3

五、串口

1、串口1

2、串口2

六、看门狗

,又叫 watchdog timer,是一个电路,一般有一个输入,叫(kicking the dog or service the dog),一个输出到MCURST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给 WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就会给出一个MCU,使MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。

七、ADC模数转换

按键:

/**************************************/

/*           WeBee团队                */

/*         Zigbee学习例程             */

/*例程名称:外部中断                   */

/*建立时间:2012/04/24               */

/*描述:按键S1外部中断方式改变LED1状态

**************************************/

#include

 uint unsigned int

 uchar unsigned char

//定义控制LED灯的端口

 LED1 P1_0     //定义LED1P1.0口控制

 KEY1 P0_4       //中断口

//函数声明

void Delayms(uint);            //延时函数

void InitLed(void);              //初始化P1

void KeyInit();                 //按键初始化

uchar KeyValue=0;

/****************************

//延时函数

*****************************/

void Delayms(uint xms)   //i=xms 即延时i毫秒

{

 uint i,j;

 for(i=xms;i>0;i--)

   for(j=587;j>0;j--);

}

/****************************

LED初始化程序

*****************************/

void InitLed(void)

{

       P1DIR |= 0x01;       //P1_0P1_1定义为输出

   P1INP &= 0xfe;      //打开上拉功能

   P1SEL &= 0Xfe;      //P10设置为普通IO

        LED1 = 1;       //LED1灯熄灭    

}

/****************************

KEY初始化程序--外部中断方式

*****************************/

void InitKey()

{

  P0IEN |= 0X10;  //P04 设置为中断方式

  PICTL &=~ 0X10; // 下降沿触发  

  IEN1 |= 0X20;   // 允许P0口中断;

  P0IFG = 0x00;   // 初始化中断标志位

  EA = 1;

}

/****************************

      中断处理函数

*****************************/

#pragma vector = P0INT_VECTOR   

//格式:#pragma vector = 中断向量,紧接着是中断处理程序

  __interrupt void P0_ISR(void)

 {

  Delayms(10);            //去除抖动

  LED1=~LED1;             //改变LED1状态

  P0IFG = 0;             //清中断标志

  P0IF = 0;             //清中断标志

 }

/***************************

          主函数

***************************/

void main(void)

{

       InitLed();           //调用初始化函数

       InitKey();

        while(1)

       {

        }

}

阅读(2381) | 评论(0) | 转发(0) |
1

上一篇:HTML--字体

下一篇:单片机学习笔记

给主人留下些什么吧!~~