[问题] 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