找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7106|回复: 0
打印 上一主题 下一主题
收起左侧

单片机产生四种波形并可任意切换的正弦波发生器汇编程序

[复制链接]
跳转到指定楼层
楼主
  借助51单片机和DAC0832实现通过按键控制不同波形的波形发生器。下文为设计文章及proteus仿真电路图和仿真效果图;后面附有与电路图对应的有效源程序。  工作原理:
产生指定的信号波形可以通过DAC来实现,对输出的二进制数字量进行相应改变来实现不同波形的产生。正弦波是利用MATLAB将正弦曲线均匀取样得到等间隔时刻的y方向上二进制数值,然后依次输出后经D/A转换得到;三角波信号是将输出的二进制数字信号依次加1,达到0xff时再依次减1,并实时将数字信号经D/A转换得到波形信号。
实现方法:
正弦波:先使用MATLAB在x方向进行等间隔取样,将y轴上的读数取整之后转换成16进制数形成一个表格。在程序中采取不断读表输出的方式经 D/A 转换得到正弦波。
三角波:程序中设计三角波最高达到00FFH,先不断加1,达到峰值之后不断减1,将这些信号同步输出,并利用D/A转换得到三角波。可以在虚拟示波器上观察到这两种不同的波形。
仿真原理图:

结果图:


全部实验程序见附件:
  1. ; Main.asm file generated by New Project wizard
  2. ; Created:   周五 5月 24 2019
  3. ; Processor: AT89C52
  4. ; Compiler:  ASEM-51 (Proteus)
  5. ;=====================================
  6. $NOMOD51
  7. $INCLUDE (80C52.MCU)
  8. ;======================================
  9. ; DEFINITIONS
  10. ; VARIABLES
  11. ; RESET and INTERRUPT VECTORS
  12. ;======================================
  13.       ; Reset Vector
  14.       org   0000h
  15.       jmp   Start
  16. ;=======================================
  17. ; CODE SEGMENT
  18. ;=======================================
  19.       org   0100h
  20. Start:        
  21. ;***R4=0锯齿波R4=1三角波R4=2正弦波R4=3方波R4=梯形波***                                       
  22. ;***********************
  23. ;       锯齿波
  24. ;***********************   
  25.        MOV        R4,#0      
  26. J0:    MOV        A,#0
  27. J0next:          CJNE                R4,#0,S1    ;判断R4,不等0跳转产生三角波
  28.                   MOV                P2,A                 ;P2赋值
  29.                   LCALL                delay                 ;延时
  30.                   INC                A                     ;增加A的值,产生锯齿波上升沿
  31.                   JB                P1.0,J0p11         ;扫描检测按键给R4赋值选择输出信号波形
  32.                   MOV                R4,#0                 ;产生锯齿波信号
  33. J0p11:          JB                P1.1,J0p12                  
  34.                   MOV                R4,#1             ;产生三角波信号
  35. J0p12:    JB                P1.2,J0p13                  
  36.                   MOV                R4,#2                  ;产生正弦波信号
  37. J0p13:          JB                P1.3,J0p14                  
  38.                   MOV                  R4,#3                  ;产生方波信号
  39. J0p14:          JB                   P1.4,J0p15                  
  40.                   MOV                R4,#4                  ;产生梯形波信号
  41. J0p15:         SJMP            J0next
  42. ;***************************
  43. ;          三角波
  44. ;***************************
  45. S1:       MOV                A,#0
  46. S1n1:          CJNE                R4,#1,Z3                ;判断R4,不等于1则跳转正弦波发生
  47.                   MOV                P2,A                    ;产生三角波的上升沿
  48.                   LCALL                 delay                    ;调用延时
  49.                   INC                A                    ;增加A                        
  50.                   JB                P1.0,S11p11            ;扫描检测按键确定输出信号种类
  51.                   MOV            R4,#0                    ;产生锯齿波信号
  52. S11p11:  JB            P1.1,S11p12                        
  53.                  MOV        R4,#1                        ;产生三角波信号
  54. S11p12:  JB            P1.2,S11p13                          
  55.                  MOV        R4,#2                         ;产生正弦波信号
  56. S11p13:  JB     P1.3,S11p14                        
  57.                  MOV    R4,#3                        ;产生方波信号
  58. S11p14:         JB     P1.4,S1p1                          
  59.                  MOV    R4,#4                        ;产生梯形波信号
  60. S1p1:    CJNE                  A,#255,S1n1
  61. S1n2:    CJNE                 R4,#1,Z3
  62.                 MOV                P2,A                        ;产生三角波的下降沿
  63.                 LCALL   delay                                   
  64.                 DEC                A                        ;减小A                           
  65.                 JB                P1.0,S12p11         ;扫描检测按键状态确定输出信号波形
  66.                 MOV                R4,#0                        ;产生锯齿波信号
  67. S12p11:  JB                P1.1,S12p12
  68.                  MOV        R4,#1                          ;产生三角波信号
  69. S12p12:  JB                P1.2,S12p13
  70.                  MOV        R4,#2                        ;产生正弦波信号  
  71. S12p13:         JB     P1.3,S12p14
  72.                   MOV             R4,#3                  ;产生方波信号
  73. S12p14:          JB              P1.4,S1p2
  74.                          MOV    R4,#4                  ;产生梯形波信号
  75. S1p2:       CJNE        A,#0,S1n2                        
  76.                     SJMP        S1n1
  77. ;**********************************
  78. ;                     正弦波
  79. ;**********************************
  80. Z3:          MOV                R0,#0
  81. Z3NEXT:         CJNE        R4,#2,F4    ;判断R4,不等于2跳转输出方波
  82.                         MOV                A,R0                        
  83.                         MOV                DPTR,#TAB   ;将正弦波的表头给DPTR,转到表格去查表
  84.                         MOVC        A,@A+DPTR               
  85.                         MOV                P2,A                        
  86.                         LCALL          DELAY                        
  87.                         INC                R0                                
  88.                         JB                P1.0,Z3p11
  89.                         MOV                R4,#0
  90. Z3p11:  JB        P1.1,Z3p12        ;扫描检测按键选择输出波形
  91.                 MOV                  R4,#1
  92. Z3p12:  JB              P1.2,Z3p13
  93.                 MOV                     R4,#2
  94. Z3p13:  JB        P1.3,Z3p14
  95.                 MOV       R4,#3
  96. Z3p14:  JB        P1.4,Z3next
  97.                     MOV     R4,#4                        
  98.                 SJMP     Z3NEXT
  99. ;*******************************
  100. ;             方波
  101. ;*******************************
  102. F4:    CJNE                 R4,#3,T5          ;判断R4,不等于3则跳转梯形波
  103.                    MOV                 A,#0
  104.                    MOV                 P2,A
  105.                    CALL         FBDELAY
  106.                    MOV                 A,#255
  107.                    MOV                 P2,A
  108.                    CALL         FBDELAY               
  109. F40:     JB           P1.0,F41       ;扫描检测按键分别选择输出波形
  110.                  MOV          R4,#0
  111. F41:     JB            P1.1,F42
  112.                  MOV          R4,#1
  113. F42:     JB            P1.2,F43
  114.                  MOV           R4,#2
  115. F43:     JB          P1.3,F44
  116.                  MOV          R4,#3
  117. F44:     JB          P1.4,F4
  118.                  MOV          R4,#4
  119.              JMP          F4
  120. ;*******************************
  121. ;           梯形波
  122. ;*******************************
  123. T5:         MOV          A,#0
  124. T5b:    CJNE          R4,#4,T51b                   ;判断R4,不等4则跳转
  125.                 JMP          T51b1
  126. T51b:   JMP          J0                                    ;跳转到锯齿波那一步
  127. T51b1:  MOV     P2,a
  128.                   LCALL         delay
  129.                   INC            A                            ;产生梯形波的上升沿;
  130.               JB            P1.0,T5b0            ;扫描检测按键选择输出波形
  131.                   MOV              R4,#0
  132. T5b0:     JB            P1.1,T5b1
  133.                   MOV           R4,#1
  134. T5b1:     JB            P1.2,T5b2
  135.                   MOV           R4,#2
  136. T5b2:     JB        P1.3,T5b3
  137.                   MOV       R4,#3
  138. T5b3:     JB            P1.4,T5b10
  139.                   MOV           R4,#4
  140. T5b10:   CJNE                    A,#255,T5b
  141.                  LCALL             fbdelay
  142. T5b11:   CJNE           R4,#4,T52b
  143.                  JMP               T52b2
  144. T52b:    JMP               J0
  145. T52b2:         MOV              P2,a
  146.                  LCALL          delay
  147.                  DEC            A                                           ;产生梯形波的下降沿
  148.           JB             P1.0,T5b12                               ;扫描检测按键选择输出波形
  149.                   MOV           R4,#0
  150. T5b12:    JB             P1.1,T5b13
  151.                   MOV           R4,#1
  152. T5b13:    JB             P1.2,T5b14
  153.                   MOV       R4,#2
  154. T5b14:    JB             P1.3,T5b15
  155.                   MOV             R4,#3
  156. T5b15:    JB                 P1.4,T5b16
  157.                   MOV              R4,#4        
  158. T5b16:   CJNE                  A,#0,T5b11
  159.              JMP                 T5
  160. DELAY:           MOV          R6,#2                     ;延时函数
  161. D1:                MOV          R7,#20
  162.                     DJNZ  R7,$
  163.                     DJNZ  R6,D1
  164.                 RET        
  165. fbdelay:   MOV  R1,#40                      ;方波延时函数
  166. D2:        MOV  R2,#255
  167.                            DJNZ R2,$
  168.                        DJNZ R1,D2
  169.                       RET
  170. ;正弦波波形表
  171.         TAB:         
  172.                         DB 80H,83H,86H,89H,8DH,90H,93H,96H
  173.                         DB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH
  174.                         DB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H
  175.                         DB 0C7H,0CAH,0CCH,0CFH,0D1H, 0D4H,0D6H,0D8H
  176.                         DB 0DAH,0DDH,0DFH,0E1H,0E3H, 0E5H,0E7H,0E9H
  177.                         DB 0EAH,0ECH,0EEH,0EFH,0F1H, 0F2H,0F4H,0F5H
  178.                         DB 0F6H,0F7H,0F8H,0F9H,0FAH, 0FBH,0FCH,0FDH
  179.                         DB 0FDH,0FEH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFH
  180.                         DB 0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FEH,0FDH
  181.                         DB 0FDH,0FCH,0FBH,0FAH,0F9H, 0F8H,0F7H,0F6H
  182.                         DB 0F5H,0F4H,0F2H,0F1H,0EFH, 0EEH,0ECH,0EAH
  183.                         DB 0E9H,0E7H,0E5H,0E3H,0E1H, 0DEH,0DDH,0DAH
  184.                         DB 0D8H,0D6H,0D4H,0D1H,0CFH, 0CCH,0CAH,0C7H
  185.                         DB 0C5H,0C2H,0BFH,0BCH,0BAH, 0B7H,0B4H,0B1H
  186.                         DB 0AEH,0ABH,0A8H,0A5H,0A2H, 9FH, 9CH, 99H
  187.                         DB 96H, 93H, 90H, 8DH, 89H, 86H, 83H, 80H
  188.                         DB 80H, 7CH, 79H, 78H, 72H, 6FH, 6CH, 69H
  189.                         DB 66H, 63H, 60H, 5DH, 5AH, 57H, 55H, 51H
  190.                         DB 4EH, 4CH, 48H, 45H, 43H, 40H, 3DH, 3AH
  191.                         DB 38H, 35H, 33H, 30H, 2EH, 2BH, 29H, 27H
  192.                         DB 25H, 22H, 20H, 1EH, 1CH, 1AH, 18H, 16H
  193.                         DB 15H, 13H, 11H, 10H, 0EH, 0DH, 0BH, 0AH
  194.                         DB 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02H
  195.                         DB 02H, 01H, 00H, 00H, 00H, 00H, 00H, 00H
  196.                         DB 00H, 00H, 00H, 00H, 00H, 00H, 01H, 02H
  197.                         DB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H
  198.                         DB 0AH, 0BH, 0DH, 0EH, 10H, 11H, 13H, 15H
  199.                         DB 16H, 18H, 1AH, 1CH, 1EH, 20H, 22H, 25H
  200.                         DB 27H, 29H, 2BH, 2EH, 30H, 33H, 35H, 38H
  201.                         DB 3AH, 3DH, 40H, 43H, 45H, 48H, 4CH, 4EH
  202.                         DB 51H, 55H, 57H, 5AH, 5DH, 60H, 63H, 66H
  203.                         DB 69H, 6CH, 6FH, 72H, 75H, 78H, 7bH, 7eH
  204. Loop:        
  205.       jmp Loop
  206. ;=============================================
  207.       END

复制代码




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表