单片机汇编语言基于AT89C52和DAC0808多档数字调压器设计 电压输出显示 举例程序
时间: 2023-06-24 22:04:24 浏览: 96
以下是基于AT89C52和DAC0808的多档数字调压器设计的示例程序:
```
ORG 0H ; 程序从地址0H开始
MOV SP,#30H ; 初始化栈指针
MOV P1,#00H ; 初始化P1口为输出口
MOV P2,#00H ; 初始化P2口为输出口
MAIN:
MOV A,P3 ; 读取P3口的值,即模拟输入电压
ANL A,#0FH ; 将A寄存器的高四位清零
MOV P1,A ; 将经过处理的输入电压输出到P1口
MOV A,P3 ; 读取P3口的值,即模拟输入电压
MOV R0,A ; 将输入电压保存到R0寄存器中
MOV A,#80H ; 初始化DAC0808的控制字节
MOV P2,A ; 将控制字节输出到P2口
ACALL DELAY ; 延时等待DAC0808初始化完成
MOV A,R0 ; 将输入电压从R0寄存器中读出
DIV A,#10H ; 将输入电压除以16,得到需要输入的数字量
MOV R1,A ; 将除法结果保存到R1寄存器中
MOV A,R0 ; 将输入电压从R0寄存器中读出
ANL A,#0FH ; 将A寄存器的高四位清零
MOV R2,A ; 将除法余数保存到R2寄存器中
MOV A,R1 ; 将数字量从R1寄存器中读出
ADD A,#80H ; 将数字量加上128,得到DAC0808的输出数据
MOV P2,A ; 将输出数据输出到P2口
ACALL DELAY ; 延时等待DAC0808输出完成
MOV A,R2 ; 将除法余数从R2寄存器中读出
ADD A,#00H ; 将余数加上0,得到DAC0808的输出数据
MOV P2,A ; 将输出数据输出到P2口
ACALL DELAY ; 延时等待DAC0808输出完成
SJMP MAIN ; 无限循环
DELAY:
MOV R7,#10H ; 初始化计数器
AGAIN:
DJNZ R7,AGAIN ; 计数器减一
RET ; 返回主程序
```
这个程序通过读取P3口的值,即模拟输入电压,经过处理后输出到P1口上。同时,程序通过控制DAC0808芯片的控制字节,将输入电压转换成数字量,然后输出到DAC0808上,从而实现电压输出显示。程序中的DELAY子程序用于延时等待DAC0808初始化和输出完成。
阅读全文