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

📄 soundl.asm

📁 大学微型计算机接口技术实验源代码,直接就可以运行,包含了C++和asm代码,比较前面.
💻 ASM
字号:
;*------------------------------------------------------*/
;*    SoundL.asm(声-光报警器接口实验)                     */
;*    声-光报警器 Source File                            */
;*    Copyright (c) 2001 by HUST                        */
;*		Modify	 Date	2005.4.10										*/
;*------------------------------------------------------*/

stack1  segment
      dw 200 dup (?)
stack1  ends

data  segment para public 'data'
message  db  'press SW3 to start !',0ah,0dh       ;系统提示
         db  'if you want to quit, please hit Any Key!',0ah,0dh,'$'
     t   dw 0                            ;初始化延时变量为0                                                                      
   num   dw 0                            ;初始化数字变量为0 
 data7   db 81h,42h,24h,18h,81h,42h,24h,18h 
data  ends
code  segment para public 'code'
     assume ss:stack1,cs:code,ds:data
sl proc far
start:  mov  ax,stack1
         mov  ss,ax
         mov  ax,data
         mov  ds,ax
         mov  ah,09h                ;显示系统提示
		    mov  dx,seg message
		    mov  ds,dx
		    mov  dx,offset message
		    int  21h
         mov  dx,303h                ;初始化8255
         mov  al,83h                                         
         out  dx,al                    
         mov  dx,300h                ;LED全灭
         mov  al,00h                           
         out  dx,al                           
         mov  dx,303h                ;关闭SPK
         mov  al,0ch         
         out  dx,al
wait1:   mov  dx,302h                 ;查SW3按下?
         in   al,dx                  ;(PC2=0?)
         and  al,04h
         jnz   wait1                  ;未按下,等待
begin:   call  ledflash               ;已按下,调用LED发光子程                   
         mov   bx,200                      
         mov t,0ffffh                              
hison:   call  outspk                 ;调用喇叭发声子程(高频)
         dec   bx
         jnz   hison                               
         mov    dx,300h                  ;LED全灭
         mov   al,00h                  
         out   dx,al               
         mov   bx,200
         mov   t,0afh                                
loson:   call  outspk                  ;调用喇叭发声子程(低频)
         dec   bx
         jnz   loson
         call  delay2
         mov   ah,0bh                   ;查任意键按下?
         int   21h
         cmp   al,0ffh
         je    quit                      ;有任意键按下,退出
         jmp   begin                     ;无任意键按下,继续
quit:    mov  dx,300h                    ;LED全灭  
         mov  al,00h                          
         out  dx,al       
         mov  dx,303h                     ;关闭SPK
         mov  al,0ch
         out  dx,al
         mov  ah,4ch                         
         int  21h                         ;返回DOS
sl endp

delay1 proc                               ;延时子程1
         push  bx
         mov  bx,t
dl1:     dec  bx
	      jnz  dl1
         pop  bx
         ret
delay1 endp 

delay2 proc                               ;延时子程2
         push  cx
         push  bx
         mov  cx,04ffh
dl4:	   mov  bx,0ffffh
dl3:     dec  bx
	 	   jnz  dl3
         dec  cx 
	      jnz  dl4
         pop  bx
         pop  cx
         ret
delay2 endp 

outspk proc                                  ;喇叭发声子程
	       mov dx,303h                       ;从PC6输出方波
	       mov al,0dh                       ;置PC6=1;打开8253
 	       out dx,al                        
	       call delay1
	       mov dx,303h                      
	       mov al,0ch                        ;置PC6=0;关闭8253
	       out dx,al                           
          call delay1
          ret
outspk endp

ledflash  proc                              ;LED发光子程序
         mov  si,offset  data7               ;LED的点亮代码
         add si,num                                                                   
         mov al,[si]                      
         mov dx,300h                          ;从8255的A口输出LED点亮代码
         out dx,al                          
         inc num                                                 
         cmp  num,08h
         jne  next
         mov num,00h
next:    ret
ledflash  endp
code ends
          end start

⌨️ 快捷键说明

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