📄 无线收发实验.asm
字号:
;***************************************
;* 无线收发实验 *
;* D0:CS选择频道,0-频道1,1-频道2 *
;* D1:POWR UP 0-待机,1-加电 *
;* D2:TXEN 0-接受模式, 1-发送模式 *
;***************************************
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计数器0工作方式
mov al,16h
out dx,al
mov dx,io8253a
mov al,52 ;给8253计数器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个数据位,波特率因子为16
call out1
mov al,27h ;向8251送控制字允许其发送和接收
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
;以下位发送程序
trins: mov dx,io273
mov al,06h
out dx,al ;发送模式
; 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 ;发送是否准备好
jz waiti
wait2: mov dx,io8251a
mov al,bl
out dx,al ;发送
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送一字节的子程序
out dx,al
push cx
mov cx,5000h
gg: loop gg ;延时
pop cx
ret
out1 endp
delay5ms proc near
mov dx,io8253d ;设置8253计数器1工作方式
mov al,70h
out dx,al
mov dx,io8253b
mov al,0fh ;给8253计数器1送初值,低字节
out dx,al
mov al,14h
out dx,al ;给8253计数器1送初值,高字节,总值5000
suocun: mov dx,io8253d ;设置8253计数器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 + -