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

📄 dac0832.asm

📁 单片机开发板源程序适合初学者 第二部分DA转换输出
💻 ASM
字号:
;实验名称:串口发送一个要输出的电压(00--FF)
;  功能:模数转换输出一个当前串口发出的电压
;输出的电压为V=5*KK/255。其中KK为串口接收到的二进制数
;  作者:http://www.mcuprog.com
;        05-02-01
;***********************************************************
;***********************************************************
E		BIT	P2.2		;LCD口线的定义
RW		BIT	P2.1
RS		BIT	P2.0
LCDPORT		EQU	P0

;DAC0832的引脚
DAC_WR		BIT	P3.4
DAC_CS		BIT	P3.3

CMD_BYTE	EQU	2EH
DAT_BYTE	EQU	2FH
DABL		EQU	30H		;当前DA的变量(00到255间),从串口接收
LEDBAI		EQU	31H		;显示的百
LEDSHI		EQU	32H		;显示的十
LEDGE		EQU	33H		;显示的个
KEYTIME		EQU	35H


KEYBIT		BIT	00H		;
RS232OKBIT	BIT	01H		;串口接收到数据
		ORG	0000H
		AJMP	MAIN
		ORG	000BH	
		AJMP	TIME0_1
		ORG	0023H
RS232:		CLR	RI
		MOV	A,SBUF
		MOV	DABL,A
		SETB	RS232OKBIT
		RETI
		
;以下为主程序的开始
		ORG	0030H
MAIN:		MOV	20H,#00H
		LCALL	INITLCD
		MOV	DABL,#20
		MOV	KEYTIME,#04H
		MOV	CMD_BYTE,#80H		//设置DDRAM的地址
		LCALL	WRITE_CMD
		LCALL	DELAY0
		MOV	DAT_BYTE,#"D"
		LCALL	WRITE_DAT
		MOV	DAT_BYTE,#"A"
		LCALL	WRITE_DAT
		MOV	DAT_BYTE,#"C"
		LCALL	WRITE_DAT
		MOV	DAT_BYTE,#":"
		LCALL	WRITE_DAT
		MOV	TH0,#0EEH	;16位的定时器,定时5MS
		MOV	TL0,#00H
		MOV	TMOD,#21H
		MOV	TH1,#0FDH	;波特率9600
		MOV	TL1,#0FDH	
		MOV	SCON,#50H
		SETB	TR1
		SETB	REN		
		SETB	TR0
		MOV	IE,#92H		;定时器0中断
		SETB	RS232OKBIT
		SJMP	$

		ORG	0100H
TIME0_1:	MOV	TH0,#0EEH
		MOV	TL0,#00H
		DJNZ	KEYTIME,TIME0_RE
		MOV	KEYTIME,#04H
		MOV	P1,#0DFH
		LCALL	KEYSCAN
		LCALL	DAC0832
		LCALL	JSDPBL
		LCALL	DISPDPBL	
TIME0_RE:	RETI

;按键扫描
KEYSCAN:	MOV	P1,#0FFH
NEXT_UP:	JB	P1.0,NEXT_DN		;+键		
		JB	KEYBIT,SCAN_RE
		SETB	KEYBIT
		INC	DABL
		MOV	A,DABL
		CJNE	A,#201,SCAN_RE		;大于200反回20
		MOV	DABL,#10
		AJMP	SCAN_RE
NEXT_DN:	JB	P1.1,NEXT_NC		;-键
		JB	KEYBIT,SCAN_RE
		SETB	KEYBIT
		DEC	DABL
		MOV	A,DABL
		CJNE	A,#19,SCAN_RE		;小于20反回200
		MOV	DABL,#200		
		AJMP	SCAN_RE	
NEXT_NC:	CLR	KEYBIT			;清标志用于等待下一次按键
SCAN_RE:	MOV	P1,#0FFH
		RET


;以下为AD转换程序
DAC0832	:	CLR	DAC_CS
		MOV	A,DABL
		MOV	P0,A
		CLR	DAC_WR
		NOP
		NOP
		SETB	DAC_WR
		SETB	DAC_CS			
		RET

;LCD1602要用到的一些子程序
;写命令(入口参数CMD_BYTE)
WRITE_CMD:	CLR	RS
		CLR	RW
		MOV	A,CMD_BYTE
		MOV	LCDPORT,A
		SETB	E
		NOP
		NOP
		CLR	E
		LCALL	DELAY0
		RET

;写显示数据(入口参数DAT_BYTE)
WRITE_DAT:	SETB	RS
		CLR	RW
		MOV	A,DAT_BYTE
		MOV	LCDPORT,A
		SETB	E
		NOP
		NOP
		CLR	E
		LCALL	DELAY0
		RET

;LCD显示初始化
INITLCD:	MOV	CMD_BYTE,#30H
		LCALL	WRITE_CMD
		MOV	CMD_BYTE,#30H
		LCALL	WRITE_CMD
		MOV	CMD_BYTE,#30H
		LCALL	WRITE_CMD
		MOV	CMD_BYTE,#38H		;设定工作方式
		LCALL	WRITE_CMD
		MOV	CMD_BYTE,#0CH		;显示状态设置
		LCALL	WRITE_CMD
		MOV	CMD_BYTE,#01H		;清屏
		LCALL	WRITE_CMD
		MOV	CMD_BYTE,#06H		;输入方式设置
		LCALL	WRITE_CMD		
		RET
;延时子程序
DELAY0:		MOV	R5,#0A0H
DELAY1:		NOP
		DJNZ	R5,DELAY1
		RET

;显示变量
DISPDPBL:	MOV	CMD_BYTE,#85H		//设置DDRAM的地址
		LCALL	WRITE_CMD
		MOV	DAT_BYTE,LEDBAI
		LCALL	WRITE_DAT
		MOV	DAT_BYTE,LEDSHI
		LCALL	WRITE_DAT
		MOV	DAT_BYTE,LEDGE
		LCALL	WRITE_DAT
		RET

;计算显示的值
JSDPBL:		MOV	A,DABL
		MOV	B,#64H
		DIV	AB
		ORL	A,#30H
		MOV	LEDBAI,A
		MOV	A,B
		MOV	B,#0AH
		DIV	AB
		ORL	A,#30H
		MOV	LEDSHI,A
		MOV	A,B
		ORL	A,#30H
		MOV	LEDGE,A	
		RET			
		END	

⌨️ 快捷键说明

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