简单的A/D

源代码在线查看: 简单的ad,da转换程序.txt

软件大小: 3 K
上传用户: hxyw
关键词:
下载地址: 免注册下载 普通下载 VIP

相关代码

				简单的A/D,D/A转换程序
				一 设计要求:
				1.   以8031为主控器组成A/D,D/A转换系统。
				2.   对任意波形的脉冲信号进行A/D转换后进入数据存储器,要求能够存储5~10个周波,然后定时将数据经D/A转换输出示波器显示。
				3.   采样的频率可由键盘有级调节。
				二 课程设计条件:
				硬件:个人PC一台,8051单片机仿真头一个,89S51单片机一个,ADC0809芯片一块,DAC0832芯片一块,7402一个,LM358一片,按键开关5个,电阻电容若干,6M晶振一个,稳压电源,函数信号发生器,及示波器个一个
				软件:PC机WINDOWS操作系统,KEIL单片机仿真调试软件
				
				三 设计思想:
				通过ADC0809将正弦波模拟信号按照一定的频率进行采样,频率由键盘进行串级控制,转换成数字量,然后存储到8155的RAM里面,再将数据输出到DAC0832,将数字量转化成模拟量,经过LM358将信号放大,送到示波器终端循环显示出来
				
				BUFFRE EQU 31H ;采样频率设置单元
				BUFRAM EQU 7E00H ;8155RAM首地址
				BUFADC EQU 0FD1FH ;0809启动地址
				BUFDAC EQU 0BFFH   ;0832启动地址
				K1 EQU P1.4     ; 四个频率选择按键
				K2 EQU P1.5
				K3 EQU P1.6
				K4 EQU P1.7
				
				ORG 0000H
				LJMP START
				ORG 0030H
				START: MOV R4,#02   ;由于8155的复位时间比8051慢,所以在对8155初始化之前必须有延时
				  DEL11:MOV R6,#200   ; 延时为021s的倍
				  DEL21:MOV R7,#126
				  DEL31:DJNZ R7,DEL31
				  DJNZ R6,DEL21
				  DJNZ R5,DEL11
				  
				    
				MOV DPTR,#7FF8H   ; 8155初始化
				MOV A,#00H       ; 写入命令字
				MOVX @DPTR,A
				
				MOV R0,#0FAH
				MOV DPTR,#BUFRAM
				LOOP:MOVX @DPTR,A     ;对8155RAM清零
				INC DPTR
				DJNZ R0,LOOP
				
				
				FRESET:MOV P1,#0FFH   ;准备读取P1 口状态
				  JB K1,NEXT1       ; 依次判断按下了哪一个按键
				  MOV BUFFRE,#02H     ;送相应的频率设置到31内存单元
				LJMP INPUT
				NEXT1:JB K2,NEXT2
				MOV BUFFRE,#04H
				LJMP INPUT
				NEXT2:JB K3,NEXT3
				  MOV BUFFRE,#08H
				  LJMP INPUT
				NEXT3:JB K4,NEXT4
				  MOV BUFFRE,#06H
				  LJMP REALIO   ;如果是K4按下,则进行实时输入输出
				NEXT4:LJMP FRESET   ; 循环等待按键按下
				
				INPUT:           ; A/D采样程序
				MOV R0,#0FAH     ;共采集250个数据
				MOV DPTR,#BUFRAM   ; 8155RAM首地址
				LOOP1:PUSH DPL   ; 先保存次地址
				  PUSH DPH
				  MOV DPTR,#BUFADC   ; 0809启动地址
				  MOV A,#00H
				  MOVX @DPTR,A     ; 启动0809 A/D转换开始
				  NOP         ; 一定时间延时
				  NOP 
				WAIT:JB P1.0,WAIT   ; 等待转换结束
				MOVX A,@DPTR       ;读取转换结果
				POP DPH
				POP DPL       ;恢复RAM地址
				MOVX @DPTR,A     ; 保存数据至8155RAM
				INC DPTR       ;RAM地址加一,指向下一个存储单元
				ACALL DELAY       ; 延时,即以一定频率采样
				DJNZ R0,LOOP1     ; 250个数据是否采集完成,否则继续
				
				OUTPUT:       ; D/A转换模块
				  MOV R1,#0FAH     ;250个数据
				  MOV DPTR,#BUFRAM   ; 8155RAM首地址
				LOOP2: PUSH DPL   ; 保存此地址
				  PUSH DPH
				  MOVX A,@DPTR     ;将数据输出到A中
				  MOV DPTR,#BUFDAC   ; 0832地址
				  MOVX @DPTR,A     ;将数据输出进行D/A转换
				  NOP         ;为了与采样频率一直,设定一定延时
				  NOP
				  POP DPH       ;恢复RAM地址
				  POP DPL
				  INC DPTR       ;指向下一个要转换的数据单元
				  ACALL DELAY     ; 与采样相同延时
				  DJNZ R1,LOOP2     ; 直道转换完成
				
				WAIT2:JNB K4,NEXT
				
				  LJMP OUTPUT   ;循环显示输出结果
				
				NEXT:LJMP REALIO
				
				DELAY:MOV R5,BUFFRE   ;延时程序,通过R5的不同,改变延时时间,从而改变
				  DEL1:MOV R6,#2   ; 延时为0.001s的倍
				  DEL2:MOV R7,#126
				  DEL3:DJNZ R7,DEL3
				  DJNZ R6,DEL2
				  DJNZ R5,DEL1
				  RET
				
				
				REALIO:         ;实时显示程序
				MOV DPTR,#BUFADC   
				MOV A,#00H
				MOVX @DPTR,A     
				NOP         
				NOP 
				WAIT1:JB P1.0,WAIT1   
				MOVX A,@DPTR       
				MOV DPTR,#BUFDAC   
				MOVX @DPTR,A     
				NOP       
				NOP
				
				FRESET1:MOV P1,#0FFH   ;准备读取P1 口状态
				  JB K1,NEXT11       ; 依次判断按下了哪一个按键
				  MOV BUFFRE,#02H     ;送相应的频率设置到31内存单元
				  LJMP INPUT
				NEXT11:JB K2,NEXT12
				  MOV BUFFRE,#04H
				  LJMP INPUT
				NEXT12:JB K3,NEXT13
				  MOV BUFFRE,#08H
				  LJMP INPUT
				NEXT13:LJMP REALIO
				
				END
				
				八 使用说明
				1.上电复位或者按键复位后,程序开始运行后,等待K1-K4的按键被按下,根据按下的键值作不同的处理。
				2.如果被按下的是K1-K3键,则根据按下的键分别设置不同的采样频率,然后开始进行A/D转换进行信号的采样,再存储至8155的RAM中,如果存储完了250个数据,则自动开始进行数据的D/A输出,在示波器上可以看到相应的波形,数据是循环输出的,所以可以一直看到数据输出!
				3.如果是按键K4被按下,则进行的是实时的采样输入输出,即将信号通过ADC0809采样进来,不保存至8155的RAM中,就立即送到DAC0832输出到示波器显示,这样的信号基本上就是原来的信号波形。
				4.在K1-K3按下后正常的采样,存储,输出过程中,也可以按下K4键而转到实时的输入输出程序,便于将采样数据和原数据进行对照。
				5.在实时的输入输出时,也可以同过按下K1-K3键,立即切换到原来的一定频率采样,存储,输出过程。
				6.硬件设计上还有一个复位键,可以对程序进行按键复位(汇编,已经实验通过)
				
				简单的A/D,D/A转换程序
				
				此程序是我做单片机课程设计的程序,PROTEL原理图在附件里
				程序经过了实验的测试,没有任何问题,
				一 设计要求:
				1.   以8031为主控器组成A/D,D/A转换系统。
				2.   对任意波形的脉冲信号进行A/D转换后进入数据存储器,要求能够存储5~10个周波,然后定时将数据经D/A转换输出示波器显示。
				3.   采样的频率可由键盘有级调节。
				
				二 课程设计条件:
				硬件:个人PC一台,8051单片机仿真头一个,89S51单片机一个,ADC0809芯片一块,DAC0832芯片一块,7402一个,LM358一片,按键开关5个,电阻电容若干,6M晶振一个,稳压电源,函数信号发生器,及示波器个一个
				软件:PC机WINDOWS操作系统,KEIL单片机仿真调试软件
				
				三 设计思想:
				通过ADC0809将正弦波模拟信号按照一定的频率进行采样,频率由键盘进行串级控制,转换成数字量,然后存储到8155的RAM里面,再将数据输出到DAC0832,将数字量转化成模拟量,经过LM358将信号放大,送到示波器终端循环显示出来
				
				BUFFRE EQU 31H ;采样频率设置单元
				BUFRAM EQU 7E00H ;8155RAM首地址
				BUFADC EQU 0FD1FH ;0809启动地址
				BUFDAC EQU 0BFFH   ;0832启动地址
				K1 EQU P1.4     ; 四个频率选择按键
				K2 EQU P1.5
				K3 EQU P1.6
				K4 EQU P1.7
				
				ORG 0000H
				LJMP START
				ORG 0030H
				START: MOV R4,#02   ;由于8155的复位时间比8051慢,所以在对8155初始化之前必须有延时
				  DEL11:MOV R6,#200   ; 延时为021s的倍
				  DEL21:MOV R7,#126
				  DEL31:DJNZ R7,DEL31
				  DJNZ R6,DEL21
				  DJNZ R5,DEL11
				  
				    
				MOV DPTR,#7FF8H   ; 8155初始化
				MOV A,#00H       ; 写入命令字
				MOVX @DPTR,A
				
				MOV R0,#0FAH
				MOV DPTR,#BUFRAM
				LOOP:MOVX @DPTR,A     ;对8155RAM清零
				INC DPTR
				DJNZ R0,LOOP
				
				
				FRESET:MOV P1,#0FFH   ;准备读取P1 口状态
				  JB K1,NEXT1       ; 依次判断按下了哪一个按键
				  MOV BUFFRE,#02H     ;送相应的频率设置到31内存单元
				LJMP INPUT
				NEXT1:JB K2,NEXT2
				MOV BUFFRE,#04H
				LJMP INPUT
				NEXT2:JB K3,NEXT3
				  MOV BUFFRE,#08H
				  LJMP INPUT
				NEXT3:JB K4,NEXT4
				  MOV BUFFRE,#06H
				  LJMP REALIO   ;如果是K4按下,则进行实时输入输出
				NEXT4:LJMP FRESET   ; 循环等待按键按下
				
				INPUT:           ; A/D采样程序
				MOV R0,#0FAH     ;共采集250个数据
				MOV DPTR,#BUFRAM   ; 8155RAM首地址
				LOOP1:PUSH DPL   ; 先保存次地址
				  PUSH DPH
				  MOV DPTR,#BUFADC   ; 0809启动地址
				  MOV A,#00H
				  MOVX @DPTR,A     ; 启动0809 A/D转换开始
				  NOP         ; 一定时间延时
				  NOP 
				WAIT:JB P1.0,WAIT   ; 等待转换结束
				MOVX A,@DPTR       ;读取转换结果
				POP DPH
				POP DPL       ;恢复RAM地址
				MOVX @DPTR,A     ; 保存数据至8155RAM
				INC DPTR       ;RAM地址加一,指向下一个存储单元
				ACALL DELAY       ; 延时,即以一定频率采样
				DJNZ R0,LOOP1     ; 250个数据是否采集完成,否则继续
				
				OUTPUT:       ; D/A转换模块
				  MOV R1,#0FAH     ;250个数据
				  MOV DPTR,#BUFRAM   ; 8155RAM首地址
				LOOP2: PUSH DPL   ; 保存此地址
				  PUSH DPH
				  MOVX A,@DPTR     ;将数据输出到A中
				  MOV DPTR,#BUFDAC   ; 0832地址
				  MOVX @DPTR,A     ;将数据输出进行D/A转换
				  NOP         ;为了与采样频率一直,设定一定延时
				  NOP
				  POP DPH       ;恢复RAM地址
				  POP DPL
				  INC DPTR       ;指向下一个要转换的数据单元
				  ACALL DELAY     ; 与采样相同延时
				  DJNZ R1,LOOP2     ; 直道转换完成
				
				WAIT2:JNB K4,NEXT
				
				  LJMP OUTPUT   ;循环显示输出结果
				
				NEXT:LJMP REALIO
				
				DELAY:MOV R5,BUFFRE   ;延时程序,通过R5的不同,改变延时时间,从而改变
				  DEL1:MOV R6,#2   ; 延时为0.001s的倍
				  DEL2:MOV R7,#126
				  DEL3:DJNZ R7,DEL3
				  DJNZ R6,DEL2
				  DJNZ R5,DEL1
				  RET
				
				
				REALIO:         ;实时显示程序
				MOV DPTR,#BUFADC   
				MOV A,#00H
				MOVX @DPTR,A     
				NOP         
				NOP 
				WAIT1:JB P1.0,WAIT1   
				MOVX A,@DPTR       
				MOV DPTR,#BUFDAC   
				MOVX @DPTR,A     
				NOP       
				NOP
				
				FRESET1:MOV P1,#0FFH   ;准备读取P1 口状态
				  JB K1,NEXT11       ; 依次判断按下了哪一个按键
				  MOV BUFFRE,#02H     ;送相应的频率设置到31内存单元
				  LJMP INPUT
				NEXT11:JB K2,NEXT12
				  MOV BUFFRE,#04H
				  LJMP INPUT
				NEXT12:JB K3,NEXT13
				  MOV BUFFRE,#08H
				  LJMP INPUT
				NEXT13:LJMP REALIO
				
				END
				
				八 使用说明
				1.上电复位或者按键复位后,程序开始运行后,等待K1-K4的按键被按下,根据按下的键值作不同的处理。
				2.如果被按下的是K1-K3键,则根据按下的键分别设置不同的采样频率,然后开始进行A/D转换进行信号的采样,再存储至8155的RAM中,如果存储完了250个数据,则自动开始进行数据的D/A输出,在示波器上可以看到相应的波形,数据是循环输出的,所以可以一直看到数据输出!
				3.如果是按键K4被按下,则进行的是实时的采样输入输出,即将信号通过ADC0809采样进来,不保存至8155的RAM中,就立即送到DAC0832输出到示波器显示,这样的信号基本上就是原来的信号波形。
				4.在K1-K3按下后正常的采样,存储,输出过程中,也可以按下K4键而转到实时的输入输出程序,便于将采样数据和原数据进行对照。
				5.在实时的输入输出时,也可以同过按下K1-K3键,立即切换到原来的一定频率采样,存储,输出过程。
				6.硬件设计上还有一个复位键,可以对程序进行按键复位
							

相关资源