简单的响铃程序(汇编实现)

响铃程序

输入一个个位数N,然后响铃N次(响铃的ASCII值为07) 

 

DATAS SEGMENT
    
    MESSAGE DB 
' PLEASE INPUT A NUMBER TO RING$ '   
DATAS ENDS

STACKS SEGMENT
    STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    PRINT:  MOV AL,
9
        LEA DX,MESSAGE
        INT 
21
        
        MOV AH,01H  
        INT 21H
        
        CMP AL,3AH  
        JGE PRINT       
         
         CMP AL,30H      
        JL PRINT      
        
        MOV CX,0000H
        AND AX,00FFH
        MOV CL,AL
        SUB CX,30H
        MOV DL,01H
AGAIN:  MOV AH,02H
        INT 21H
        LOOP AGAIN
    
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的STC89C51单片机汇编语言电子闹钟程序实现了基本的闹钟功能: ``` ; STC89C51电子闹钟程序 ; 使用P0口控制LED数码管显示时间 ; 使用P3口控制蜂鸣器响铃 ; 定义常量 DATABUS equ P0 ; 数据总线 ADDRBUS equ P2 ; 地址总线 ; 定义闹钟时间,BCD码格式 ALARM_HOUR equ 08H ; 闹钟小时 ALARM_MINUTE equ 30H ; 闹钟分钟 ; 定义延时函数 DELAY PROC MOV R7, #20 DELAY_LOOP: DJNZ R7, DELAY_LOOP RET DELAY ENDP ; 定义LED数码管显示函数 DISPLAY PROC MOV A, DATABUS MOV ADDR, #00H MOV ADDRBUS, #0FFH MOV ADDRBUS, #01H RET DISPLAY ENDP ; 定义闹钟触发函数 ALARM PROC SETB P3.5 ; 控制蜂鸣器响铃 CALL DELAY ; 延时 CLR P3.5 ; 停止蜂鸣器响铃 RET ALARM ENDP ; 定义主程序 MAIN: MOV TMOD, #01H ; 定时器T0工作在模式1 MOV TH0, #0F8H ; 定时器T0初值 MOV TL0, #0D8H ; 定时器T0初值 SETB TR0 ; 启动定时器T0 MAIN_LOOP: MOV A, TH0 ; 读取定时器T0高8位 CJNE A, #0F8H, MAIN_LOOP ; 等待1ms MOV A, TL0 ; 读取定时器T0低8位 CJNE A, #0D8H, MAIN_LOOP ; 等待1ms ; 读取时钟时间,BCD码格式 MOV ADDR, #02H ; 选择时钟寄存器 MOV ADDRBUS, #080H ; 读取时钟小时 MOV R0, DATABUS MOV ADDRBUS, #081H ; 读取时钟分钟 MOV R1, DATABUS ; 显示时钟时间 MOV A, R0 ; 显示时钟小时 ANL A, #0FH ; 取低4位 MOV DATABUS, A CALL DISPLAY MOV A, R0 ; 显示时钟小时 SWAP A ; 将高低4位交换 ANL A, #0FH ; 取低4位 MOV DATABUS, A CALL DISPLAY MOV A, R1 ; 显示时钟分钟 ANL A, #0FH ; 取低4位 MOV DATABUS, A CALL DISPLAY MOV A, R1 ; 显示时钟分钟 SWAP A ; 将高低4位交换 ANL A, #0FH ; 取低4位 MOV DATABUS, A CALL DISPLAY ; 检测闹钟时间 MOV A, R0 ; 读取时钟小时 CJNE A, #ALARM_HOUR, MAIN_LOOP ; 与闹钟小时比较 MOV A, R1 ; 读取时钟分钟 CJNE A, #ALARM_MINUTE, MAIN_LOOP ; 与闹钟分钟比较 ; 闹钟触发 CALL ALARM SJMP MAIN_LOOP ; 继续循环 END ``` 需要注意的是,该程序中使用了定时器T0来实现精确的1ms延时,以保证时钟时间的准确性。同时,程序中还定义了LED数码管显示函数和闹钟触发函数,方便进行模块化设计和调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值