用汇编语言实现80c51 Int0 外部事件中断引脚接一个按钮;(2)P0 口接8位 D/A;(3)Int0中断时,D/A输出一个方波;(4)可输出其它波形(可选项)
时间: 2024-01-21 16:02:09 浏览: 59
外中断(80C51单片机汇编语言编程)
以下是实现80c51 Int0 外部事件中断引脚接一个按钮,P0口接8位D/A,并在Int0中断时D/A输出一个方波的汇编语言代码:
```
ORG 0H ;程序起始地址
MOV P0, #00H ;初始化P0口输出为低电平
MOV TMOD, #01H ;使用定时器0,工作在模式1(16位定时器模式)
MOV TH0, #0FFH ;定时器初值设为0xFFFF
MOV TL0, #0FFH
SETB IT0 ;设置Int0为下降沿触发方式
SETB EA ;开启总中断
WAIT: SJMP WAIT ;等待Int0中断
ORG 03H ;Int0中断向量地址
MOV P0, #FFH ;P0口输出高电平
MOV A, #55H ;A寄存器存储输出的方波的占空比
ACALL WAVEFORM ;调用WAVEFORM子程序输出方波
CLR EX0 ;清除Int0中断标志位
RET ;返回主程序
WAVEFORM:
PUSH ACC ;保存现场
MOV R1, #08H ;循环8次,输出8位D/A
LOOP:
MOV P0, A ;输出D/A的值
SETB P3.5 ;输出方波高电平
ACALL DELAY ;延时一段时间
CLR P3.5 ;输出方波低电平
ACALL DELAY
RR A, #1 ;右移一位,改变输出D/A的值
DJNZ R1, LOOP ;循环8次
POP ACC ;恢复现场
RET
DELAY:
MOV R2, #0FFH ;延时计数器初值设为0xFF
MOV R3, #0FFH
DJNZ R2, $ ;循环延时
DJNZ R3, DELAY
RET
```
其中,WAVEFORM子程序用于输出方波,可以根据需要修改实现其它波形的输出。DELAY子程序用于实现延时,可以根据需要修改实现不同的延时时间。
阅读全文