• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::


Browsing this Thread:   1 Anonymous Users






Re: dsPIC30F4011"急"請大家幫'忙一下關於單晶片ASCII碼以轉成二進制的問題提供程式範例 謝謝
#8
新會員
新會員


查看用戶資訊
我們有成功轉換顯示出確的數值
C_H_M 真的很謝謝您 還附上簡單的解說以便我們了解 感謝萬分

發表於: 2008/4/7 11:32
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: dsPIC30F4011"急"請大家幫'忙一下關於單晶片ASCII碼以轉成二進制的問題提供程式範例 謝謝
#7
中級會員
中級會員


查看用戶資訊
因為你程式中有
// puthexLCD( ABC );
// putcLCD(ABC);
這兩行在, 所以我假設你已經使用這兩個函數檢視過你的接收數值了.

提供以下供你參考:

void _ISR _U1RXInterrupt(void)
{
Rec_Buffer = ReadUART1( ); // Read data from Receiver FIFO
ABC = Rec_Buffer;
AA = ABC;


Rec_Flag = 1; // Set the Received Flag
IFS0bits.U1RXIF = 0 ; // Clear Interrupt Flag
}


int main( void )
{
SRbits.IPL=4;
OpenLCD( ) ; // 使用 OpenLCD( )對 LCD 模組作初始化設定
Test_UART( ); // UART 模組測試程式
}

void Test_UART(void )
{
unsigned char n;

Init_UART( ) ; // 對 UART 模組作初始化設定

printf("\x1b[2J");

setcurLCD(0,0) ; // 使用 setcurLCD( ) 設定游標於 (0,0)
putrsLCD( UART_LCD1 ) ;
setcurLCD(0,1) ; // 使用 setcurLCD( ) 設定游標於 (0,1)
putrsLCD( UART_LCD2 ) ;

printf("************************************************************\r\n");
printf("* Microchip Workshop RTC Training Exercise 1 : *\r\n");
printf("* Please send the folat value form SIN 0 ~ 180 deg *\r\n");
printf("************************************************************\r\n");

for (n=0;n<190;n+=10)
{
Sin_A = sinf((n*PI)/180);
printf(" SIN %3d deg = %f\n\r",n,Sin_A);
}

setcurLCD(0,1) ; // 使用 setcurLCD( ) 設定游標於 (0,1)
putrsLCD( UART_LCD5 ) ;


while (1)
{
while ( !Rec_Flag) ;

Rec_Flag=0;
if (Rec_Buffer==0x0d)
{
setcurLCD(0,0) ;
putrsLCD( UART_LCD3 ) ;
setcurLCD(0,1) ;
putrsLCD( UART_LCD4 ) ; //Clear Line 2 of LCD
setcurLCD(0,1) ;
Rec_Count=0;
}
else
{
// puthexLCD( ABC );
// putcLCD(ABC);

[color=CC0000]
   for(
n=0n<8n++)
      { if((
ABC 0x80) > 0)  putcLCD('1');
        else  
putcLCD('0');
        
ABC <<= 1;
      }
   
putcLCD(' ');
   
putcLCD(' '); [/color]


Rec_Count++;
if (Rec_Count>=4)
{
setcurLCD(0,1) ;
Rec_Count=0;
}
}
}

}

----------------------------------------------------------
稍微解說一下修改的部分.

for(n=0; n<8; n++) 進行8個位元資料的檢視與輸出

if((ABC & 0x80) > 0) putcLCD('1');
else putcLCD('0'); 如果 bit7 大於 0 時輸出 '1' , 否則輸出 '0'

ABC <<= 1; bit6, bit5 .... bit0 依序移向 bit7

putcLCD(' ');
putcLCD(' '); 印出2個空格, 好跟下一個輸出能區隔開


發表於: 2008/3/26 22:34
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: dsPIC30F4011"急"請大家幫'忙一下關於單晶片ASCII碼以轉成二進制的問題提供程式範例 謝謝
#6
資深會員
資深會員


查看用戶資訊
ABC = Rec_Buffer;
AA = ABC;
...恕刪
jk[n] = ABC && aa ;
jk[n] = jk[n] >> n ;
aa = aa >> 1 ;
putcLCD(jk[n] + '0' );

簡單看了你的code之後,開始頭痛(我想其他大大要懂
你的code,可能不是難事),恕小弟非能人.

容我簡單,問一下
1.aa,與AA是否有關連呢?亦或大小寫打錯?
(看不到宣告無從猜測)

2.也請勿使用aa, AA, ABC, jk此種看不出意義之變數名稱.
(我想其他高手,想要幫忙,看了code可能就打消念頭)
(help me to help you)

3.試著分開傳送與display的工作,來做debug.
A.例如先設固定的值.例如 'A' (0x41)的值給要
display出去暫存器,看看是否正確顯示.
B.完成A步驟,再加入UART傳輸.

希望有幫助

發表於: 2008/3/26 18:13
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: dsPIC30F4011"急"請大家幫'忙一下關於單晶片ASCII碼以轉成二進制的問題提供程式範例 謝謝
#5
版主
版主


查看用戶資訊
參照:
我們所想要的結果上想要在LCD上顯示二進制的值
比如我們鍵盤案"A" 透過RS232傳輸
LCD上會顯示01000001

ASCII Code "A" = 0x41 = 0b 0100 0001
所以就這轉換的邏輯來看,你必須用一個位移的方式去做位元的測試,如果測試位元 = 1 的話則呼叫 putcLCD('1') 如果測試位元= 0 的話就呼叫 putcLCD('0'),位移八次就可以完成轉換的顯示了。

發表於: 2008/3/26 17:27
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: dsPIC30F4011"急"請大家幫'忙一下關於單晶片ASCII碼以轉成二進制的問題提供程式範例 謝謝
#4
資深會員
資深會員


查看用戶資訊
不清楚你問題是uart接收有問題 (UART程式)
還是ASCII轉成可顯示到LCD顯示出2進碼的部份有問題 (轉碼程式)

如確定UART收的資料正確, 就debug 轉碼程式即可
如是UART程式有問題, SIM的確是有點不方便debug的

該先把問題釐清, 分開處理, 混在一起討論非上策

發表於: 2008/3/26 17:09
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: dsPIC30F4011"急"請大家幫'忙一下關於單晶片ASCII碼以轉成二進制的問題提供程式範例 謝謝
#3
新會員
新會員


查看用戶資訊
不知道 是不是我們有不懂的地方

不過 UART 好像沒辦法用 SIM 或是 DEBUG 模式 除錯...

發表於: 2008/3/26 15:18
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: dsPIC30F4011"急"請大家幫'忙一下關於單晶片ASCII碼以轉成二進制的問題提供程式範例 謝謝
#2
資深會員
資深會員


查看用戶資訊
debug 程式是幫不上忙啦
不過,個人覺得
針對你的轉換程式部分,
自己用SIM一步步trace 看看,到底哪裡邏輯有問題
應該不難找到答案吧

發表於: 2008/3/26 15:04
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


dsPIC30F4011"急"請大家幫'忙一下關於單晶片ASCII碼以轉成二進制的問題提供程式範例 謝謝
#1
新會員
新會員


查看用戶資訊
問題:

以下為RTC教育訓練課程UART的程式範例 EX1
在C30EVM_LCD.h裡面我們發現
putsLCD可顯示字元
putthexLCD可顯示16進制
put_Num_LCD可顯示10進制
這些都是寫好的可以直接拿來應用
在二進制沒有寫好的範例可以拿來應用 所以需要自己修改
我們所想要的結果上想要在LCD上顯示二進制的值
比如我們鍵盤案"A" 透過RS232傳輸
LCD上會顯示01000001



以下程式我們有經過多次修改可是都得不到我們要的結果
我們執行修改過的程式在LCD上顯示都是 00000000而不是正確的轉換碼 請幫我們看程式哪裡有錯誤的地方 並予以指正簡答


void _ISR _U1RXInterrupt(void)
{
Rec_Buffer = ReadUART1( ); // Read data from Receiver FIFO
ABC = Rec_Buffer;
AA = ABC;


Rec_Flag = 1; // Set the Received Flag
IFS0bits.U1RXIF = 0 ; // Clear Interrupt Flag
}


int main( void )
{
SRbits.IPL=4;
OpenLCD( ) ; // 使用 OpenLCD( )對 LCD 模組作初始化設定
Test_UART( ); // UART 模組測試程式
}

void Test_UART(void )
{
unsigned char n;

Init_UART( ) ; // 對 UART 模組作初始化設定

printf("\x1b[2J");

setcurLCD(0,0) ; // 使用 setcurLCD( ) 設定游標於 (0,0)
putrsLCD( UART_LCD1 ) ;
setcurLCD(0,1) ; // 使用 setcurLCD( ) 設定游標於 (0,1)
putrsLCD( UART_LCD2 ) ;

printf("************************************************************\r\n");
printf("* Microchip Workshop RTC Training Exercise 1 : *\r\n");
printf("* Please send the folat value form SIN 0 ~ 180 deg *\r\n");
printf("************************************************************\r\n");

for (n=0;n<190;n+=10)
{
Sin_A = sinf((n*PI)/180);
printf(" SIN %3d deg = %f\n\r",n,Sin_A);
}

setcurLCD(0,1) ; // 使用 setcurLCD( ) 設定游標於 (0,1)
putrsLCD( UART_LCD5 ) ;


while (1)
{
while ( !Rec_Flag) ;

Rec_Flag=0;
if (Rec_Buffer==0x0d)
{
setcurLCD(0,0) ;
putrsLCD( UART_LCD3 ) ;
setcurLCD(0,1) ;
putrsLCD( UART_LCD4 ) ; //Clear Line 2 of LCD
setcurLCD(0,1) ;
Rec_Count=0;
}
else
{
// puthexLCD( ABC );
// putcLCD(ABC);

for( n=0 ; n<8 ; n++)
{
jk[n] = ABC && aa ;
jk[n] = jk[n] >> n ;
aa = aa >> 1 ;
putcLCD(jk[n] + '0' );
}

Rec_Count++;
if (Rec_Count>=4)
{
setcurLCD(0,1) ;
Rec_Count=0;
}
}
}

}

或是 有簡單的轉二進制的程式可以提供參考~~

發表於: 2008/3/26 14:50
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------