标签: microcontroller

是否可以使用AVR编程器对MSP430 MCU进行编程?

是否可以使用AVR编程器器件(支持JTAG并通过USB连接到PC)使用其JTAG接口对MSP430 MCU进行编程?
如果不是,为什么不呢?!?如果是,如何将其与Code Composer Studio 5集成?

microcontroller msp430 jtag code-composer

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

使用PIC18从十六进制到十二月?

尝试将4位数组合在一起,给出正确的小数值,我有一点问题.首先让我从我的代码开始.

long firsttwo, secondtwo, combined; 
firsttwo = 0x0C;
secondtwo = 0x6C;
Run Code Online (Sandbox Code Playgroud)

十进制值0C:12

十进制值6C:108

但所有0C6C的十进制值:3180

现在我如何将所有数字放入一个变量才能将其转换为十进制数?因为如果我只是firsttwo自己转换,那么secondtwo我自己就不会获得相同的最终总数.谢谢!

c microcontroller

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

将汇编转换为C [使用PIC18写入存储器]

我正在尝试写入PIC18F87J11上的闪存,但我在理解汇编时遇到了问题.我的PIC的数据表只有汇编,我正在使用C编译器.我想知道是否有人可以帮助我将这部分代码翻译成C语言.此代码可在此处找到,第7.5节.

MOVLW CODE_ADDR_UPPER ; Load TBLPTR with the base address
MOVWF TBLPTRU
MOVLW CODE_ADDR_HIGH
MOVWF TBLPTRH
MOVLW CODE_ADDR_LOW
MOVWF TBLPTRL
MOVLW DATA0
MOVWF TABLAT
TBLWT*+
MOVLW DATA1
MOVWF TABLAT
TBLWT*
PROGRAM_MEMORY
BSF EECON1, WPROG ; enable single word write
BSF EECON1, WREN ; enable write to memory
BCF INTCON, GIE ; disable interrupts
MOVLW H'55'
MOVWF EECON2 ; write H'55'
MOVLW H'AA'
MOVWF EECON2 ; write H'AA'
BSF EECON1, WR ; start program (CPU stall)
BSF INTCON, GIE …
Run Code Online (Sandbox Code Playgroud)

c microcontroller assembly pic

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

你如何从C程序调用汇编函数?

我是微控制器编程的新手,特别是PIC18F87J11,我使用的是MPLAB C18编译器.我正在阅读各种主题的数据表,例如保存到内存或使用计时器.我注意到这些例子是用汇编语言编写的,但我对它的经验最少.有没有办法在我的项目中一起使用Assembly和C的强大功能?

我不明白汇编那么好,否则我会尝试将代码转换为C,在这种情况下,我只是使用汇编代码,几乎没有变化.

现在有人能告诉我如何在使用MPLAB C18编译器的C程序中使用汇编函数吗?

汇编函数可以像hello world一样简单.我只需要了解在MPLAB上梳理和使用两种不同语言的过程.我试图创建一个快速测试功能,但我不知道在哪里放置汇编代码.汇编代码是否需要包含在项目中的自己的文件?

我希望有人可以通过一个完整的简单例子来启发我,以便能够看到全局.我提前给予帮助,谢谢!

c embedded microcontroller assembly pic

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

不同微控制器中的可变大小是否相同?

如果我们在PIC单片机中定义一个变量"整数",那么当我在Atmel微控制器中定义相同的"int"变量时,它的大小是否相同?或者它会有不同的尺寸?

这个问题是在嵌入式系统的采访中,答案应该是什么?

我有点困惑!

它取决于微控制器还是编程语言?在所有不同的编程语言中,相同的变量类型如整数是否相同?

这不是同一个问题,因为嵌入式控制器有点不同.

c embedded microcontroller avr microchip

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

如何使用微控制器芯片计算GPS坐标之间的距离

我需要计算GPS co-ordinates计算行进距离之间的距离.我都试过了HaversineVincenty算法,做工精细我的台式电脑上,但是当我使用相同的代码MSP430 chip使用CCS IDE,IDE会抛出错误,指出" 计划将不适合可用内存 ".

是否有其他替代方法或代码可以找到两个GPS坐标之间的距离?哪个适合MSP430微控制器的可用内存?

microcontroller gps msp430 code-composer

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

TRAP,软件中断和硬件中断之间的区别?

我只想知道它们之间的基本区别.

我在某些地方发现TRAP本质上也被称为软件中断,或类似异常.

另外软件中断和异常之间的基本区别是什么.

软件中断可以由INT指令生成,但TRAP只能通过除零等特定场景生成?是对的吗?

请为此查询提供合适的答案,其中包括s/w中断陷阱和异常.

embedded microcontroller interrupt interrupt-handling interrupted-exception

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

为什么#error指令不能在此处给出预期的结果?

我正在为我的AVR ATmega32微控制器编写一个"gpio"设备驱动程序.驱动程序具有初始化功能,如下所示.我使用枚举将配置传递给函数.调用此函数的一个示例是

gpio_init_port(MY_PORT_A, INPUT, HIGH);
Run Code Online (Sandbox Code Playgroud)

这会将PORTA设置为输入,默认值为HIGH.我使用switch语句来检查传递的配置,以将相应的端口设置为输入或输出.现在我想在用户输入错误输入的情况下在switch语句的"default"情况下使用#error preprocessor指令,例如

gpio_init_port(5, INPUT, HIGH);
Run Code Online (Sandbox Code Playgroud)

因此编译停止并打印错误消息.但我不知道为什么它没有按照我的预期运作.我所指的代码部分是这样的:

default:
#if (port_number != MY_PORT_A && port_number != MY_PORT_B && port_number != MY_PORT_B && port_number!=MY_PORT_D)
#error "Wrong Input. You have entered invalid port number."
#endif
Run Code Online (Sandbox Code Playgroud)

表达方式

(port_number != MY_PORT_A && port_number != MY_PORT_B && port_number != MY_PORT_B && port_number!=MY_PORT_D)
Run Code Online (Sandbox Code Playgroud)

不评估,并且不打印错误消息.但是当我改变它

#if (1)
#error "Wrong Input. You have entered invalid port number."
#endif
Run Code Online (Sandbox Code Playgroud)

它工作正常.我的另一个问题是当我写一些类似的东西时

gpio_init_port(5, ***OUTPUT***, HIGH);
Run Code Online (Sandbox Code Playgroud)

虽然我这次传递"OUTPUT",但也会打印错误消息,这不应该发生,因为默认情况仅针对"INPUT"情况定义.

gpio.h
______

typedef enum port_number{
   MY_PORT_A=0,
   MY_PORT_B,
   MY_PORT_C,
   MY_PORT_D
} port_number_t;
typedef …
Run Code Online (Sandbox Code Playgroud)

c embedded microcontroller

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

STM32μC:SysTick延迟在中断处理程序中不起作用

所以我STM32F103C8T6用C语言编写了一个微控制器程序,使用RTC(实时时钟)和显示模块.

RTC和显示都工作正常,但是当我尝试从RTC中断处理程序内部更新显示时,它不起作用.

当我从内部向显示器写东西时main(),它工作得很好.

中断处理程序也可以工作,所以我认为问题在写入显示的函数中.

此功能使用小延迟来与显示控制器进行通信.

我以前使用SysTick过来生成这样的延迟:

void delay(uint32_t n){
    uint32_t start =  systick_count;
    while (systick_count - start < n);
    return;
}
Run Code Online (Sandbox Code Playgroud)

但不知何故,在RTC的中断处理程序中,它不起作用.所以我用这个替换了我的延迟函数,而不是使用SysTick:

for (; i>0; i--) {
    for (int j = 0; j < 72; ++j) {
        __asm__ __volatile__("nop\n\t":::"memory");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在一切正常.

我试图理解,为什么SysTick显然在RTC中断处理程序内不起作用.

我想这可能是由中断优先级引起的,但根据数据表,默认情况下,SysTick Interrupt优先级高于RTC中断优先级.

也许有人可以解释,为什么会这样?

编辑1:好的,所以我已经阅读了更多关于中断优先级的内容,似乎我需要正确配置NVIC_IRQChannelPreemptionPriority.我会尽快尝试这个...

关于中断内部的延迟,我知道这不是正确的方法,但我仍然想了解程序的行为

EDIT2:我刚刚尝试通过以下方式更改中断优先级:

// set RTC interrupt priority to 15 (lowest)
NVIC_SetPriority(RTC_IRQn, 15);
// set interrupt priority of SysTick to 0 (highest)
NVIC_SetPriority(SysTick_IRQn, 0); …
Run Code Online (Sandbox Code Playgroud)

c microcontroller stm32 stm32f1

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

在C中将全局变量设置为等于“ 0x0”怎么办?

我目前正在查看一些用C语言为微控制器编写的代码,而我只是想弄清楚为什么某些变量设置为等于0x00x1。有人可以解释一下吗?

这是代码:

// Global variables
static bool volatile radio_busy;
int xx = 0x0;
int yy = 0x0;
int zz = 0x1;
bool flag = 1;
Run Code Online (Sandbox Code Playgroud)

c microcontroller

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