单片机1问

来源:百度知道 编辑:UC知道 时间:2024/06/05 13:29:33
设x由P1口输入,y存外RAM2000H单元,试按下列要求编制程序
x*x 当x<10
y= 2x 当10≤x≤100
x/2 当100<x≤255

大概的 判断转移 能用CJNE

可是我不会 将三个表达式转入y 和y开头的2000H的伪指令

只需 开头的Y定义和表达式输出解释就可 不用全部程序

谢谢
trousers朋友写的太复杂了...不太能够理解

x*x 当x<10
y= 2x 当10≤x≤100
x/2 当100<x≤255

是个不等式方程组

mov dptr,#2000H;外部地址指针
mov p1,#0ffh;P1置1以便读取外部电平
mov r0,p1;P1数据X读到R0备份
mov a,r0;取出X
clr c
subb a,#9;X-9
jnc parta;如果X<=9,那么减法后CY为0,转跳到A部分
mov a,r0;CY为1,说明X>=10,再取出X
sjbb a,#100;X-100
jnc partb;如果X<=100,那么减法后CY为0,转跳到B部分
sjmp partc;CY为1,说明X>=101,直接转跳到C部分
parta:mov a,r0;A部分x<10
mov b,a
mul ab;AB想乘,就是A平方
movx @dptr,a;放入外部寄存器Y
sjmp $
partb:mov a,r0;B部分10<=x<=100
rl a;左移,即乘2
movx @dptr,a;放入外部寄存器Y
sjmp $
partc:mov a,r0;C部分x>100
orl a,#0feh;去除最低位并右移,即除以2,舍去余数
rr a
movx @dptr,a;放入外部寄存器Y
sjmp $
end;结束
不知满不满意,不满意再提出!

Y不用伪指令,而是直接用DPTR=#2000H 然后MOVX A,@DPTR MOVX @DPTR,A 就行了

int in(int x)
{
if x<10 then
y=x*x
elseif x<=100 then
y=2x
elsif x<=255 then
y=x/2
end if
return y
}