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

📄 无线收发实验.asm

📁 51单片机控制nrf401程序
💻 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 + -