【问题标题】:shift left once and get value form carry左移一次并获得值形式进位
【发布时间】:2011-05-16 10:18:12
【问题描述】:

我正在使用带有 C 编译器的微芯片版本 v8.63。

下面的一段代码,我想'移位一次值 1206420333240d',我知道 1 位进入进位寄存器。但我不知道如何用汇编语言为 pic18F4550 检索这些值。 我的问题是,如何使用 pic 18F4550 的汇编程序转换一次并从进位中获取值?

包含在整个项目中。

unsigned int rood = 1206420333240;


void main (void)
{   
    //int rood[] = {0,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,1,0,0,0,1,1};

    TRISD = 0x00;               // PORTD  als output
    TRISB = 0b00110000;         // RB4 en RB5 als input
    TRISA = 0x00;               // RA output

    RCONbits.IPEN = 0;          // prioriteit disable
    INTCONbits.GIE = 1;         // enable interrupt
    INTCONbits.RBIE = 1;        // interrupt portB on

    while(1)
    {   
        _asm sleep _endasm  
    }
}

#pragma interrupt ISR
void ISR (void)
{


    if (INTCONbits.RBIF==1)
    {
        if(PORTBbits.RB5==0)        // S3 pressed ?
        {
            int i = 0;
            int b;
            do {
                // Try to shift left (SHF) and get value in carry.
                _asm
                    mov  EAX, 1206420333240d
                _endasm
                //LATAbits.LATA2 = rood << 1;
                //LATDbits.LATD1 ^= 1;

                //do-while for the frequentie (1500 is de freq)
                b = 0;
                do {
                    b++;
                }while(b <= 2000);

                i++;
            }while(sizeof(rood) <= 50);

            //LATDbits.LATD1 ^= 1;      // D2 togglen

        }

    }   
    INTCONbits.RBIF = 0;
}

【问题讨论】:

    标签: c assembly microcontroller


    【解决方案1】:

    如果使用PIC 18 assembly,那么有一个命令将向左循环一个值并将进位位存储在指定的寄存器中。

    RLCF REG, 0, 0
    

    (参见上述链接文档中的第 243 页)。注意:您必须查询进位寄存器以检索值,并可能将最低有效位设置为“0”以抵消旋转操作并将其转换为移位操作。

    您可以诉诸内联汇编来执行此操作,但是,我想知道为什么以下方法不起作用:

    int carry = (value & 0X80) >> 7; // substitute the correct bit masks here
    value = value << 1;
    
    if( carry == 1 )
    {
        // Perform action
    }
    

    【讨论】:

    • 在实践中它可能不起作用,因为我使用的所有 PIC C 编译器都是垃圾。
    • 我相信你的判断......我会坦率地承认,我所做的唯一 PIC18 开发是在汇编程序中进行的,所以我不完全确定 c 在这里能有多好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多