图中脉冲信号的频率为307.2KHz.
我这里实现了不同的乐曲分别是小星星,友谊地久天长和卖报歌,按下开关一是小星星,开关二是友谊地久天长,开关三是卖报歌:

DATAS SEGMENT;此处输入数据段代码  IOYO equ 0C400h;对应的端口地址IOY1 equ 0C440hMY8253_COUNT_0 equ IOYO+00H*4;8254计数器0端口1地址MY8253_COUNT1 equ IOYO+01H*4;8254计数器1端口2地址MY8253_COUNT2 equ IOYO+02H*4;8254计数器2端口3地址MY8253_MODE equ IOYO+03H*4;8254控制器地址MY8255_A equ IOY1+00H*4;8255计数器端口1地址MY8255_B equ IOY1+01H*4;8255计数器端口2地址MY8255_C equ IOY1+02H*4;8255计数器端口3地址MY8255_MODE equ IOY1+03H*4;8254控制器地址TFREQ dw 264,264,396,396,440,440,396dw 352,353,330,330,297,297,264dw 396,396,352,352,330,330,297dw 396,396,352,352,330,330,297dw 264,264,396,396,440,440,396dw 352,352,330,330,297,297,264,0TDLY  dw 6000,6000,6000,6000,6000,6000,12000dw 6000,6000,6000,6000,6000,6000,12000dw 6000,6000,6000,6000,6000,6000,12000dw 6000,6000,6000,6000,6000,6000,12000dw 6000,6000,6000,6000,6000,6000,12000dw 6000,6000,6000,6000,6000,6000,12000TFREQ2  dw   371,495,495,495,624,556,495,556,624dw   495,495,624,742,833,833,833,742,624dw   624,495,556,495,556,624,495,416,416,371dw   495,833,742,624,624,495,556,495,556,833dw   742,624,624,742,833,990,742,624,624,495dw   556,495,556,624,495,416,416,371,495,0TDLY2 dw 6000,9000,3000,6000,6000,9000,3000,6000,6000dw 9000,3000,6000,6000,18000,1500,4500,9000dw 3000,6000,6000,9000,3000,6000,6000,9000dw 3000,6000,6000,18000,6000,9000,3000,6000dw 6000,9000,3000,6000,6000,9000,3000,6000dw 6000,18000,6000,9000,3000,6000,6000,9000dw 3000,6000,6000,9000,3000,6000,6000,18000TFREQ3  dw 525,525,525,525,525,525,441,525,589dw 525,441,393,441,525,525,441,525dw 441,393,350,441,393,441,441,393dw 661,350,393,589,589,525,441,589dw 525,525,441,393,441,525,525,441dw 393,441,525,441,393,441,661,350dw 393,441,350,0TDLY3 dw 3000,3000,3000,3000,3000,3000,3000,3000,3000dw 3000,3000,3000,3000,3000,3000,3000,3000dw 3000,3000,3000,3000,3000,3000,3000,3000dw 3000,3000,3000,3000,3000,3000,3000,3000dw 3000,3000,3000,3000,3000,6000,3000,3000dw 3000,3000,3000,3000,3000,3000,3000,3000dw 3000,3000,6000
DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AX;此处输入代码段代码mov dx,MY8255_B;输入信号in al,dxmov dx,MY8255_MODEmov al,82h;1000 0010out dx,al
K:mov dx,MY8255_B;输入信号in al,dxcmp al,0FEhje K1cmp al,0FDhje k2cmp al,0FBhje k3;cmp al,0f7h;je k4;jmp Turn_out;熄灭jmp kk1:mov dx,MY8255_Amov al,00h;门控位高电平允许计数out dx,almov si,offset tfreqmov bx,offset tdly   call PlayMusicjmp k
k2:mov dx,MY8255_Amov al,00h;门控位高电平允许计数out dx,almov si,offset tfreq2mov bx,offset tdly2call PlayMusicjmp k
k3:mov dx,MY8255_Amov al,00h;门控位高电平允许计数out dx,almov si,offset tfreq3mov bx,offset tdly3call PlayMusicjmp k
PlayMusic proc near
FREQ:mov di,[si]cmp di,0je stopcall soundadd si,2;转到下一个音符add bx,2;转到下一个节拍jmp freq
stop:mov dx,MY8255_Amov al,01h;门控位低电平禁止计数out dx,alret
playmusic endp  sound proc nearmov dx,MY8253_MODE;8253初始化mov al,0b6h;10通道2,11先读写高字节,后读写低字节011方式3,0二进制计数out dx,almov dx,2mov ax,307;307.2KHzdiv dimov dx,MY8253_COUNT2out dx,almov al,ahout dx,almov ax,[bx]
sloop:mov cx,0018h;延时程序LOOP $dec axjnz sloopret
sound endp      exit:MOV AH,4CHINT 21H
CODES ENDSEND START

在做改进部分的时候我发现一个问题,就是这个实验的切换,比如在两首乐曲之间进行切换的时候,一首乐曲的结尾一直发最后一个音,我觉得很奇怪,不是没有输入频率进去怎么还在发声,后来参考8253方式三,才发现原来问题在于只有GATE位为高电平,8253就会继续输出方波,后来我改进成了一首乐曲完成后GATE位输出低电平使8253停止输出波形,这样才改进好。这个问题可能大家也会遇到就提出来了。
这个程序参考了https://blog.csdn.net/weixin_30390075/article/details/97020412?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase大家可以查看原文章。
补充:运行使使能信号:

时钟信号设置:

音乐发生器8086和8253通过Proteus仿真相关推荐

  1. 不同频率的方波发生器8086和8253的Proteus仿真

    时钟信号的频率为307.2kHz. 通过按钮可以选择输出不同频率的方波. DATAS SEGMENT;此处输入数据段代码 IOYO equ 0C400h;对应的端口地址IOY1 equ 0C440hM ...

  2. da转化输出不同波形8086和DAC0832的Proteus仿真

    DATAS SEGMENT;此处输入数据段代码 DAC0832 equ 0C400h IOY1 equ 0C480hb8255 equ IOY1+01H*4m8255 equ IOY1+03H*4bu ...

  3. 8086之8253芯片仿真

    8086之8253芯片仿真 汇编语言 微机原理 8086 题目1 问题描述 实现开关闭合后5s后点亮发光二极管 方式0 解答 使用1HZ频率输入给定时器0 工作模式为0 电路图 题目1 电路图 程序 ...

  4. 【Proteus仿真8086】将IO接口电路封装成子电路CCT001

    本次实验内容来自于顾晖老师<微机原理与接口技术 基于8086和Proteus仿真 第3版>的[例7-2],但老师使用的方法是将IO接口电路封装成子电路CCT001,这部分在章节没有讲述,于 ...

  5. 【Proteus仿真8086】简单IO接口实验——无条件传输和查询方式

    本次实验内容来自于顾晖老师<微机原理与接口技术 基于8086和Proteus仿真 第3版>的[例7-1]和51CTO课程的讲解内容第七章输入输出接口0704程序查询方式 https://e ...

  6. 【Proteus仿真8086实验一】RAM存储器62256

    建议把存储器设计和简单IO接口放在第一次实验,重点了解锁存器273和缓冲器373是怎样将数据和地址线进行分离的,具体Proteus的实验操作比如设置内存大小和快速命名接口(属性赋值工具)可以参考这个老 ...

  7. 8086+ADC0808+8255A电压测量数码管显示Proteus仿真

    8086+ADC0808+8255A电压测量数码管显示Proteus仿真 Proteus仿真截图 代码 CODE SEGMENT DATA SEGMENT PORT_ADC EQU 80H PORT_ ...

  8. 8086+DAC0832产生方波、三角波及正弦波波形Proteus仿真

    8086+DAC0832产生方波.三角波及正弦波波形Proteus仿真 仿真截图 代码 CODE SEGMENTDATA SEGMENT SQURE DB 0,0,0,0,0,0,0,0,0,0,25 ...

  9. 【Proteus仿真】51单片机+DAC0832+LM358放大电路波形发生器

    [Proteus仿真]51单片机+DAC0832+LM358放大电路波形发生器 Proteus仿真 主程序代码 #include<reg52.h> //包含头文件 #include< ...

最新文章

  1. GCC 在 Linux、Windows 系统安装
  2. OpenGL ES着色器语言之语句和结构体(官方文档第六章)内建变量(官方文档第七、八章)...
  3. iphone安装Deb文件
  4. 【Yoshua Bengio 亲自解答】机器学习 81 个问题及答案(最全收录)
  5. Mybatis Integer类型参数值为0时判断为空、空字符串不通过
  6. 关于win32与win64的兼容性问题
  7. vue获取当前月最后一天_10月的最后一天,有哪些不想谈恋爱适合发朋友圈的文案?...
  8. 《戏说网络二三事》序1
  9. 一次系统调用开销到底有多大?strace、time、perf命令
  10. vue 方法获取返回值_Vue项目中Api的组织和返回数据处理的操作
  11. 520来袭,程序猿的浪漫 - 前端情书
  12. 手机技巧之扩展内存的检测以及修复。
  13. GitHub开源推荐 | qsint-基于Qt的UI控件
  14. 没有Realek高清音频管理器,Win10系统没有声音怎么办?
  15. DAVIS346动态视觉传感器
  16. HDU 4183 Pahom on Wate【网络流+路径问题】
  17. 爱情日记(2005年3月)
  18. 如何解决 coffee-script@1.12.7: CoffeeScript on NPM has moved to coffeescript (no hyphen)或者说不支持改系统
  19. linux配置can驱动
  20. 浪潮服务器nf5270m5做raid_服务器安装第一步RAID配置——企业服务器常用RIAD技术介绍及配置...

热门文章

  1. CT主控计算机功能不包括,​项目四 计算机X线体层成像 任务二CT的基本硬件与CT的类型...
  2. Unity3D 网络游戏框架(八、大小端问题)
  3. 太空射击第10课: Score (繪畫和文字)
  4. NLP——计算文本相似度的常用算法
  5. 我的世界Java版(Minecraft:Java)数据包教程 (1)
  6. 国际版xperia手机禁用swiftkey keyboard方法
  7. 整理了部分数据分析用图表
  8. 自定义view之超级课程表页面的实现
  9. 中国公用计算机互联网8个大区分别是,中国idc骨干网络介绍
  10. Endnote X9 使用指南