Re: dsPIC30F4011"急"請大家幫'忙一下關於單晶片ASCII碼以轉成二進制的問題提供程式範例 謝謝
|
||||
---|---|---|---|---|
新會員
|
我們有成功轉換顯示出確的數值
C_H_M 真的很謝謝您 還附上簡單的解說以便我們了解 感謝萬分
發表於: 2008/4/7 11:32
|
|||
|
Re: dsPIC30F4011"急"請大家幫'忙一下關於單晶片ASCII碼以轉成二進制的問題提供程式範例 謝謝
|
||||
---|---|---|---|---|
資深會員
|
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
|
|||
|
Re: dsPIC30F4011"急"請大家幫'忙一下關於單晶片ASCII碼以轉成二進制的問題提供程式範例 謝謝
|
||||
---|---|---|---|---|
版主
|
參照:
我們所想要的結果上想要在LCD上顯示二進制的值 ASCII Code "A" = 0x41 = 0b 0100 0001 所以就這轉換的邏輯來看,你必須用一個位移的方式去做位元的測試,如果測試位元 = 1 的話則呼叫 putcLCD('1') 如果測試位元= 0 的話就呼叫 putcLCD('0'),位移八次就可以完成轉換的顯示了。
發表於: 2008/3/26 17:27
|
|||
|
Re: dsPIC30F4011"急"請大家幫'忙一下關於單晶片ASCII碼以轉成二進制的問題提供程式範例 謝謝
|
||||
---|---|---|---|---|
資深會員
|
不清楚你問題是uart接收有問題 (UART程式)
還是ASCII轉成可顯示到LCD顯示出2進碼的部份有問題 (轉碼程式) 如確定UART收的資料正確, 就debug 轉碼程式即可 如是UART程式有問題, SIM的確是有點不方便debug的 該先把問題釐清, 分開處理, 混在一起討論非上策
發表於: 2008/3/26 17:09
|
|||
|
Re: dsPIC30F4011"急"請大家幫'忙一下關於單晶片ASCII碼以轉成二進制的問題提供程式範例 謝謝
|
||||
---|---|---|---|---|
新會員
|
不知道 是不是我們有不懂的地方
不過 UART 好像沒辦法用 SIM 或是 DEBUG 模式 除錯...
發表於: 2008/3/26 15:18
|
|||
|
Re: dsPIC30F4011"急"請大家幫'忙一下關於單晶片ASCII碼以轉成二進制的問題提供程式範例 謝謝
|
||||
---|---|---|---|---|
資深會員
|
debug 程式是幫不上忙啦
不過,個人覺得 針對你的轉換程式部分, 自己用SIM一步步trace 看看,到底哪裡邏輯有問題 應該不難找到答案吧
發表於: 2008/3/26 15:04
|
|||
|
dsPIC30F4011"急"請大家幫'忙一下關於單晶片ASCII碼以轉成二進制的問題提供程式範例 謝謝
|
||||
---|---|---|---|---|
新會員
|
問題:
以下為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
|
|||
|