1樓:匿名使用者
ioy0 equ 0d400h ;片選ioy0埠始位址
ioy1 equ 0d440h ;片選ioy1埠始位址
ioy2 equ 0d480h ;片選ioy2埠始位址
ioy3 equ 0d4c0h ;片選ioy3埠始位址
;********************************************
adc0809 equ ioy0+00h ;adc0809埠位址
pa55 equ ioy1+00h ;8255的a口位址
pb55 equ ioy1+04h ;8255的b口位址
pc55 equ ioy1+08h ;8255的c口位址
pctl equ 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埠位址
tctl equ 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 db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h ;7段數碼管的段位值
stable db 80h,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: call tixing
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
retdis 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 ;恢復現場
retclk 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,0b8h;184
out dx,al
f: call dis
mov dl,0ffh ;判斷主鍵盤有無鍵按下
mov ah,6
int 21h
jz f
pop ax ;恢復現場
pop dx ;恢復現場
retfang1k 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,70h ;368d分高低位寫入
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 ;恢復現場
retfang500 endp
jieti proc near ;階梯波子程式
push dx
push ax
j0: mov al,00h;al=0
j1: mov dx,dac0832;al 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
retjieti 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
retsin 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
rettixing 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
retdally1 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
retdally endp
code ends
end start
用組合語言編寫求數的平均數,用組合語言編寫求三個數的平均數
孟靜渠思雨 data segmentxdw 345y dw234zdw 234m dw897ndw 999 定義五個數rdw 2dup 儲存結果 data ends code segment assume cs code,ds data start movax,data movds,ax movax...
用組合語言編寫延時1S的子程式,用組合語言編寫乙個延時1S的子程式
湯旺河邊 本程式通過編譯,執行正確 code segment assume cs code,ds code subroutine 延時指定的時鐘嘀嗒數 入口 didas 時鐘嘀嗒數 1秒鐘約嘀嗒18.2次,10秒鐘嘀嗒182次。若延時不是秒的10數次倍,誤差稍微大點 delay1s proc nea...
用組合語言編寫簡單程式,用組合語言編寫一個簡單程式
sweet馮 1.計算u x y z 100 w 其中 x,y,z,w均為十六位有符號數。程式如下 data segment x dw 10 16位變數 y dw 20 z dw 30 w dw 40 u dw data ends code segment assume cs code,ds dat...