- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 C 语言将 I/O 引脚的引用作为函数参数传递给 PIC24F MCU。对于 PIC,设备头文件通过以下方式提供对 I/O 缓冲寄存器的访问:
LATAbits.LATA2 = 0; // sets the pin (RA2 in this case) low.
if (PORTAbits.RA3) { // reads the state of the pin. (RA3)
我想做这样的事情:
int main() {
Configure(); // Sets up peripherals, etc.
WaitForHigh(PORTAbits.RA3); // waits for pin RA3 to go hi.
...
return 0;
}
void WaitForHigh( ?datatype? pin_reference ) {
while( !pin_reference ); // Stays here until the pin goes hi.
}
那么我想在这里传递什么数据类型?当我轮询该 pin 时实际上发生了什么?下面,我从我正在使用的 PIC24F 器件头中复制了相关部分,以防有帮助。
#define PORTA PORTA
extern volatile unsigned int PORTA __attribute__((__sfr__));
typedef struct tagPORTABITS {
unsigned RA0:1;
unsigned RA1:1;
unsigned RA2:1;
unsigned RA3:1;
unsigned RA4:1;
unsigned RA5:1;
} PORTABITS;
extern volatile PORTABITS PORTAbits __attribute__((__sfr__));
提前谢谢您!
最佳答案
作为使用宏的替代方法,函数可以接受端口寄存器地址(或锁存寄存器地址,例如,在引脚配置为输出的情况下为 LATA)和寄存器中位的掩码,该地址是需要。例如:
#include<p24FV32KA301.h> // defines both PORTA and _PORTA_RA3_MASK
void WaitForHigh( volatile unsigned int * port, pin_mask ) {
while( !(*port & pin_mask) ); // Stays here until the pin goes hi.
}
int main()
{
...
WaitForHigh( &PORTA, _PORTA_RA3_MASK ); // waits for pin RA3 to go hi.
...
return 0;
}
关于c - PIC 将 SFR 地址传递给 C 语言中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26321266/
我目前正在使用 AT89C51RC2 制作一个非常简单的井字游戏,但我在正确输入按钮时遇到了问题。 基本上,输入是一个 3x3 按钮矩阵,我想通过在检查列的连接时用脉冲扫描行来使用它;很基本。但是,我
我正在尝试使用 C 语言将 I/O 引脚的引用作为函数参数传递给 PIC24F MCU。对于 PIC,设备头文件通过以下方式提供对 I/O 缓冲寄存器的访问: LATAbits.LATA2 = 0;
在英飞凌C509中,有一个名为S1CON的寄存器,它是一个特殊功能寄存器,如下所示。 可以将S1CON上的位0定义为RI1,以便在主程序中访问和引用它。我想在我的主程序中检查串行接口(interfac
如何访问内存映射外设的 SFR(特殊功能寄存器)。 我如何确定编译器不会弄乱字节顺序? 例如,如何访问地址 0x00080 的 32 位寄存器,这些位是如何映射的?请不要羞于深入细节和低层次。 最佳答
我的一位同事在编写 ATMega 时遇到了一些与访问输入 - 输出端口相关的奇怪问题。 经过一些研究观察到这个问题,我得出结论,我们应该避免使用可能编译为 SBI 的操作访问 SFR。或 CBI如果我
我是一名优秀的程序员,十分优秀!