This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430G2553:可以#39;t 在代码中查找错误

Guru**** 2573695 points
Other Parts Discussed in Thread: MSP430G2553

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/607203/ccs-msp430g2553-can-t-find-mistake-in-code

器件型号:MSP430G2553

工具/软件:Code Composer Studio

大家好、我是 MSP430G2553和微控制器的新手。 我正在尝试执行一个应用程序、该应用程序在您每次释放按钮(s2)并将其显示在7段显示屏上时都会进行计数。 我n´t 工作了几天、在代码中找不到错误、所以如果你能给我一个手、我就会收到它!

请´s、n´t 是 μ A 的问题、它在 MSP430的输出上工作正常。 我检查了它是否发送了不同的输出、这些输出在7个段中解码到它、例如 cero (P1OUT = 0x3F)。

我还使用以下编码

A - P1.0                  

B - P1.1

C - P1.2

D - P1.4

E - P1-5

F - P2.0

G - P2.1

代码:

#include

/*
* main.c
*

int count =-1;
INT 控制;
int trace = 0;

int main (void){

WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

//CLK 配置
///-------------------------------------------------------
DCOCTL = CALDCO_1MHz;//DCO 至1MHz
BCSCTL1 = CALBC1_1MHz;//MCLK 至1MHz

//端口配置
///----------------------------------------------------------
P1DIR |= BIT0 + BIT1 + BIT2 + BIT4 + BIT4;//将 P1设置为输出方向(0至5)
P2DIR |= BIT0 + BIT1;//将 P2.0和 P2.1设置为输出方向
P1OUT |= BIT3;// P1.3设置为1
P1REN |= BIT3;// P1.3上的上拉电阻器使用按钮 s2.

while (1){

//等待
///---------------------------------------------------------
控制= 0;
while (control <5){
CONTROL = CONTROL +1;

switch (trace){

情况0:

//高
//--------------------------------------------------
跟踪= 1;
while (~(BIT3 & P1IN)){
asm (" nop");

中断;

案例1:

//低
//--------------------------------------------------
跟踪= 0;
count = count + 1;
while ((BIT3 & P1IN)){
asm (" nop");

中断;

//去二化
///---------------------------------------------------------
switch (count){

情况(0):

P1OUT = 0x3F;
P2OUT = 0x01;
中断;

情况(1):

P1OUT = 0x0E;
P2OUT = 0x00;
中断;

情况(2):

P1OUT = 0x3B;
P2OUT = 0x02;
中断;

情况(3):

P1OUT = 0x1F;
P2OUT = 0x02;
中断;

情况(4):

P1OUT = 0x0E;
P2OUT = 0x03;
中断;

情况(5):

P1OUT = 0x1D;
P2OUT = 0x03;
中断;

情况(6):

P1OUT = 0x3D;
P2OUT = 0x03;
中断;

情况(7):

P1OUT = 0x0F;
P2OUT = 0x00;
中断;

情况(8):

P1OUT = 0x3F;
P2OUT = 0x03;
中断;

情况(9):

P1OUT = 0x0F;
P2OUT = 0x03;
中断;

情况(10):

P1OUT = 0x2F;
P2OUT = 0x03;
中断;

情况(11):

P1OUT = 0x3C;
P2OUT = 0x03;
中断;

情况(12):

P1OUT = 0x39;
P2OUT = 0x01;
中断;

情况(13):

P1OUT = 0x3E;
P2OUT = 0x02;
中断;

情况(14):

P1OUT = 0x39;
P2OUT = 0x03;
中断;

情况(15):

P1OUT = 0x29;
P2OUT = 0x03;
中断;

默认值:

Cuenta = 0;
P1OUT = 0x3F;
P2OUT = 0x01;
中断;


返回0;

谢谢、

Dan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    问题出在哪呢?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1) Clemens Ladisch 的评价。

    2)

    > while (~(BIT3 & P1IN)){

    此条件始终为真。 尝试:

    > while (!(BIT3 & P1IN)){

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    即使我没有释放按钮、它也在计数、正如您所说的、情况始终是真实的、因此那里有一个无限循环。

    我通过擦除"while"并在释放按钮后添加"count"来更改此值:

    switch (trace){
    案例1:
    //高
    //--------------------------------------------------
    跟踪= 0;
    中断;
    情况0:
    //低
    //--------------------------------------------------
    跟踪= 1;
    if ((BIT3 & P1IN)){
    count = count + 1;

    中断;

    其余代码保持不变。

    太棒了!!