⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 e800.asm

📁 无线通讯源程序
💻 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 + -