2011-05-16 33 views
2

我在C編譯器中使用了微芯片版本v8.63。向左移一次並獲得價值表

下面這段代碼,我想'轉移一次值1206420333240d',我知道1位進來的進位寄存器。但我不知道如何在彙編語言中爲pic18F4550檢索這個值。 我的問題是,如何將圖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; 
} 

回答

2

如果使用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 
} 
+1

在實踐中可能無法正常工作,因爲我用所有的PIC C編譯器是完全的廢話。 – 2011-05-17 06:33:50

+0

我相信你的判斷......我會毫不猶豫地承認,我所做的唯一的PIC18開發是彙編程序,所以我不完全確定c能在這裏工作多好。 – 2011-05-17 06:54:23