1. 实验目的
- 学习数模转换芯片DAC0832的硬件连接和编程方法。
- 掌握将一组数据通过数模转换为各种波形的方法。
- 学习软件模拟示波器的使用方法。
2. 实验内容
- 题目:编写程序,产生周期的锯齿波、矩形波、梯形波和阶梯波,经DA转换,显示在软件模拟示波器上。
- 要求:每种波形的周期数、阶梯波中的阶梯数等可通过参数设置。
3. 实验说明
- 老师临时要求加入三角波,去掉梯形波,故将锯齿波、矩形波、三角波、阶梯波写在一个程序里方便观察现象。
- 考虑有的班可能要求梯形波,将梯形波单独写了一个程序。
4. 锯齿波、矩形波、三角波、阶梯波
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | STACK SEGMENT STACK DW 32 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE, SS:STACK START: ;产生锯齿波 MOV CX, 07H ;产生锯齿波的周期数为7次,如果想改变锯齿波产生周期请修改这里 JUCHI: MOV DX, 0600H ;DAC0832接IOY0,0600H为控制端口地址 MOV AL, 00H ;AL为数字量 JC1: OUT DX, AL ;转换为模拟量 CALL DELAY1 ;延时,此为短延时 CMP AL ,0FFH JE JC2 INC AL ;AL步加1,直到等于0FFH JMP JC1 JC2: LOOP JUCHI ;产生矩形波 MOV CX, 05H ;产生矩形波的周期数为5次,如果想改变三角波产生周期请修改这里 JUXING: MOV DX, 0600H MOV AL, 00H ;先输出00H的波形 OUT DX, AL CALL DELAY2 ;长延时 MOV AL, 0FFH ;再输出0FFH的波形 OUT DX, AL CALL DELAY2 ;长延时 LOOP JUXING ;产生三角波 MOV CX, 05H ;产生三角波的周期数为5次,如果想改变三角波产生周期请修改这里 SANJIAO: SJ1: MOV DX, 0600H OUT DX, AL CALL DELAY1 ;短延时 CMP AX, 0FFH JE SJ2 INC AL ;将AL从00H步加0FFH JMP SJ1 SJ2: MOV DX, 0600H OUT DX, AL CALL DELAY1 ;短延时 CMP AL, 00H JE SJ3 DEC AL ;将AL从0FFH步减至00H JMP SJ2 SJ3: LOOP SANJIAO ;产生阶梯波 MOV CX, 0FFFFH ;产生阶梯波的周期数为0FFFF次,如果想改变阶梯波产生周期请修改这里 MOV AX, 0FEH ;波形振幅最大值为0FFH ;考虑到8086的DIV除法可能会出现余数为负导致加起来之后的最大值大于0FFH,故使用0FEH作最大值 MOV BL,05H ;阶梯波中的阶梯数,如果想改变阶梯波中的阶梯数请修改这里 DIV BL ;用最大振幅除以阶梯数,得到每个台阶的高度 MOV BL, AL ;将上述除法的商保存在BL中 MOV BH, 00H ;BH置0 JIETI: MOV AX,0000H ;AX初始化0000H JT1: MOV DX, 0600H OUT DX, AL CMP AX, 00FFH ;判断AX是否达到幅度上线 JAE JT2 ;达到上限,表示一次阶梯波完整生成,开始新一次生成 CALL DELAY2 ;长延时 ADD AX, BX ;用当前解体高度加上每个阶梯的高度得到下一阶梯的高度 JMP JT1 JT2: LOOP JIETI DELAY1: ;短延时 PUSH CX MOV CX, 01FFH D1: PUSH AX POP AX LOOP D1 POP CX RET DELAY2: ;长延时 PUSH CX MOV CX, 0FFFFH D2: PUSH AX POP AX LOOP D2 POP CX RET CODE ENDS END START |
4. 梯形波
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | STACK SEGMENT STACK DW 32 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE, SS:STACK START: MOV CX, 0FH AA1: MOV DX, 0600H ;梯形波的底边00H MOV AL, 00H OUT DX, AL CALL DELAY2 AA2: MOV DX, 0600H ;梯形波从00H上升到0FFH OUT DX, AL CALL DELAY1 CMP AL, 0FFH JE AA3 INC AL JMP AA2 AA3: MOV DX, 0600H ;梯形波的最上边0FFH MOV AL, 0FFH OUT DX, AL CALL DELAY2 AA4: MOV DX, 0600H ;梯形波从0FFH下降到00H OUT DX, AL CALL DELAY1 CMP AL, 00H JE AA1 DEC AL JMP AA4 ;一个梯形波周期由上述四个部分组成,循环往复 DELAY1: PUSH CX MOV CX, 0FFH AA5: PUSH AX POP AX LOOP AA5 POP CX RET DELAY2: PUSH CX MOV CX, 0FFFFH AA6: PUSH AX POP AX LOOP AA6 POP CX RET CODE ENDS END START |
????????????????????????????????????
棒棒哒
思考题捏(T ^ T)
思考题自己想想吧………………
同学你好,你的代码受到广大人民群众的好评,你已被评选为中国十大优秀程序猿,速来领奖!
????????????????????????????