寄存器操作
来源:互联网 发布:淘宝好评改差评怎么改 编辑:程序博客网 时间: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/2DIR,DIR方向缩写|=异或
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_[7:0]IEN直接位操作,没有用BV(x),两种不同操作寄存器方法
看描述:0为中断禁用,1为中断使能。P0.7到P0.0中断使能 (P1.7到P1.0也可以中断使能),说明芯片每个引脚都可以设置为外部中断(按键触发/人为引脚高电平触发一下/程序触发),产生中断后进入中断函数处理相应的动作,如led闪烁。
2 PICTL &= ~BV(1); //端口 上升沿触发中断
看寄存器功能:PICTL端口中断控制
看第一列位:共8位。0位控制端口0,1 2位控制端口1,3位控制端口2。故应为~BV(1)
看描述:0上升沿引起中断,1为下降沿引起中断
3 IEN2 |= BV(4); //允许P1口中断
与第1点区分:P0.1设置为中断方式,第3点是打开P1端口中断
错误:没找到IEN2寄存器,直接把IEN当做P1IEN处理,这是两个不同寄存器。IEN2是中断类型寄存器,应该在中断目录下找。数据手册中断寄存器 定时器寄存器I/O端口寄存器配置在不同位置,要去仔细搜索数据手册。对自己写下的每句程序负责.
- 寄存器操作
- 寄存器操作
- 寄存器操作
- stm32 BKP寄存器操作[操作寄存器+库函数]
- stm32 BKP寄存器操作[操作寄存器+库函数]
- stm32 BKP寄存器操作[操作寄存器+库函数]
- 寄存器操作的方法
- Modbus协议寄存器操作
- STM32串口寄存器操作
- STM32 CRC寄存器操作
- ads1115寄存器操作
- mmap操作arm寄存器
- STM32串口寄存器操作
- 寄存器绝对地址操作
- 裸机寄存器操作
- CPU寄存器操作方式
- STM8 寄存器操作GPIO
- 寄存器位写操作
- Objects are not valid as a React child 错误处理
- Java 标准 I/O 流编程一览笔录( 上 )
- python运行出现SyntaxError:Non-ASCII character u'\xe4' ..
- ros indigo fist
- python3 xrange *的作用
- 寄存器操作
- Unity单例模式
- Effective Java
- iOS一键搞定自动打包并发布到AppStore和Fir
- 面试中经常被问到的问题
- TP5 比较运算符 查询表达式
- POJ-2395 Out of Hay
- 宏内核与微内核
- codeforces 855E 数位DP