微机汇编程序高手! 设计任务 信号发生器产生梯形波 源程序要使用汇编语言 程序今晚要 符合要求悬赏可以加

微机汇编程序高手! 设计任务 信号发生器产生梯形波 源程序要使用汇编语言 程序今晚要 符合要求悬赏可以加,第1张

***********Editor by zzy***********************

***********v.1.1.23

********************************************

IOY0 EQU 0D400H 片选IOY0端口地址

IOY1 EQU 0D440H 片选IOY1端口始地址

IOY2 EQU 0D480H 片选IOY2端口始地址

IOY3 EQU 0D4C0H 片选IOY3端口始地址

********************************************

ADC0809 EQU IOY0+00H ADC0809端口地址

PA55EQU IOY1+00H 8255的A口地址

PB55EQU IOY1+04H 8255的B口地址

PC55EQU IOY1+08H 8255的C口地址

PCTLEQU IOY1+0CH 8255的控制寄存器地址

DAC0832 EQU IOY2+00H DAC0832端口地址

TIMER0 EQU IOY3+00H 8254计数器0端口地址

TIMER1 EQU IOY3+04H 8254计数器1端口地址

TIMER2 EQU IOY3+08H 8254计数器2端口地址

TCTLEQU IOY3+0CH 8254控制寄存器端口地扰神址

STACK1 SEGMENT STACK

DW 256 DUP(?)

STACK1 ENDS

DATA SEGMENT

STR1 DB'Please input password:',0AH,0DH,'$'

STR2 DB'The password is not right !!!Please try again!!!',0AH,0DH,'$'厅搏

STR3 DB'Welcome to the signal creat machine',0AH,0DH,'Loading ADC0809.....',0AH,0DH,'$'

STR4 DB 'DIS',0AH,0DH,'$'

DTABLE DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H 7段数码管的段位值

STABLE DB80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H,0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH,0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E2H,0DAH,0D1H,0C7H,0BCH,0B0H,0A5H,98H,8CH,80H,7FH,73H,67H,5AH,4FH,43H,38H,2EH,25H,1DH,15H,0FH,09H,05H,02H,00H,00H,02H,05H,09H,0FH,15H,1DH,25H,2EH,38H,43H,4FH,5AH,67H,73H,7FH

AD DB ?保存ad转换结果

PASSWORD DB 41H,42H,43H,44H 预设密码 要改!!!!

PW DB 4 DUP (?) 密码预留

YU DB 20 DUP (?) 预留20个空间存放数据

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

L0: MOV DX,OFFSET STR1 显示提示信缓伏亏息

MOV AH,9

INT 21H

MOV SI,OFFSET PW

MOV CX,4

SCAN: MOV AH,01H

INT 21H

CMP AL,'E'

JZ QUIT

MOV [SI],AL

INC SI

LOOP SCAN

CALL COMP;看不懂

CMP AL,4

JB ERRO;什么意思

JMP RIGHT

ERRO: MOV DX,OFFSET STR2 显示提示信息

MOV AH,9

INT 21H

JMP L0

RIGHT: MOV DX,OFFSET STR3 显示提示信息

MOV AH,9

INT 21H

CALL CLK ADC0809 CLK输入 ,启动8254

MOV DX,PCTL 初始化8255工作方式

MOV AL,88H 1000 1000方式0,A口,B口输出,C口高四位输入

OUT DX,AL

DISAD: CALL AD0809

MOV DL,0FFH 判断主键盘有无键按下

MOV AH,6

INT 21H

JZ DISAD

CMP AD,15H

JNB M1

CALL JIETI

JMP L0

M1: CMP AD,80H

JNB M2

CALL SIN

JMP L0

M2: CMP AD,0A0H

JNB M3

CALL TIXING

JMP L0

M3: CMP AD,0C0H

JNB M4

CALL FANG500

JMP L0

M4: CALL FANG1K

JMP L0

QUIT: MOV AX,4C00H 结束程序退出

INT 21H

COMP PROC NEAR

MOV AL,0 初始化al,AL中保存相同字符的个数

MOV SI,OFFSET PW

MOV DI,OFFSET PASSWORD

MOV CX,4

COMPLOOP:

MOV AH,[DI]

CMP [SI],AH

JZ COMPS1

JMP COMPS2

COMPS1:INC AL

COMPS2:INC SI

INC DI

LOOP COMPLOOP

RET

COMP ENDP

DIS PROC NEAR 显示键值子程序

PUSH AX 以缓冲区存放的键值为键值表偏移找到键值并显示

MOV SI,3000H

MOV DL,0FDH

MOV AL,DL

AGAIN: PUSH DX

MOV DX,PA55

OUT DX,AL 设置X1~X4,选通一个数码管

MOV AL,[SI]取出缓冲区中存放键值

MOV BX,OFFSET DTABLE

AND AX,00FFH

ADD BX,AX

MOV AL,[BX]将键值作为偏移和键值基地址相加得到相应的键值

MOV DX,PB55

OUT DX,AL 写入数码管A~Dp

CALL DALLY

INC SI 取下一个键值

POP DX

MOV AL,DL

TEST AL,01H 判断是否显示完?

JZ OUT1 显示完,返回

ROR AL,1

MOV DL,AL

JMP AGAIN 未显示完,跳回继续

OUT1: POP AX

RET

DIS ENDP

AD0809 PROC NEAR 将IN0结果保存于bl中

MOV DX,ADC0809 启动0809的IN0

OUT DX,AL

AD1: MOV DX,PC55

IN AL,DX

CMP AL,80H

JB AD1

MOV DX,ADC0809

IN AL,DX

MOV AD,AL

MOV AH,AL

AND AL,0FH

MOV SI,3000H

MOV [SI],AL

MOV CL,4

SHR AH,CL

MOV [SI+1],AH

CALL DIS

RET

AD0809 ENDP

CLK PROC NEAR 方波CLK时钟18.432K子程序

****初始化8254计数器0工作在方式3,以十进制计数,初值为100*******

PUSH DX 保护现场

PUSH AX 保护现场

MOV DX,TCTL

MOV AL,17H 0001 0111B

OUT DX,AL

MOV DX,TIMER0 装初值100

MOV AL,100D

OUT DX,AL

POP AX 恢复现场

POP DX 恢复现场

RET

CLK ENDP

FANG1K PROC NEAR 方波1KHz子程序

***初始化8254计数器1工作在方式3,以十进制计数 踔滴?84******

PUSH DX 保护现场

PUSH AX 保护现场

MOV DX,TCTL

MOV AL,56H 0101 0110B

OUT DX,AL

MOV DX,TIMER1

MOV AL,184

OUT DX,AL

MOV DL,0FFH 判断主键盘有无键按下

MOV AH,6

INT 21H

POP AX 恢复现场

POP DX 恢复现场

RET

FANG1K ENDP

FANG500 PROC NEAR 方波500Hz子程序

***初始化8254计数器1工作在方式3,以十进制计数,初值为368******

PUSH DX 保护现场

PUSH AX 保护现场

MOV DX,TCTL

MOV AL,76H 0111 0110B

OUT DX,AL

MOV DX,TIMER1

MOV AL,70H368D分高低位写入

OUT DX,AL

MOV AL,01H

OUT DX,AL

MOV DL,0FFH 判断主键盘有无键按下

MOV AH,6

INT 21H

POP AX 恢复现场

POP DX 恢复现场

RET

FANG500 ENDP

JIETI PROC NEAR 阶梯波子程序

PUSH DX

PUSH AX

J0: MOV AL,00H

J1: MOV DX,DAC0832

OUT DX,AL

CALL JIETIDALLY

ADD AL,33H

CMP AL,0FFH

JNE J1

MOV DL,0FFH 判断主键盘有无键按下

MOV AH,6

INT 21H

JZ J0

POP AX

POP DX

RET

JIETI ENDP

SIN PROC NEAR 正弦波子程序

PUSH AX

PUSH BX

PUSH DX

S1: MOV SI,OFFSET STABLE

MOV CX,64D

S2: MOV AL,[SI]

MOV DX,DAC0832

OUT DX,AL

INC SI

LOOP S2

MOV DL,0FFH 判断主键盘有无键按下

MOV AH,6

INT 21H

JZ S1

POP DX

POP BX

POP AX

RET

SIN ENDP

TIXING PROC NEAR 梯形波子程序

T : MOV AL,7FH

MOV DX,DAC0832

OUT DX,AL

CALL TIXINGDALLY

T2:

MOV DX,DAC0832

OUT DX,AL

DEC AL

CMP AL,00H

JNZ T2

T3:

MOV DX,DAC0832

OUT DX,AL

INC AL

CMP AL,7FH

JNZ T3

MOV DL,0FFH 判断主键盘有无键按下

MOV AH,6

INT 21H

JZ T

RET

TIXING ENDP

****延时子程序**********************

DALLY PROC NEAR

PUSH CX

PUSH AX

MOV CX,4000H

D1: MOV AX,0600H

D2: DEC AX

JNZ D2

LOOP D1

POP AX

POP CX

RET

DALLY ENDP

JIETIDALLY PROC NEAR

PUSH CX

PUSH AX

MOV CX,1000H

DD1: MOV AX,10H

DD2: DEC AX

JNZ DD2

LOOP DD1

POP AX

POP CX

RET

JIETIDALLY ENDP

TIXINGDALLY PROC NEAR

PUSH CX

PUSH AX

MOV CX,1000H

DDD1: MOV AX,0FFH

DDD2: DEC AX

JNZ DDD2

LOOP DDD1

POP AX

POP CX

RET

TIXINGDALLY ENDP

CODE ENDS

END START

IOY0 EQU 0D400H 片选IOY0端口始地址

IOY1 EQU 0D440H 片选IOY1端口始地址

IOY2 EQU 0D480H 片选IOY2端口始地址

IOY3 EQU 0D4C0H 片选IOY3端口始地址

********************************************

ADC0809 EQU IOY0+00H ADC0809端口地址

PA55EQU IOY1+00H 8255的旁铅A口地址

PB55EQU IOY1+04H 8255的B口地址

PC55EQU IOY1+08H 8255的C口地址

PCTLEQU IOY1+0CH 8255的控制寄存器地址

DAC0832 EQU IOY2+00H DAC0832端口地址

TIMER0 EQU IOY3+00H 8254计数器0端口地址

TIMER1 EQU IOY3+04H 8254计数器1端口地址

TIMER2 EQU IOY3+08H 8254计数器2端口地址

TCTLEQU IOY3+0CH 8254控制运没好寄存器端口地址

STACK1 SEGMENT STACK

DW 256 DUP(?)

STACK1 ENDS

DATA SEGMENT

STR1 DB'Please input password:',0AH,0DH,'$'

STR2 DB'The password is not right !!!Please try again!!!',0AH,0DH,'$'

STR3 DB'Welcome to the signal creat machine',0AH,0DH,'Loading ADC0809.....',0AH,0DH,'$'

STR4 DB 'The passward is right',0AH,0DH,'$'

DTABLE DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H 7段数码管的段位值

STABLE DB80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H,0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH,0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E2H,0DAH,0D1H,0C7H,0BCH,0B0H,0A5H,98H,8CH,80H,7FH,73H,67H,5AH,4FH,43H,38H,2EH,25H,1DH,15H,0FH,09H,05H,02H,00H,00H,02H,05H,09H,0FH,15H,1DH,25H,2EH,38H,43H,4FH,5AH,67H,73H,7FH

PASSWORD DB 41H,42H,43H,44H 预设密码

GAO DB 1 DUP (?) 预留显示十位

DIW DB 1 DUP (?) 预留显示个位

PW DB 4 DUP (?) 密码预留

YU DB 20 DUP (?) 预留20个空间存放数据

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

CALL CLK ADC0809 CLK输入

MOV DX,PCTL 初始化8255工作方察族式

MOV AL,88H 1000 1000方式0,A口,B口输出,C口高四位输入

OUT DX,AL

L0: CALL DIS

MOV DX,OFFSET STR1 显示提示信息

MOV AH,9

INT 21H

CALL DIS

*******识别密码***********

L1: MOV CX,4

MOV SI,OFFSET PW

L: MOV AH,01H 输入密码

INT 21H

MOV [SI],AL

INC SI

CMP AL,45H 检测有无E

JZ E

LOOP L

MOV CX,4

MOV SI,OFFSET PASSWORD取PASSWORD的偏移地址

MOV DI,OFFSET PW

TE: MOV AL,[DI]

CMP AL,[SI]

JNE TE1

INC DI

INC SI

LOOP TE

JMP Q

TE1: MOV DX,OFFSET STR2 显示密码错误

MOV AH,9D

INT 21H

JMP L0

E: JMP QUIT

*****启动ADC0809的INO***********

Q: MOV DX,OFFSET STR4

MOV AH,09H

INT 21H

MOV DX, OFFSET STR3 显示提示信息

MOV AH,09H

INT 21H

MOV AH,00H 将AH清零用于加法

MOV CX,20D

L2: MOV DX,ADC0809 启动0809的IN0

OUT DX,AL

L3: CALL DALLY

*****读取EOC的值****************

MOV DX,PC55

IN AL,DX 读C口的值

TEST AL,80H 检测出C7的值是否为1

JZ L3 C7不为1则跳到L3

*****读取0809IN0的值*************

CALL SIN

JMP L0

MOV DX,ADC0809 读取0809IN0的值

IN AL,DX

ADD AH,BL

LOOP L2 求20次数据的和

MOV AL,AH

MOV BL,20D

DIV BL 求采集数据20次的平均值(修改)

MOV BH,AL

MOV BL,AL

MOV CL,04H

SHR AL,CL 取出十位

MOV GAO,AL 存十位的值

MOV AL,BL

AND AL,0FH 取出个位

MOV DIW,AL 存个位的值

CALL DIS 调用数码管显示函数

CALL DIS

MOV AL,BL

CMP AL,15H

JL L4

MOV AL,BL

CMP AL,80H

JL L5

MOV AL,BL

CMP AL,0A0H

JL L6

MOV AL,BL

CMP AL,0C0H

JL L7

CALL FANG1K

JMP L0

L4: CALL JIETI

JMP L0

L5: CALL SIN

JMP L0

L6: CALLTIXING

JMP L0

L7: CALL FANG500

JMP L0

QUIT: MOV AX,4C00H 结束程序退出

INT 21H

DIS PROC NEAR 显示子函数

PUSH AX

PUSH DX

PUSH BX

MOV AL,0EFH 选通位LED 1110 1111

MOV DX,PA55

OUT DX,AL

MOV SI,OFFSET GAO 取个位地址

MOV AL,[SI] 取个位数据

MOV BX,OFFSET DTABLE

AND AX,00FFH

ADD BX,AX

MOV AL,[BX]

MOV DX,PB55

OUT DX,AL

MOV AL,0DFH 选通个位LED 1101 1111

MOV DX,PA55

OUT DX,AL

MOV SI,OFFSET DIW 取个位地址

MOV AL,[SI] 取个位数据

MOV BX,OFFSET DTABLE

AND AX,00FFH

ADD BX,AX

MOV AL,[BX]

MOV DX,PB55

OUT DX,AL

POP BX

POP DX

POP AX

RET

DIS ENDP

CLK PROC NEAR 方波CLK时钟18.432K子程序

****初始化8254计数器0工作在方式3,以十进制计数,初值为100*******

PUSH DX 保护现场

PUSH AX 保护现场

MOV DX,TCTL

MOV AL,17H 0001 0111B

OUT DX,AL

MOV DX,TIMER0 装初值100

MOV AL,100D

OUT DX,AL

POP AX 恢复现场

POP DX 恢复现场

RET

CLK ENDP

FANG1K PROC NEAR 方波1KHz子程序

***初始化8254计数器1工作在方式3,以十进制计数,初值为184******

PUSH DX 保护现场

PUSH AX 保护现场

MOV DX,TCTL

MOV AL,57H 0101 0111B

OUT DX,AL

MOV DX,TIMER1

MOV AL,0B8H184

OUT DX,AL

F: CALL DIS

MOV DL,0FFH 判断主键盘有无键按下

MOV AH,6

INT 21H

JZ F

POP AX 恢复现场

POP DX 恢复现场

RET

FANG1K ENDP

FANG500 PROC NEAR 方波500Hz子程序

***初始化8254计数器1工作在方式3,以十进制计数,初值为368******

PUSH DX 保护现场

PUSH AX 保护现场

MOV DX,TCTL

MOV AL,77H 0111 0111B

OUT DX,AL

MOV DX,TIMER1

MOV AL,70H368D分高低位写入

OUT DX,AL

MOV AL,01H

OUT DX,AL

F1: CALL DIS

MOV DL,0FFH 判断主键盘有无键按下

MOV AH,6

INT 21H

JZ F1

POP AX 恢复现场

POP DX 恢复现场

RET

FANG500 ENDP

JIETI PROC NEAR 阶梯波子程序

PUSH DX

PUSH AX

J0: MOV AL,00HAL=0

J1: MOV DX,DAC0832AL OUT

OUT DX,AL

ADD AL,33H

CALL DALLY1

CMP AL,0FFH

JNE J1

CALL DIS

MOV DL,0FFH 判断主键盘有无键按下

MOV AH,6

INT 21H

JZ J0

POP AX

POP DX

RET

JIETI ENDP

SIN PROC NEAR 正弦波子程序

PUSH AX

PUSH BX

PUSH DX

S0: MOV BX,10H

S1: MOV SI,OFFSET STABLE

MOV CX,64D

S2: MOV AL,[SI]

MOV DX,DAC0832

OUT DX,AL

INC SI

LOOP S2

JMP S1

DEC BX

CMP BX,00H

JNE S1

CALL DIS

MOV DL,0FFH 判断主键盘有无键按下

MOV AH,6

INT 21H

JZ S0

POP DX

POP BX

POP AX

RET

SIN ENDP

TIXING PROC NEAR 梯形波子程序

PUSH AX

PUSH DX

PUSH BX

T: MOV BX,10H

MOV AL,00H

MOV DX,DAC0832

OUT DX,AL

T0: MOV AL,33H

T1: MOV DX,DAC0832

OUT DX,AL

INC AL

CMP AL,0FFH

JNE T1

CALL DALLY1

T2: OUT DX,AL

DEC AL

CMP AL,33H

JNE T2

DEC BX

CMP BX,00H

JNE T0

CALL DIS

MOV DL,0FFH 判断主键盘有无键按下

MOV AH,6

INT 21H

JZ T

POP BX

POP DX

POP AX

RET

TIXING ENDP

****延时子程序**********************

DALLY1 PROC NEAR

PUSH CX

PUSH AX

MOV CX,1000H

D1: MOV AX,0100H

D2: DEC AX

JNZ D2

LOOP D1

POP AX

POP CX

RET

DALLY1 ENDP

DALLY PROC NEAR

PUSH CX

PUSH AX

MOV CX,4000H

D3: MOV AX,0600H

D4: DEC AX

JNZ D4

LOOP D3

POP AX

POP CX

RET

DALLY ENDP

CODE ENDS

END START


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12411113.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存