;
ORG 0000H
MOV DPTR, #TAB
MOV R2, #0
LOP1:
MOV A, R2
MOVC A, @A + DPTR
MOV P1, A
CALL DL1S
INC R2
CJNE R2, #7, LOP1
LOP2:
MOV A, R2
MOVC A, @A + DPTR
MOV P1, A
CALL DL1S
DEC R2
CJNE R2, #0, LOP2
SJMP LOP1
TAB: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
DL1S:
MOV R5, #10
D0: MOV R6, #180
D1: MOV R7, #0
DJNZ R7, $
DJNZ R6, D1
DJNZ R5, D0
RET
END
我先按你的思路给了程序(平方表只有0~9的平方)。。关键在用xlat查表。。。
data segment
ms1 db "the value x is:$"
ms2 db 10,13,"the value Y is:$"
tab db 0,1,4,9,16,25,39,49,56,81;0~9的平方
xval db 3
yval db
data ends
code segment
assume ds:data,cs:code
start:
mov ax,data
mov ds,ax
lea bx,tab
mov al,xval
xlat tab
mov yval, al
lea dx,ms1
mov ah,9;显示X的值
int 21h
mov ah,2
mov dl,xval
add dl,48;转换为字符显示
int 21h
lea dx,ms2
mov ah,9;显示Y的值
int 21h
mov ah,2
mov dl,yval
add dl,48
int 21h
mov ah,4ch;返回DOS
int 21h
code ends
end start
char code s7[10]={};//数组里为 0-9 的七段码数据,这个数组存放在代码段(ROM)里
char show(char m) // m=0,1,9
{ return s7(m); }
main()
{ char h, p ;
while(1){
h=8; //调用时
p=show(h);// 对应(8)的七段码数据提取到 p;
}
}
基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 校验码的具体生成过程为:假设要发送的信息用多项式C(X)表示,将C(x)左移R位(可表示成C(x)xR),这样C(x)的右边就会空出R位,这就是校验码的位置。用 C(x)xR 除以生成多项式G(x)得到的余数就是校验码。
任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。
建表太麻烦了,我就把中间用到的关键指令给楼主吧(注:我用的是nasm)
mov al,[十六进制值]
mov bx,表首地址
xlat
这三步即可使得al中的结果为对应十六进制数的ASCII码了。
以上就是关于基于AT89s52单片机。请用查表法实现8个彩灯循环点亮,亲,使用查表法哦,在下列程序上改动就好全部的内容,包括:基于AT89s52单片机。请用查表法实现8个彩灯循环点亮,亲,使用查表法哦,在下列程序上改动就好、汇编语言, 1 利用查表法求Y=X2值,设X放在数据区XVAL单元,结果存入YVAL单元,平方表放在TAB开始的单元、试编写一个用查表法查0-9字形段码的子程序,调用子程序前,待查表的数据存放在等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)