
汇编高手请进,急!(
小弟正在做毕设·可是对汇编语言实在不精通这下面有要求麻烦改动一下原要求:本程序中A/D转换器共采集100个数据,采集结果放在数据缓冲区DBUFF中.为了减少干扰信号对采样...
小弟正在做毕设·可是对汇编语言实在不精通
这下面有要求 麻烦改动一下
原要求:本程序中A/D转换器共采集100个数据,采集结果放在数据缓冲区DBUFF中.为了减少干扰信号对采样值的影响,提高采样数据的可靠性,对采样值进行了数字滤波。本程序中采用消除脉冲干扰的平均滤波法,对每个数据都采样9次,然后去掉最大值和最小值,剩下的7个取平均值。
(老师说不能照搬 所以麻烦高手帮忙 按照原要求的格式改动一下 比如100个数据改为80个)
原程序如下:
DSEG SEGMENT 是这个段的基址,也就是这个段的首地址
SBUFF DW 9 DUP(?)
DBUFF DW 100 DUP(?)
COUNT DW 100
PORT_ D DW 378H
PORT_ S DW 379H
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
ASSUME ES:DSEG
MAIN PROC FAR; 主程序
START:PUSH DS
SUB AX ,AX
PUSH AX
MOV AX ,DSEG
MOV DS,AX
MOV ES,AX
MOV DI,OFFSET DBUFF; 存结果区
AGN1:M0V SI,OFFSET SBUFF; SI采集区
MOV CX ,9
AGN2:MOV DX,PORT—D
MOV AL,0FH; 启动转换
0UT DX ,AL
N0P
NOP
MOV AL,1FH; 结束启动
OUT DX,AL
NOP
NOP
MOV AL,17H
OUT DX,AL; 发读状态命令
XCHG DX,PORT_S; DX变为379H
AGN3: IN AL,DX; 读状态
TEST AL,8OH; 测试状态 图4.2 程序流程图
Fig. 4.2 Flow chart of diagram
JNZ AGN3;忙,循环
XCHG DX,PORT_D
MOV AL,1DH
OUT DX,AL
XCHG DX,PORT_S
IN AL,DX ;读高4位数据 MOV AL,1BH
PUSH CX OUT DX,AL
MOV CL,4 XCHG DX ,PORT_S
SHR AL,CL IN AL,DX;读低4位数据
POP CX AND AL,OFH
MOV AH ,AL MOV [SI],AX
XCHG DX ,PORT_D INC SI
MOV AL,1EH INC SI
OUT DX,AL DEC CX
XCHG DX,PORT_S LOOP AGN2
IN AL,Dx; 读中4位数据 CALL SORT; 排序子程序(略)
AND AL,OFH XOR SI,SI
OR AH,AL MOV CX ,7
XCHG DX ,PORT_D CLC
LOP:ADC AX,SBUFF[SI+2]
INC SI
INC SI
LOOP LOP
MOV BX,7
MOV DX,O
IDIV BX; 平均值滤波
MOV [DI],AX
INC DI
INC DI
DEC COUMT
JNZ AGN1
RET
MAIN ENDP
CSEG ENDS
END START
(感谢大家的帮忙啊,请修改后麻烦告诉我一下修改成了什么样的,我好按照程序上的改动再改动要求 谢谢了) 帮上忙的,小弟一百分全送了。
杨_刘
可以告诉我你的QQ号吗
我还想再问一些问题 分都送你了。 展开
这下面有要求 麻烦改动一下
原要求:本程序中A/D转换器共采集100个数据,采集结果放在数据缓冲区DBUFF中.为了减少干扰信号对采样值的影响,提高采样数据的可靠性,对采样值进行了数字滤波。本程序中采用消除脉冲干扰的平均滤波法,对每个数据都采样9次,然后去掉最大值和最小值,剩下的7个取平均值。
(老师说不能照搬 所以麻烦高手帮忙 按照原要求的格式改动一下 比如100个数据改为80个)
原程序如下:
DSEG SEGMENT 是这个段的基址,也就是这个段的首地址
SBUFF DW 9 DUP(?)
DBUFF DW 100 DUP(?)
COUNT DW 100
PORT_ D DW 378H
PORT_ S DW 379H
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
ASSUME ES:DSEG
MAIN PROC FAR; 主程序
START:PUSH DS
SUB AX ,AX
PUSH AX
MOV AX ,DSEG
MOV DS,AX
MOV ES,AX
MOV DI,OFFSET DBUFF; 存结果区
AGN1:M0V SI,OFFSET SBUFF; SI采集区
MOV CX ,9
AGN2:MOV DX,PORT—D
MOV AL,0FH; 启动转换
0UT DX ,AL
N0P
NOP
MOV AL,1FH; 结束启动
OUT DX,AL
NOP
NOP
MOV AL,17H
OUT DX,AL; 发读状态命令
XCHG DX,PORT_S; DX变为379H
AGN3: IN AL,DX; 读状态
TEST AL,8OH; 测试状态 图4.2 程序流程图
Fig. 4.2 Flow chart of diagram
JNZ AGN3;忙,循环
XCHG DX,PORT_D
MOV AL,1DH
OUT DX,AL
XCHG DX,PORT_S
IN AL,DX ;读高4位数据 MOV AL,1BH
PUSH CX OUT DX,AL
MOV CL,4 XCHG DX ,PORT_S
SHR AL,CL IN AL,DX;读低4位数据
POP CX AND AL,OFH
MOV AH ,AL MOV [SI],AX
XCHG DX ,PORT_D INC SI
MOV AL,1EH INC SI
OUT DX,AL DEC CX
XCHG DX,PORT_S LOOP AGN2
IN AL,Dx; 读中4位数据 CALL SORT; 排序子程序(略)
AND AL,OFH XOR SI,SI
OR AH,AL MOV CX ,7
XCHG DX ,PORT_D CLC
LOP:ADC AX,SBUFF[SI+2]
INC SI
INC SI
LOOP LOP
MOV BX,7
MOV DX,O
IDIV BX; 平均值滤波
MOV [DI],AX
INC DI
INC DI
DEC COUMT
JNZ AGN1
RET
MAIN ENDP
CSEG ENDS
END START
(感谢大家的帮忙啊,请修改后麻烦告诉我一下修改成了什么样的,我好按照程序上的改动再改动要求 谢谢了) 帮上忙的,小弟一百分全送了。
杨_刘
可以告诉我你的QQ号吗
我还想再问一些问题 分都送你了。 展开
1个回答
展开全部
;1.注释;应为英文状态的;
;2.程序中的,应为英文状态的,
;3.细节问题PORT_D不是PORT-D
;4.若改为80个数据只在数据段改就是了
;5.其它的好像改不了多少,不止是汇编还有接口呢
DSEG SEGMENT ;是这个段的基址,也就是这个段的首地址
SBUFF DW 9 DUP(?)
DBUFF DW 80 DUP(?)
COUNT DW 80
PORT_D DW 378H
PORT_S DW 379H
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
ASSUME ES:DSEG
MAIN PROC FAR; 主程序
START:
PUSH DS
SUB AX ,AX
PUSH AX
MOV AX ,DSEG
MOV DS,AX
MOV ES,AX
MOV DI,OFFSET DBUFF;存结果区
AGN1:
M0V SI,OFFSET SBUFF;SI采集区
MOV CX,9
AGN2:
MOV DX,PORT_D
MOV AL,0FH; 启动转换
0UT DX,AL
N0P
NOP
MOV AL,1FH; 结束启动
OUT DX,AL
NOP
NOP
MOV AL,17H
OUT DX,AL; 发读状态命令
XCHG DX,PORT_S; DX变为379H
AGN3:
IN AL,DX; 读状态
TEST AL,8OH; 测试状态 图4.2 程序流程图
JNZ AGN3;忙,循环
XCHG DX,PORT_D
MOV AL,1DH
OUT DX,AL
XCHG DX,PORT_S
IN AL,DX ;读高4位数据 MOV AL,1BH
PUSH CX
OUT DX,AL
MOV CL,4
XCHG DX ,PORT_S
SHR AL,CL
IN AL,DX;读低4位数据
POP CX
AND AL,OFH
MOV AH ,AL
MOV [SI],AX
XCHG DX ,PORT_D
INC SI
MOV AL,1EH
INC SI
OUT DX,AL
DEC CX
XCHG DX,PORT_S
LOOP AGN2
IN AL,Dx; 读中4位数据
CALL SORT; 排序子程序(略)
AND AL,OFH
XOR SI,SI
OR AH,AL
MOV CX ,7
XCHG DX ,PORT_D
CLC
LOP:
ADC AX,SBUFF[SI+2]
INC SI
INC SI
LOOP LOP
MOV BX,7
MOV DX,O
IDIV BX; 平均值滤波
MOV [DI],AX
INC DI
INC DI
DEC COUMT
JNZ AGN1
RET
MAIN ENDP
CSEG ENDS
END START
;2.程序中的,应为英文状态的,
;3.细节问题PORT_D不是PORT-D
;4.若改为80个数据只在数据段改就是了
;5.其它的好像改不了多少,不止是汇编还有接口呢
DSEG SEGMENT ;是这个段的基址,也就是这个段的首地址
SBUFF DW 9 DUP(?)
DBUFF DW 80 DUP(?)
COUNT DW 80
PORT_D DW 378H
PORT_S DW 379H
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
ASSUME ES:DSEG
MAIN PROC FAR; 主程序
START:
PUSH DS
SUB AX ,AX
PUSH AX
MOV AX ,DSEG
MOV DS,AX
MOV ES,AX
MOV DI,OFFSET DBUFF;存结果区
AGN1:
M0V SI,OFFSET SBUFF;SI采集区
MOV CX,9
AGN2:
MOV DX,PORT_D
MOV AL,0FH; 启动转换
0UT DX,AL
N0P
NOP
MOV AL,1FH; 结束启动
OUT DX,AL
NOP
NOP
MOV AL,17H
OUT DX,AL; 发读状态命令
XCHG DX,PORT_S; DX变为379H
AGN3:
IN AL,DX; 读状态
TEST AL,8OH; 测试状态 图4.2 程序流程图
JNZ AGN3;忙,循环
XCHG DX,PORT_D
MOV AL,1DH
OUT DX,AL
XCHG DX,PORT_S
IN AL,DX ;读高4位数据 MOV AL,1BH
PUSH CX
OUT DX,AL
MOV CL,4
XCHG DX ,PORT_S
SHR AL,CL
IN AL,DX;读低4位数据
POP CX
AND AL,OFH
MOV AH ,AL
MOV [SI],AX
XCHG DX ,PORT_D
INC SI
MOV AL,1EH
INC SI
OUT DX,AL
DEC CX
XCHG DX,PORT_S
LOOP AGN2
IN AL,Dx; 读中4位数据
CALL SORT; 排序子程序(略)
AND AL,OFH
XOR SI,SI
OR AH,AL
MOV CX ,7
XCHG DX ,PORT_D
CLC
LOP:
ADC AX,SBUFF[SI+2]
INC SI
INC SI
LOOP LOP
MOV BX,7
MOV DX,O
IDIV BX; 平均值滤波
MOV [DI],AX
INC DI
INC DI
DEC COUMT
JNZ AGN1
RET
MAIN ENDP
CSEG ENDS
END START

2022-05-15 广告
光电编码器,是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。光电编码器每转输出60(我们用老板没有说)个脉冲,五线制。其中两根为电源线,三根为脉冲线(A相、B相、Z)。电源的工作电压为 (+5~+24V)直流电源。光...
点击进入详情页
本回答由上海巴鲁图工程机械科技有限公司_提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询