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

📄 wenduchuanganqi.asm

📁 用汇编编写的温度传感器实验代码。适用于8086开发环境。
💻 ASM
字号:

ADPort   equ 09000h  ; AD采样输入片选
OUTBIT   equ 08002h  ; 位控制口
OUTSEG   equ 08004h  ; 段控制口
IN_KEY   equ 08001h  ; 键盘读入口

LowTemp   equ -99    ; A/D 0
HighTemp  equ 99     ; A/D 255

data   segment
LEDBuf  db  6 dup(?) ; 显示缓冲
CurTemp db  0        ; 当前温度
LEDMAP:              ; 八段管显示码
       db    3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h
       db    7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h

data   ends

code   segment
       assume cs:code, ds:data

Delay  proc  near
       push  ax            ; 延时子程序
       push  cx

       mov   al, 0
       mov   cx,ax
       loop  $

       pop   cx
       pop   ax
       ret
Delay  endp

DisplayLED proc near
       mov   bx, offset LEDBuf
       mov   cl, 6         ; 共6个八段管
       mov   ah, 00100000b ; 从左边开始显示
DLoop:
       mov   dx, OUTBIT
       mov   al, 0
       out   dx,al        ; 关所有八段管
       mov   al, [bx]
       mov   dx, OUTSEG
       out   dx,al
       mov   dx, OUTBIT
       mov   al, ah
       out   dx, al       ; 显示一位八段管

       push  ax
       mov   ah, 1
       call  Delay
       pop   ax

       shr   ah, 1
       inc   bx
       dec   cl
       jnz   DLoop

       mov   dx, OUTBIT
       mov   al, 0
       out   dx,al        ; 关所有八段管
       ret
DisplayLED endp


; ===================================

DisplayResult proc near
       mov   al, CurTemp
       test  al, 80h
       jz    GE0

       mov   LEDBuf, 40h ; '-'
       dec  al
       not  al
       jmp   Goon
GE0:
       mov   LEDBuf, 0   ; ' '
Goon:
       mov   cl, 10
       mov   ah, 0
       div   cl

       mov   bl, al
       mov   bh, 0
       add   bx, offset LEDMAP
       mov   al, [bx]
       mov   LEDBuf+1, al

       mov   bl, ah
       mov   bh, 0
       add   bx, offset LEDMAP
       mov   al, [bx]
       mov   LEDBuf+2, al

       mov   LEDBuf+3, 0   ; ' '

       ret
DisplayResult endp

ReadAD proc near
       mov   dx, ADPort
       mov   al, 0
       out   dx, al

       mov   al, 60
rr:
       dec   al           ; delay
       jnz   rr

       mov   dx, ADPort
       in    al, dx
       mov   dl, al
       mov   al, 0ffh
       sub   al, dl
       ret
ReadAD endp

ReadTemp proc near
       mov   bx, 0
       mov   cl, 16
RLoop:
       call  ReadAD
       mov   ah, 0
       add   bx, ax
       dec   cl
       jnz   RLoop

       shr   bx, 4
       mov   ax, bx
       mov   cl, HighTemp - LowTemp
       mul   cl
       mov   al, ah             ; /256
       add   al, LowTemp
       mov   CurTemp, al
       ret
ReadTemp endp

Start  proc near
       mov   ax, data
       mov   ds, ax
MLoop:
       call  DisplayResult
       call  DisplayLED
       call  ReadTemp
       jmp   MLoop


start  endp
code   ends
       end start

⌨️ 快捷键说明

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