标签: microcontroller

如何开始使用微控制器进行开发?

我希望能够构建自己的小型电子设备,只需要几个按钮,并将每个按键存储在内存中.

我是一个非常有经验的程序员,但我不知道从哪里开始硬件,或在谷歌上搜索什么.

请给我任何可以帮助我的信息.

microcontroller

1
推荐指数
1
解决办法
668
查看次数

启用端口RA0作为输入并从led检索值LDR

我正在使用带有微芯片v8.63的picdem 18F4550和C18编译器.

我将PortA设置为输入,我将在端口RA0上连接LDR.以下是(我认为)

TRISAbits.TRISA0 = 1; <= set RA0 as input
Run Code Online (Sandbox Code Playgroud)

现在我想要LDR的值(如果LED打开了电压/值),我可以说:

int colorLed = PortAbits.RA0;
Run Code Online (Sandbox Code Playgroud)

现在在int类型的变量中,有我的Led的值/电压.

如我错了请纠正我.

c embedded microcontroller microchip pic

1
推荐指数
1
解决办法
1092
查看次数

将小于1024的十进制转换为两个变量,一个8位,另一个变换为2,使用C

嗨,我正在使用MikroC编程一个微控制器,我有一个小于1024(2 ^ 10bit)的变量,我需要将其转换int value;unsigned char value8bits;并将最低有效位放入unsigned char value2bits;

我其实在想使用>>位移不知道怎么回事?所以你怎么看 ?

c microcontroller mikroc

1
推荐指数
1
解决办法
131
查看次数

如何在C中将端口设置为按钮的输入?

我正在使用MikroC来尝试编程我的PIC16f62微控制器.我已经设法使我的输出工作(我可以打开LED等)但我似乎无法让输入工作.

这是我目前的代码:

void main() {
    TRISB.RB0 = 0; //set Port RB0 as output
    PORTB.RB0 = 1; //set Port RB0 to high (turn on LED)
    TRISA = 1; //Set PORTA as inputs 

    for(;;){  //endless loop
            if(PORTA.RA0 == 1){  //if push button is pressed
                         PORTB.RB0 = !PORTB.RB0;  \\toggle LED
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道问题是我没有正确配置PORT还是我正在检查按钮是否被错误按下.

任何帮助表示赞赏.谢谢.

c embedded microcontroller input pic

1
推荐指数
1
解决办法
2万
查看次数

一个16位机器可以处理64位(数据类型,如long int,float ...)操作?

16位机器可以对64位数据类型执行操作吗?

我知道它可以使用两个寄存器执行32位乘法,但不知道它如何处理64位数据?

embedded microcontroller microprocessors

1
推荐指数
1
解决办法
1289
查看次数

在为微控制器编译C程序时,编译器放置的那些额外汇编代码是什么?

我想在C中为我的Stellaris启动板编写一段代码,以便通过将库使用保持在最低限度来打开板载LED.令我惊讶的是,编译后的代码大小约为800字节.因此,为了检查编译器放入编译代码的内容,我使用了dissambler检查了汇编代码.它有很多代码,我没有编写C代码.我想知道这些代码的用途以及它是如何进入编译器设置的.我试图了解编译器的行为以及编译器正在做的幕后事务.请帮我.

这是我的C程序:

#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"

#define GPIOFBASE   0x40025000
#define GPIOCLK     *((volatile unsigned long *)(0x400FE000 + 0x608))
#define FDIR        *((volatile unsigned long *)(GPIOFBASE + 0x400))
#define FDEN        *((volatile unsigned long *)(GPIOFBASE + 0x51C))
#define FDATA       *((volatile unsigned long *)(GPIOFBASE + 0x3FF))

void main(void) {

    ROM_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);

    GPIOCLK |= (1<<5);
    FDIR    |=  0xE;
    FDEN    |=  0xE;
    FDATA   |=  0xE;

while (1);

}
Run Code Online (Sandbox Code Playgroud)

我使用的唯一API调用是使用Onchip ROM库设置时钟设置.请检查此pastebin上的dissambly代码:(主要:位于0x190.)

http://pastebin.com/wNNsBdtT

c embedded microcontroller arm disassembly

1
推荐指数
1
解决办法
392
查看次数

在预处理程序语句中使用C函数

我正在stm32f4芯片上编写一个c ++应用程序,它有几个要控制的IO.我的一位同事建议为所有这些IO制作预处理器语句,以使代码更具可读性.

例如:

#define FAN_ON     GPIO_SetBits(GPIOD, GPIO_Pin_0);
#define FAN_OFF    GPIO_ResetBits(GPIOD, GPIO_Pin_0);
Run Code Online (Sandbox Code Playgroud)

这样就好了,如果没有,为什么?我还没有那么多的微控制器经验,但我读到在预处理器语句中不应该使用分号,我也不确定在预编译器语句中使用函数是否是一种好的风格?

谢谢您的帮助!

c c++ microcontroller stm32 precompiler

1
推荐指数
1
解决办法
274
查看次数

如何在while循环中处理多个类似的条件?

对不起那么难以捉摸的标题,但这是我将用来解释我的问题的代码片段!

while(motors[0].cycle <= maxcycle
   && motors[1].cycle <= maxcycle
   && motors[2].cycle <= maxcycle
   && motors[3].cycle <= maxcycle
   && motors[4], etc ...)
Run Code Online (Sandbox Code Playgroud)

我如何避免为while()循环键入这个非常长的条件,因为我总是检查相同的参数,只有我的结构的索引正在改变.

c microcontroller arduino while-loop

1
推荐指数
1
解决办法
108
查看次数

为什么8051上电时SP寄存器07h的值是多少?

当8051上电时,堆栈指针寄存器包含的值07h不是00h

embedded microcontroller 8051

1
推荐指数
1
解决办法
284
查看次数

STM32F401RE Nucleo板,无法切换用户LED

我试图弄清楚如何在Nucleo板上切换LED,我只是看不到用户LED切换.在网上看来,这就是你要做的一切.还有其他人遇到过这个问题吗?

#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"

int main(void)
{
    int counter = 0;
    SystemInit();

    GPIO_InitTypeDef temp;
    temp.GPIO_Mode = GPIO_Mode_OUT;
    temp.GPIO_OType = GPIO_OType_PP;    // Push Pull
    temp.GPIO_Pin = GPIO_Pin_5;
    temp.GPIO_Speed = GPIO_Low_Speed;
    temp.GPIO_PuPd = GPIO_PuPd_NOPULL;

    RCC_APB2PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

    GPIO_Init( GPIOA, &temp );

    while( 1 )
    {
        if ( counter++ > 10000 )
        {
            GPIO_ToggleBits( GPIOA, GPIO_Pin_5 );
            counter = 0;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c microcontroller stm32 stm32f4 nucleo

1
推荐指数
1
解决办法
191
查看次数