看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
qaz1234567q: 這個是附圖 https://goo.gl/Iq32Ug 05/26 20:12
※ 編輯: qaz1234567q (180.217.143.150), 05/26/2015 20:16:48 ※ 編輯: qaz1234567q (180.217.143.150), 05/26/2015 20:18:09
joefaq: data_num的初始值 05/26 20:21
qaz1234567q: 指定為0了,但還是無法有預期的結果 05/26 20:36
qaz1234567q: 寫寫樓上,指定另外兩個aaa,bbb的初值就結決了 05/26 20:42
spirit2008: 有確定sin1陣列取出的值是0x25嗎 05/28 23:03