?? e800.asm
字號:
;***************************************
;* 無線收發(fā)實驗 *
;* D0:CS選擇頻道,0-頻道1,1-頻道2 *
;* D1:POWR UP 0-待機,1-加電 *
;* D2:TXEN 0-接受模式, 1-發(fā)送模式 *
;***************************************
data segment
ioport equ 0e800h-0280h;0e800
io8253a equ ioport+280h
io8253b equ ioport+281h
io8253d equ ioport+283h
io8251a equ ioport+288h
io8251b equ ioport+289h
io273 equ ioport+290h
mes1 db 'you can play a key on the keybord!',0dh,0ah,,24h
mes2 db 'receive mode!',0dh,0ah,24h
mes3 db 'please press the key T or R ,',0dh,0ah
db 'T is transmit mode,R is receive mode !',0dh,0ah,24h
data ends
stacks segment
db 100 dup(?)
stacks ends
code segment
assume cs:code,ds:data,SS:STACKS,es:data
start: mov ax,data
mov ds,ax
mov es,ax
mov ax,stacks
mov ss,ax
;************************;
;*8251串行通訊 *;
;************************;
mov dx,io8253d ;設置8253計數(shù)器0工作方式
mov al,16h
out dx,al
mov dx,io8253a
mov al,52 ;給8253計數(shù)器0送初值
out dx,al
; jmp a1
mov dx,io8251b ;初始化8251
xor al,al
mov cx,03 ;向8251控制端口送3個0
delay: call out1
loop delay
mov al,40h ;向8251控制端口送40H,使其復位
call out1
mov al,4eh ;設置為1個停止位,8個數(shù)據(jù)位,波特率因子為16
call out1
mov al,27h ;向8251送控制字允許其發(fā)送和接收
call out1
mov dx,io273
mov al,01h
out dx,al ;nrf401 待機
tishi: mov dx,offset mes3 ;顯示提示信息
mov ah,09
int 21h
mov ah,01 ;是,從鍵盤上讀一字符
int 21h
cmp al,54h
jz trins
cmp al,74h
jz trins
cmp al,52h
jz rece
cmp al,72h
jz rece
jmp tishi
;以下位發(fā)送程序
trins: mov dx,io273
mov al,06h
out dx,al ;發(fā)送模式
; call delay5ms
mov dx,offset mes1 ;顯示提示信息
mov ah,09
int 21h
trins1: mov ah,01 ;是,從鍵盤上讀一字符
int 21h
mov bl,al
waiti: mov dx,io8251b
in al,dx
test al,01 ;發(fā)送是否準備好
jz waiti
wait2: mov dx,io8251a
mov al,bl
out dx,al ;發(fā)送
cmp al,1bh ;若為ESC,結束
jz exit
mov cx,0fF00h
s51: loop s51 ;延時
jmp trins1;waiti
;以下為接收程序
rece: mov dx,io273
mov al,02h
out dx,al ;轉為接收模式
; call delay5ms
mov dx,offset mes2 ;顯示提示信息
mov ah,09
int 21h
wait1: mov ah,01 ;有無鍵按下
int 16h
jne exit ;有鍵按下退出
next: mov dx,io8251b
in al,dx
test al,02 ;檢查接收是否準備好
jz wait1 ;沒有,等待
mov dx,io8251a
in al,dx ;準備好,接收
mov dl,al
mov ah,02 ;將接收到的字符顯示在屏幕上
int 21h
jmp wait1 ;接收
exit: mov ah,4ch ;退出
int 21h
out1 proc near ;向8251送一字節(jié)的子程序
out dx,al
push cx
mov cx,5000h
gg: loop gg ;延時
pop cx
ret
out1 endp
delay5ms proc near
mov dx,io8253d ;設置8253計數(shù)器1工作方式
mov al,70h
out dx,al
mov dx,io8253b
mov al,0fh ;給8253計數(shù)器1送初值,低字節(jié)
out dx,al
mov al,14h
out dx,al ;給8253計數(shù)器1送初值,高字節(jié),總值5000
suocun: mov dx,io8253d ;設置8253計數(shù)器1鎖存
mov al,40h
out dx,al
mov dx,io8253b
in al,dx
mov bl,al
in al,dx
mov bh,al
cmp al,00
jnz suocun
; mov al,bl
; cmp al,00
; jnz suocun
ret
delay5ms endp
code ends
end start
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -