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

📄 dasend.asm

📁 A/D转换-数据采集实验 * * A/D转换数据采集程序source file * * 运行步骤:1.在平台板的8位AD通道选择开关上 选定通道号 * * 2.程序运行后
💻 ASM
字号:
;*------------------------------------------------------*
;*    Aexp11.asm  A/D转换-数据采集实验                  *
;*    A/D转换数据采集程序source file                     *
;*    运行步骤:1.在平台板的8位AD通道选择开关上 选定通道号 *
;*             2.程序运行后,转动电位器,观测数据的变化    * 
;*    Copyright (c) 2002 by HUST                        *
;*------------------------------------------------------*
data51 equ 308h                      ;8251A数据口
ctrl51 equ 309h                       ;8251A命令/状态口
ctrl55 equ 303h                       ;8255命令口
timer2 equ 306h                       ;8253的2号计数器端口
timctl  equ 307h                      ;8253的命令口
clk00  equ 12h                       ;8251输入时钟频率(十六进制表示)
clk01  equ 34deh
factor equ 16                          ;波特率因子16

   
sseg segment para stack 'stack'
dw 200 dup (?)
sseg ends
dseg segment para public 'data'
input_message  db 'Please input number of A/D channel'
	       db 0dh,0ah,'$'
error_message  db 'input incorrect A/D channel!',0dh,0ah
	       db 'please input number of A/D channel again:'
	       db '$'
message db 'If you want to quit A/D convert,please press ''ESC'''
	db 0dh,0ah,'$'

temp      db (?)

control dw (?)
bps00 dw (?)
input1_message  db 'now enter the serial communication',0ah,0dh
              db 'end with esc',0ah,0dh
              db 'please input characters to transmit',0dh,0ah,'$'


dseg ends

cseg segment para public 'code'
  assume ss:sseg,cs:cseg,ds:dseg
a_dpo proc far
start:  mov   ax,sseg
	mov   ss,ax
	mov   ax,dseg
	mov   ds,ax

mov bps00,1200                   ;送传输率
      call set_bps
      call init51

   mov  ah,9                  ;显示提示信息	
	mov  dx,seg message
	mov  ds,dx
	mov  dx,offset message
	int  21h
	mov ah,9                   ;提示输入通道号
	mov dx,seg input_message
	mov ds,dx
	mov dx, offset input_message
	int 21h

input:  mov ah,8                 ;检查输入通道号是否有错
	int 21h
	cmp al,'0'
	jb error
	cmp al,'7'
	ja error
	sub al,30h
	mov temp,al                 ;若无错,则保存通道号
	jmp begin

error:  mov ah,9                   ;显示出错信息
	mov dx,seg error_message
	mov ds,dx
	mov dx, offset error_message
	int 21h
	jmp input

begin:  mov dx,30eh                 ;送通道号
	mov al,temp
	out dx,al

	mov cx,0f00h
lop:    loop  lop
	mov dx,30ch                 ;启动A/D转换
	mov al,00
	out dx,al
	mov cx,0f00h                  ;delay
lop1:   loop lop1
	mov ah,0bh                   ;检测是否有ESC键按下
	int 21h
	inc al
	jnz wait1                     ;若无键按下,则查转换结束
	mov ah,8                      ;若有ESC键按下,则程序退出
	int 21h
	cmp al,1bh
	jz  quit
	 
wait1:	mov dx,30ch                   ;查转换结束EOC(EOC=D7)
	in  al,dx
	and al,80h
	jz  wait1                      ;若未结束(D7=0),则等待

read:   mov dx,30eh                   ;若已结束,则读数据
	in  al,dx
	push ax 
mov control,ax                      ;存数据
show:   and al,0f0h                    ;显示高4位
	shr al,4
	cmp al,9
	ja  hex
	add al,30h
	jmp next
hex:    add al,37h
next:   mov dl,al
	mov ah,2
	int 21H
	pop ax
	and al,0fh                    ;显示低4位
	cmp al,9
	ja  hex1
	add al,30h
	jmp next1
hex1:   add al,37h
next1:  mov dl,al
        mov ah,2
	     int 21h

	mov  dl,13                 	;向屏幕送回车符
	mov  ah,2
	int  21h

	mov  dl,10                	;向屏幕送换行符
	mov  ah,2
	int  21h
call main
over:  mov al,0ch                         ; 关PC6=0,关闭8253的GATE2
      mov dx,ctrl55
      out dx,al
	     jmp begin                    ;继续采集
quit:   mov ax,4c00h                 ;程序退出
        int 21h

a_dpo  endp




;*------------------------------------------------------*
;*    Aexp10s.asm  串行接口应用实验-发送端程序           *
;*    串行通信发送程序source file                        *
;*    Copyright (c) 2002 by HUST                        *
;*------------------------------------------------------*
 
     
init51 proc near                      ;8251A初始化子程序
    mov dx,ctrl51                    ;8251A命令口
    xor ax,ax                        ;空操作
    out dx,al
    mov al,40h                       ;8251A内部复位
    call charout
    mov al,4ah                       ;8251A方式命令
    call charout
    mov al,23h                       ;8251A工作命令
    call charout
    ret                              ;返回
init51 endp
    
charout proc near                       ;送数据子程序               
    out dx,al   
    push cx
    mov cx,100                        ;延时
gg: loop gg
    pop cx
    ret
charout endp

set_bps proc near                        ;8253-5计数初值计算与装入子程序
    mov dx,clk00                       ;取8253-5输入时钟频率clk做被除数
    mov ax,clk01                       
    mov bx,bps00                      ;所选波特率做第一个除数
    div bx                             ;除法运算,商数送ax   
    mov dx,0                          ;余数清零
    mov bx,factor                       ;取波特率因子做第二个除数
    div bx                             ;除法运算,的计数初值(商数)送ax
    mov bx,ax                          ;保存计数初值至bx
    mov dx,timctl                       ;8253-5命令口
    mov al,0b6h                         ;8253-5初始化命令
    out dx,al
    mov dx,timer2                       ;8253-5计数器2的端口
    mov ax,bx                          ;取计数初值
    out dx,al                            ;取计数初值低字节
    mov al,ah                           ;取计数初值高字节
    out dx,al
    ret                               ;返回
set_bps endp

main proc near
begin1:
push ax
push bx
push cx
push dx
mov dx,dseg
mov ds,dx
      mov bps00,1200                   ;送传输率
      call set_bps
      call init51
      mov dx,ctrl55                    ;初始化8255A
      mov al,80h
      out dx,al
      mov al,0dh                       ;置PC6=1,打开8253的GATE2输出方波
      out dx,al
      mov dx,seg input1_message           ;提示输入信息
      mov ds,dx
      mov dx,offset input1_message
     ; mov ah,09h
     ; int 21h
m0:  mov cx,0f00h
bb: loop bb
 ;mov ah,0bh                       ;读取键盘
     ; int 21h
     ; cmp al,0                          ;有键按下?
     ; je m0                             ;无键按下等待
      ;mov ah,01h                        ;将字符在CRT上等待
      ;int 21h
     push dx
     mov dx,dseg
     mov ds,dx
    pop dx
     mov ax,[ds]:control
      mov bl,al                          ;保存键值
      ;cmp al,1bh                         ;是否为ESC
      ;jz over                            ;是,则退出
      mov dx,ctrl51  
                      ;不是,则发送数据
m1:   in al,dx
      test al,01                          ;发送准备好?RxRDY=1?
      jz m1                             ;未准备好,则等待
      mov dx,data51                      ;已准备好,则将键入的字符发出去
      mov al,bl
      out dx,al
push dx
mov dx,08ffh
deng:mov cx,0ff00h
aa: loop aa
dec dx
jnz deng
pop dx
;mov cx,0ff00h
;aac: loop aac
;mov cx,0ff00h
;aacd: loop aacd
;mov cx,0ff00h
;aacde: loop aacde
      ;jmp m0                            ;发送完,在转按键发送
;over:  mov al,0ch                         ; 关PC6=0,关闭8253的GATE2
 ;     mov dx,ctrl55
  ;    out dx,al
pop dx
pop cx
pop bx
pop ax   
ret   
main endp


cseg ends
end start



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -