[問題] 8051 16進制0xXX 數學運算問題

看板C_and_CPP (C/C++)作者 (斐波那契數列)時間10年前 (2015/05/26 20:05), 10年前編輯推噓2(203)
留言5則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Keil uVision5 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 沒有 問題(Question): 寫8051的程式時,需要對16進制做一些加減乘除的運算, 算的過程跟預期有落差,但是放入到另一個變數時,差更多。 以下是範例: move_data=0x7F-sin1[data_num]; ____________________ 這邊使用模擬時,顯示0x005A,但是在mova_data那邊顯示0x06 計算過程應該要是 0x7F-0x25 =0x5A, 但是丟入到move_data這個變數就變成0x06 不太明白到底是為什麼 餵入的資料(Input): 0x7F-0x25 預期的正確結果(Expected Output): 0x5A 錯誤結果(Wrong Output): 0x06 程式碼(Code):(請善用置底文網頁, 記得排版) #include <regx51.h> #include "z1.h" #include "sin.h" #define TIMER0_COUNT 65276 sbit RS=P1^0 ; //or called R/W +5V=Data 0V=Order sbit RW=P1^1 ; // +5V=Read Data,0V=Write Data sbit E=P1^2 ; //LCD Read/Write On sbit CS1=P1^7 ; // =1,LCD Left On sbit CS2=P1^6 ; // =1 , LCD Right On void delay(int co); void LCG_DATA(char data1); void LCG_CMD(char cmd); void DIS(bit xy, char code *ptr,unsigned int offset); unsigned char get_addr=0x00,get_page=0x00; code sin_wave[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x04,0x01}; static void timer0_isr(void) interrupt TF0_VECTOR using 1 { unsigned char get_points=0x00,move_data=0x00,aaa,bbb; char data_num; TR0=0; TL0=(65536-260)%128; TH0=(65536-260)/128; TR0=1; move_data=0x7F-sin1[data_num]; get_page=move_data/0x20; aaa=move_data*0x08; bbb=aaa/0x20; get_addr=bbb-(get_page*0x08); data_num++; if(data_num==63) data_num=0; } 補充說明(Supplement): 謝謝各位。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.217.143.150 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1432641944.A.1D6.html

05/26 20:12, , 1F
這個是附圖 https://goo.gl/Iq32Ug
05/26 20:12, 1F
※ 編輯: qaz1234567q (180.217.143.150), 05/26/2015 20:16:48 ※ 編輯: qaz1234567q (180.217.143.150), 05/26/2015 20:18:09

05/26 20:21, , 2F
data_num的初始值
05/26 20:21, 2F

05/26 20:36, , 3F
指定為0了,但還是無法有預期的結果
05/26 20:36, 3F

05/26 20:42, , 4F
寫寫樓上,指定另外兩個aaa,bbb的初值就結決了
05/26 20:42, 4F

05/28 23:03, , 5F
有確定sin1陣列取出的值是0x25嗎
05/28 23:03, 5F
文章代碼(AID): #1LP66O7M (C_and_CPP)
文章代碼(AID): #1LP66O7M (C_and_CPP)