寄存器操作

来源:互联网 发布:淘宝好评改差评怎么改 编辑:程序博客网 时间:2024/05/17 18:02


程序

void InitLed(void)

{

    P1DIR |= BV(0);      // P1.0定义为输出

    LED1 = 0;           // LED1灯熄灭     

}

 

//InitKey(),设置按键相应的IO

void InitKey(void)

{

    P1IEN |= BV(4);      // P1.4设置为中断方式1:中断使能IEN

    PICTL &= ~BV(1);     //端口 上升沿触发(高电平触发)

    IEN2  |= BV(4);      //允许P1口中断(INE1,端口1)

    P1IFG = 0x00;        //初始化中断标志位。端口1中断状态标志0x8A?这里的0x8A指寄存器地址,区别。

    EA = 1;              //打开总中断

    

    P1IEN |= BV(5);      // P1.5设置为中断方式1:中断使能IEN

    PICTL &= ~BV(1);     //端口 上升沿触发

    IEN2  |= BV(4);      //允许P1口中断

    P1IFG = 0x00;    

    EA = 1;

}

 

  #define BV(x) (1<<(x))常用宏定义,x为几就将默认最低位1往左移几位

  这是一种很好的寄存器操作方法。注意是对一位进行操作,一位,不要错误理解为8位或者是16位一起设置 

 

设置LED相应的IO口,I/O口配置为输入 输出

1 P1DIR |= BV(0);      // P1.0定义为输出,定义为输出使用来控制与P1.0相连的LED

P1是定义的P1端口,P1/0/2DIRDIR方向缩写|=异或

2 看数据手册步骤:

看寄存器功能:P1DIR描述为端口1的方向

看第一列位:共8位。故P1DIR |= BV(0);将第一位置1

看描述:0为输入,1为输出

 

设置按键相应的IO口,I/O口配置为上升沿还是下降沿触发(不同I/O口配置为不同功能,配置不同寄存器)

1  P0IEN |= BV(1);    // P0.1设置为中断方式1:中断使能

看寄存器功能:端口0中断使能

看第一列位:共8位。数据手册上P0_[70]IEN直接位操作,没有用BV(x),两种不同操作寄存器方法

看描述:0为中断禁用,1为中断使能。P0.7P0.0中断使能 (P1.7P1.0也可以中断使能),说明芯片每个引脚都可以设置为外部中断(按键触发/人为引脚高电平触发一下/程序触发),产生中断后进入中断函数处理相应的动作,如led闪烁。

2 PICTL &= ~BV(1);    //端口 上升沿触发中断

看寄存器功能:PICTL端口中断控制

看第一列位:共8位。0位控制端口01 2位控制端口13位控制端口2。故应为~BV(1)

看描述:0上升沿引起中断,1为下降沿引起中断

3  IEN2  |= BV(4);      //允许P1口中断

  与第1点区分:P0.1设置为中断方式,第3点是打开P1端口中断

 

 错误:没找到IEN2寄存器,直接把IEN当做P1IEN处理,这是两个不同寄存器。IEN2是中断类型寄存器,应该在中断目录下找。数据手册中断寄存器 定时器寄存器I/O端口寄存器配置在不同位置,要去仔细搜索数据手册。对自己写下的每句程序负责.

原创粉丝点击