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

作者: qaz1234567q (斐波那契數列)   2015-05-26 20:05:41
開發平台(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):
謝謝各位。
作者: qaz1234567q (斐波那契數列)   2015-05-26 20:12:00
這個是附圖 https://goo.gl/Iq32Ug
作者: joefaq (小瑜)   2015-05-26 20:21:00
data_num的初始值
作者: qaz1234567q (斐波那契數列)   2015-05-26 20:36:00
指定為0了,但還是無法有預期的結果寫寫樓上,指定另外兩個aaa,bbb的初值就結決了
作者: spirit2008   2015-05-28 23:03:00
有確定sin1陣列取出的值是0x25嗎

Links booklink

Contact Us: admin [ a t ] ucptt.com