Re: 請教C18的Rlncf(var)指令問題
|
||||
---|---|---|---|---|
資深會員
|
板主大人
Rlncf(var,1,1); 剛試了一下, 變數var, 設為外部變數時正常可以移位 為什麼改用區域變數後就失靈了呢? char aa=0b00000001; void main(void) { char bb=0b00000001; Rlncf(aa,1,1); //會移位 Rlncf(aa,1,1); //會移位 Rlncf(bb,1,1); //不會移位 Rlncf(bb,1,1); //不會移位 }
發表於: 2007/11/28 14:55
|
|||
|
Re: 請教C18的Rlncf(var)指令問題
|
||||
---|---|---|---|---|
新會員
|
參照:
版主謝謝啦!
發表於: 2007/11/28 13:15
|
|||
|
Re: 請教C18的Rlncf(var)指令問題
|
||||
---|---|---|---|---|
版主
|
#pragma idata
測試過程式,Marco 指令 Rlnc( ) 正常動作無誤,每次都會向左移一個位元。
發表於: 2007/11/28 12:04
|
|||
|
Re: 請教C18的Rlncf(var)指令問題
|
||||
---|---|---|---|---|
資深會員
|
參照:
C 沒辦法直接做那樣的移位 組語command有的話可用組語,(沒在用組語,有無適用命令,請自行翻書看一下) 如以下範例 void EE_Write (unsigned char EE_Address, unsigned char EE_Data) { PIR2bits.EEIF = 0; EEADR = EE_Address; EEDATA = EE_Data; EECON1bits.EEPGD = 0; EECON1bits.WREN = 1; INTCONbits.GIE = 0; _asm //組語開始 MOVLW 0X55 MOVWF EECON2,0 MOVLW 0XAA MOVWF EECON2,0 BSF EECON1,1,0 _endasm //組語結束 INTCONbits.GIE = 1; while (!PIR2bits.EEIF); PIR2bits.EEIF = 0; EECON1bits.WREN = 0; } 如是C語言的話, 只能靠程式變通了, 我會這樣寫吧 if(var & 0x1) var=(var>>1)|0x80; else var=var>>1;
發表於: 2007/11/28 9:46
|
|||
|
Re: 請教C18的Rlncf(var)指令問題
|
||||
---|---|---|---|---|
新會員
|
恩..
var=var<<1; 是可以達成我想要的,nicecookie謝謝你囉! 再請教一個相關問題,如果要讓00000001右移變成10000000指令要如何寫呢?
發表於: 2007/11/28 9:10
|
|||
|
Re: 請教C18的Rlncf(var)指令問題
|
||||
---|---|---|---|---|
資深會員
|
Rlncf 沒用過,不曉得
改寫為 var=var<<1; 應該也可以 參考看看
發表於: 2007/11/27 17:43
|
|||
|
請教C18的Rlncf(var)指令問題
|
||||
---|---|---|---|---|
新會員
|
#include<p18f452.h>
#include<stdio.h> #include<stdlib.h> #include<timers.h> #pragma config WDT = OFF #pragma udata char var; #pragma udata void main (void) { char var = 0b00000001; Rlncf(var,1,1); while (1); } 請教各位高手:上面是我寫的程式,原本我的想法是讓var的值在程式執行後從00000001變成00000010,但實際執行卻發現var的值還是為00000001,這是為什麼呢?我該如何解決?
發表於: 2007/11/27 14:54
|
|||
|