视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
实验六 单片机DA输出实验
2025-09-25 18:00:53 责编:小OO
文档
实验五 单片机DA输出实验

1、实验目的

1、了解D/A转换的基本原理。

2、了解D/A转换芯片0832的性能及编程方法。

3、了解单片机系统中扩展D/A转换的基本方法。

二、实验说明

利用DAC0832,编制程序产生锯齿波、三角波、正弦波。三种波轮流显示,用示波器观看。 

3、实验仪器

计算机

伟福实验箱( lab2000P )

示波器 

4、实验内容

1、D/A转换是把数字量转换成模拟量的变换,实验台上D/A电路输出的是模拟电压信号。要实现实验要求,比较简单的方法是产生三个波形的表格,然后通过查表来实现波形显示。

   2、产生锯齿波和三角波的表格只需由数字量的增减来控制,同时要注意三角波要分段来产生。要产生正弦波,较简单的方法是造一张正弦数字量表。即查函数表得到的值转换成十六进制数填表。

   D/A转换取值范围为一个周期,采样点越多,精度越高些。本例采用的采样点为256点/周期。

     3、8位D/A转换器的输入数据与输出电压的关系为

          U(0∽-5V)=Uref/256×N

          U(-5V∽+5V)=2·Uref/256×N-5V   

           (这里 Uref为+5V)

5、思考题

      1、改变输出波形的周期和幅度,缩小或者提高;             

      2、程序改为查表方式输出;如何计算出数据表;

6、源程序修改原理及其仿真结果

思考题一:改变输出波形的周期和幅度,缩小或者提高

CS0832 equ 0a000h

START:         MOV   A, #00H      

           MOV   DPTR, CS0832       ; 0832 的地址送DPTR 

           MOV   R1, #H               ; 台阶数为

LP:            MOVX   @DPTR, A              ; 送数据至 0832 

           CALL   DELAY                 ; 1 ms延时 

           DJNZ   R1, NEXT              ; 不到 10 台阶转移 

           SJMP    START                  ; 产生下一个周期 

NEXT:      ADD   A, #20               ; 台阶增幅

CALL    DELAY                     

            SJMP   LP                       ; 产生下一台阶 

DELAY:     MOV  20H, #249              ; 1 ms延时程序 

上述程序修改了三处,第一,台阶数,当台阶数较多且每个台阶的持续时间减小时输出波形更平滑,更接近钜齿波;第二,台阶增幅,台阶数和台阶增幅都能影响输出波形的振幅,且都与振幅成正比关系,即其他不变台阶数增多振幅增大或者其他不变台阶增幅增大振幅也增大;第三,增加延时,在台阶增幅和产生下一台阶之间增加延时,可以改变钜齿波的周期。

思考题二:程序改为查表方式输出;如何计算出数据表

产生数据表:

取点N

A=2*3.14/50*N    B=4*SIN(A)

C=(B+5)*256/10
000128
10.12560.50108 141 
20.25120.99427 153 
30.37681.47179 166 
40.50241.92612 177 
50.6282.35011 188 
60.75362.73707 198 
70.87923.08092 207 
81.00483.37622 214 
91.13043.61833 221 
101.2563.80344 225 
111.38163.92862 229 
121.50723.99191 230 
131.63283.99231 230 
141.75843.92982 229 
151.8843.80541 225 
162.00963.62104 221 
172.13523.37963 215 
182.26083.08497 207 
192.382.74172 198 
202.5122.35526 188 
212.63761.93170 177 
222.76321.47771 166 
232.88881.00044 154 
243.01440.50740 141 
253.140.00637 128 
263.2656-0.49476 115 
273.3912-0.98809 103 
283.5168-1.46586 90 
293.24-1.92054 79 
303.768-2.34495 68 
313.36-2.73242 58 
324.0192-3.07685 49 
334.1448-3.37280 42 
344.2704-3.61561 35 
354.396-3.80146 31 
364.5216-3.92742 27 
374.72-3.99150 26 
384.7728-3.99270 26 
394.84-3.93100 27 
405.024-3.80736 31 
415.1496-3.62374 35 
425.2752-3.38303 41 
435.4008-3.003 49 
445.52-2.74635 58 
455.652-2.36041 68 
465.7776-1.93728 78 
475.9032-1.48363 90 
486.0288-1.00660 102 
496.1544-0.51372 115 
506.28-0.01274 128 
上表是用EXCEL产生的正弦数据表,其中N表示取点的顺序,即在一个周期取点显示是的横坐标对应顺序,A=2*3.14/50*N表示的是所取的51个点将横轴分成了50份,每一个点所对应的横坐标;B=4*SIN(A)表示的是所取的每一个点对应的纵坐标,也即期望DA转换出的结果,其中4表示的是输出正弦波的振幅可以通过改变这个值来改变正弦波的输出振幅;C=(B+5)*256/10表示的是将B化为DA转换输入的数字量的结果,也即DA转换的输入,该公式是由U(-5V∽+5V)=2·Uref/256×N-5V 公式反推得到的。

编写DA根据数据表输出波形的程序:

ORG 000H

MAIN:

      MOV           R1,#50                    ;定义显示点的个数

LOOP:                                    

      MOV           A,R1                    ;从第50个点开始显示    

      MOV           DPTR,#SINTAB            ;指针指向SIN表地址

      MOVC      A,@A+DPTR            ;取表内数据

      MOV           DPTR,#0a000h            ;指针指向8032地址

      MOVX      @DPTR,A                ;向DA输入数据

      ACALL         DELAY                ;延时一段时间,保证转换完毕

      DJNZ          R1,LOOP                ;R1不为零,表示一个周期未取完,                                            继续去下一个点数据

      AJMP          MAIN                    ;R1=0,表示一个周期的点已经取                                            完,循环回去再取一个周期

DELAY:

      MOV          R0,#3

DELAY1:   

      NOP

      NOP

      NOP

      DJNZ      R0,DELAY1

      RET

SINTAB:

db 128,141,153,166,177,188,198,207

db 214,221,225,229,230,230,229,225

db 221,215,207,198,188,177,166,154

db 141,128,115,103,90,79,68,58

db 49,42,35,31,27,26,26,27

db 31,35,41,49,58,68,78,90

db 102,115,128

END

上述为取的点较少的程序,在循环上需要判断是否取完整周期,如果从网上下载一个SIN表生成软件则可以迅速取到想要的多组数据,以下为去256点的程序,在循环上就少去了很多麻烦,并且显示也更为清晰。

ORG 000H

MAIN: 

      MOV           R1,#00H         

LOOP:                              

      MOV           A,R1

因为取点为256,R1最大为255,所以,当取完一个整周期后R1的值会自动变为0,省去了设置循环的麻烦   

      MOV           DPTR,#SINTAB

      MOVC      A,@A+DPTR

      MOV           DPTR,#0a000h

      MOVX      @DPTR,A

      INC           R1                      

      ACALL         DELAY

      AJMP          LOOP                    

DELAY:MOV      R3,#3           

D1:   NOP

      NOP

      NOP

      DJNZ      R3,D1

      RET

SINTAB:                                   

DB 80H,83H,86H,H,8DH,90H,93H,96H

DB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH

DB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H

DB 0C7H,0CAH,0CCH,0CFH,0D1H, 0D4H,0D6H,0D8H

DB 0DAH,0DDH,0DFH,0E1H,0E3H, 0E5H,0E7H,0E9H

DB 0EAH,0ECH,0EEH,0EFH,0F1H, 0F2H,0F4H,0F5H

DB 0F6H,0F7H,0F8H,0F9H,0FAH, 0FBH,0FCH,0FDH

DB 0FDH,0FEH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FEH,0FDH

DB 0FDH,0FCH,0FBH,0FAH,0F9H, 0F8H,0F7H,0F6H

DB 0F5H,0F4H,0F2H,0F1H,0EFH, 0EEH,0ECH,0EAH

DB 0E9H,0E7H,0E5H,0E3H,0E1H, 0DEH,0DDH,0DAH

DB 0D8H,0D6H,0D4H,0D1H,0CFH, 0CCH,0CAH,0C7H

DB 0C5H,0C2H,0BFH,0BCH,0BAH, 0B7H,0B4H,0B1H

DB 0AEH,0ABH,0A8H,0A5H,0A2H, 9FH, 9CH, 99H

DB 96H, 93H, 90H, 8DH, H, 86H, 83H, 80H

DB 80H, 7CH, 79H, 78H, 72H, 6FH, 6CH, 69H

DB 66H, 63H, 60H, 5DH, 5AH, 57H, 55H, 51H

DB 4EH, 4CH, 48H, 45H, 43H, 40H, 3DH, 3AH

DB 38H, 35H, 33H, 30H, 2EH, 2BH, 29H, 27H

DB 25H, 22H, 20H, 1EH, 1CH, 1AH, 18H, 16H

DB 15H, 13H, 11H, 10H, 0EH, 0DH, 0BH, 0AH

DB 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02H

DB 02H, 01H, 00H, 00H, 00H, 00H, 00H, 00H

DB 00H, 00H, 00H, 00H, 00H, 00H, 01H, 02H

DB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H

DB 0AH, 0BH, 0DH, 0EH, 10H, 11H, 13H, 15H

DB 16H, 18H, 1AH, 1CH, 1EH, 20H, 22H, 25H

DB 27H, 29H, 2BH, 2EH, 30H, 33H, 35H, 38H

DB 3AH, 3DH, 40H, 43H, 45H, 48H, 4CH, 4EH

DB 51H, 55H, 57H, 5AH, 5DH, 60H, 63H, 66H

DB 69H, 6CH, 6FH, 72H, 76H, 79H, 7CH, 80H

END

仿真结果说明:

上述两个程序都能实现在示波器上显示正弦波的功能,但是取50个点的程序显然没有255个点的程序所显示的正弦波平滑,因为每一个点的取值都有一定得延时,所以看起来呈现阶梯状,而取点多时相应的阶梯状就相对很小难以辨别,从而显得更加平滑。上述两个程序都实现了DA的数据转换。下载本文

显示全文
专题