8255控制led灯和汇编语言控制主板发声

合集下载

8255 控制led灯亮灭编程题

8255 控制led灯亮灭编程题

8255 控制led灯亮灭编程题编程题:控制LED灯亮灭以下是一个C++编程示例,演示如何通过编程控制LED灯的亮灭。

```c++#include <iostream>// 定义一个枚举类型,表示LED的状态enum class LEDState {Off,On,};// 模拟LED灯的控制类class LED {private:LEDState currentState; // 当前LED状态public:// 默认构造函数LED() : currentState(LEDState::Off) {}// 方法:打开LED灯void turnOn() {currentState = LEDState::On;std::cout << "LED turned on." << std::endl;}// 方法:关闭LED灯void turnOff() {currentState = LEDState::Off;std::cout << "LED turned off." << std::endl;}// 方法:获取LED状态LEDState getState() const {return currentState;}};int main() {// 创建一个LED对象LED led;// 检查LED状态并相应进行控制if (led.getState() == LEDState::Off) {led.turnOn();} else {led.turnOff();}return 0;}```上述示例中,我们首先定义了一个枚举类型`LEDState`,表示LED的两种状态:关闭(Off)和打开(On)。

然后,我们定义了一个`LED`类,模拟了LED灯的行为。

该类包含了三个方法:- `turnOn()`:用于将LED灯打开。

8255LED流水灯控制

8255LED流水灯控制

8255LED流水灯控制实验四8255LED流水灯控制实验一、实验目的1、认识8255接口芯片、学习其在微机系统中的应用;2、学习8255编程原理;3、掌握LED流水灯汇编语言编程方法。

二、实验仪器1、DJ-598KC开发系统1台2、PC机1台三、实验内容1、8086实验箱主系统电路组成★该流水灯系统采用8255芯片扩展连接“LED灯”模块★实验仪上包括12只发光二极管及相应驱动电路,见下图所示。

发光二极管控制信号输入端L1-L12,当输入端为低电平“0”时发光二极管亮,否则灭。

2、8255编程要点指南8255是一个通用的可编程的并行接口芯片,它提供有三个I/O口,每个口都可以通过编程设置为多种工作方式,在中小系统中应用广泛,其组成结构如下图。

★三个I/O口,分别是PA口、PB口和PC口。

每个口提供八根数据线,如PA口线(PA0~PA7),用于连接外设。

★DB、CB和AB总线用于连接CPU三总线,DB用于接收来自CPU的控制命令字或数据,CB用于选择对8255数据口读或写操作,AB用于选择对哪个口读写操作。

★A组和B组控制电路用于编程控制PA口、PB口和PC口的工作方式选择。

见下图控制命令字格式。

若采用A口的方式0来控制LED灯,则控制字为10000000B=80H★编程控制方法a.设置控制命令字,使A口工作在方式0下——向控制口写控制命令字。

b.输出要点亮的LED数据——向A口写点亮数据。

c.8255基地址为0FF28H,则A口地址0FF28H,B口地址0FF29H,C口地址0FF2AH,控制口地址0FF2BH。

3.实验系统搭建与使用a.键盘显示器设置:JK开关置“系统”处,进入监控状态。

b.通讯选择设置:KB6开关置“88”处,并将随机配送的串行通讯线,一端与实验仪的RS232D型插座CZ1相连,另一端与PC机COM1或COM2串行口相连。

c.电路连接:将8255A芯片A口的PA0-PA7依次接Ll-L8,B口的PB0-PB3依次接L9-L12。

8255 控制led灯亮灭编程题

8255 控制led灯亮灭编程题

8255 控制led灯亮灭编程题摘要:1.引言2.8255 芯片介绍3.8255 控制LED 灯亮灭原理4.编程实现LED 灯亮灭的步骤a.硬件连接b.编写程序c.测试运行5.总结正文:LED 灯的亮灭控制是电子工程师们经常需要解决的问题,特别是在嵌入式系统和自动化领域。

本文将介绍一种使用8255 芯片控制LED 灯亮灭的方法。

8255 芯片是一种具有三态输出的8 位双向并行接口器件,它可以用于扩展微型计算机的并行口,实现与外部设备的数据交换。

它内部包含有三个独立的8 位寄存器,可以用于控制外部设备的状态。

使用8255 芯片控制LED 灯亮灭的原理非常简单。

首先,我们需要将8255 芯片与LED 灯连接起来。

通常,我们将LED 的正极连接到8255 芯片的某个输出端口,负极连接到地。

然后,通过编写程序控制8255 芯片的输出,从而实现对LED 灯的亮灭控制。

接下来,我们来详细了解一下编程实现LED 灯亮灭的步骤:a.硬件连接:首先,将8255 芯片与单片机(如8051)相连接。

将单片机的数据总线、控制总线和片选线分别连接到8255 芯片的数据总线、控制总线和片选输入端。

同时,将LED 灯的正负极分别接到8255 芯片的某个输出端口和地。

b.编写程序:为了实现LED 灯的亮灭控制,我们需要编写一段程序。

以下是一个简单的示例程序,用于控制单个LED 灯的亮灭:```ORG 00H ; 程序从地址00H 开始MOV P1, #00H ; 将00H 的值赋给P1 口,初始化P1 口为低电平MOV R7, #0FFH ; 将0FFH 的值赋给寄存器R7MAIN: NOP ; 主循环:空操作,用于占据一个指令周期DJNZ R7, MAIN ; 寄存器R7 递减,如果R7 不为0,则跳转到主循环;否则,继续执行下面的代码CPL P1.0 ; 反转P1 口的第0 位(即8255 芯片的第一个输出端口),点亮或熄灭LED 灯SJMP MAIN ; 无条件跳转到主循环END ; 程序结束```c.测试运行:将编写好的程序烧写到单片机,然后给单片机上电。

用8255设计LED显示器接口实验

用8255设计LED显示器接口实验

用8255设计LED显示器接口实验本文结合实验教学需要,介绍了用8255设计LED显示器接口实验的过程。

关键词:微机原理及应用;8255;LED;接口“微机原理及应用”是工科类专业的基础课,该课程比较抽象,因此实验教学起着至关重要的作用。

通过实验学生可以对比较抽象的命令、程序、输入输出接口电路加深理解。

现在仍有许多高校使用北京理工达盛科技有限公司的8086实验箱,但由于受到实验条件的限制,往常的做法是在有限的课堂时间内安排一些旨在验证理论知识的实验内容,较少涉及运用理论知识去解决实际问题。

这样的实验教学不利于发挥学生的学习主动性,不利于培养学生解决实际问题的能力。

如何改革传统的实验教学,如何培养学生的实际应用能力,本文举一个实例,需要教师利用现有的条件设计一些综合实验,让学生独立地去解决这些问题,从中培养能力。

希望本文能起到穿针引线的作用。

1设计LED显示器接口实验8086实验指导书显示器接口实验使用的是8279的显示输出功能,实验内容是在6位LED上循环显示8。

8086实验指导书8255并行口实验使用的是8255芯片,读开关量、输出、LED灯显示,实验讲义上都给出了电路原理图以及参考程序,学生往往是照着实验指导书上连接好线路,输入参考程序,进行程序调试。

大部分时间花在了实验的验证上,这样缺乏主动性和创新性,什么都是现成的。

能否在此基础上拓展一下,用8255芯片来实现显示器接口实验,这样既可取代8279,又可加深对8255的理解和使用。

实验任务:使用8255芯片的PA口作为段寄存器,PB口做为位寄存器,使用6位数码管从右向左逐位显示0~G,即显示0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F、G。

连线编程:由学生自己独立连接并独立编程实现,在编程过程中加深对硬件的理解、命令以及涉及的技巧。

2LED 显示器接口实验程序代码code segmentorg 100haa1: mov dx,04a6h ‘8255控制端口地址,大于255用dx做桥梁,小于255直接由端口地址传值mov al,80h ‘8255工作方式控制字out dx,allea bx,data ‘取偏移地址与bx相加aa3: mov ch,0‘显示数字0-------9 ,其中ch内容在变aa4: mov ah,0feh‘即1111 1110 为0时亮,须注意PB0与led接法,灯旋转方向mov si,6‘6个ledaa2: mov al,chxlat ‘查表地址转换指令:=MOV AL,[BX+AL]mov dx,04a0h ‘A口送字形,注意其端口地址out dx,almov al,ahmov dx,04a2h‘B口控制哪一位亮out dx,alrol ah,1 ‘1111 1110 循环左移mov di,0ffffhaa5: dec dijnz aa5 ‘延时,不为0,则decdi ,为0,则dec sidec sijnz aa2 ‘si不为0,则aa2——decsi ,为0,则inc chinc chcmp c h,12‘ch的值从0-18jnz aa4 ‘循环jmp aa3‘又从0开始到Fdata db 3fh,06h,5bh,4fh,66h,6dhdb 7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h,73h,88h,00hcode endsend aa1说明:在实验教学中如何培养能力?首先设计出较好的题目。

用汇编语言编写8255a控制一组发光二极管的亮灭

用汇编语言编写8255a控制一组发光二极管的亮灭

用汇编语言编写8255a控制一组发光二极管的亮灭用8255a 开关控制二极管以及在显示器上的显示1.实验原理利用8255a 实验对外接输出以及对微机的控制,利用外置开关模拟二进制数字的输入,发光二极管显示,微机显示屏显示2.实物连接图K0K1K2K3K4K5 K6K73.实物接线:K1~K8接PC0~PC7CS 连接218~21FPB0~PB7接D0~D74.流程图:YNPB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 CS PC0 PC1 PC2 8255A PC3 PC4 PC5 PC6 PC7 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 开始选择控制字是否跳出A,B口输出,C口输入输入控制结束4.程序清单:DA TA SEGMENTDA TA ENDSSTACK SEGMENT STACKSTA DW 50 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,ES:DA TA,SS:STACK START: MOV AX,DA TAMOV DS,AXTS:MOV AH,01HINT 21HCMP AL,’Y’JE PCCMP AL,’N’JE JSPC:MOV AH,21BHMOV AL,10001001BOUT DX,ALMOV DX,21AHPUSH DXMOV DX,219H OUT DX,ALMOV DX,218H OUT DX,ALPOP DXMOV DX,218H MOV BL,ALMOV CX.0008H BBB:MOV DL,BL CALL DISPSHR BL,1LOOP BBBJMP TSJS:MOV AX,4C00H INT 21HDISP PROC NEAR PUSH AXAND DL,01H ADD DL,30H MOV AH,02HINT 21HMOV DL,20HINT 21HINT 21HPOP AXRETDISP ENDP CODE ENDS。

8086系统 8255并行 交通灯控制程序(汇编程序代码+详细注释内容)

8086系统 8255并行 交通灯控制程序(汇编程序代码+详细注释内容)

DATAS SEGMENT;此处输入数据段代码CONADD EQU 21BH ;控制寄存器端口地址BADD EQU 219H ;B口地址CADD EQU 21AH ;C口地址DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码;ORG 2000H ;定义起始地址XOR CH,CHXOR AH,AHMOV AL,80H ;1 00 0 0 0 0 0B方式0,输出MOV DX,CONADD ;写控制字OUT DX,ALMOV AL,01101111B ;东西方向全红(接高四位)MOV DX,BADD ;DX保存Bd口地址OUT DX,ALMOV AL,11011011B ;南北方向全红MOV DX,CADDOUT DX,ALCALL DELAY1 ;延时S: MOV AL,1101111BMOV DX,BADD ;东西方向绿灯亮,起始状态OUT DX,ALMOV AL,10011011B ;南北方向红灯亮MOV DX,CADDOUT DX,ALCALL DELAY2 ;长延时MOV CX,0005H ;黄灯闪5次Y1: MOV AL,10111111BMOV DX,BADDOUT DX,ALMOV AL,01011011BMOV DX,CADDOUT DX,AL ;黄灯亮CALL DELAY3MOV AL,11111111BMOV DX,BADDOUT DX,ALMOV AL,11011011BMOV DX,CADDOUT DX,AL ;黄灯灭CALL DELAY3LOOP Y1MOV AL,01101111BMOV DX,BADDOUT DX,ALMOV AL,11110110BMOV DX,CADD ;东西红灯,南北绿灯OUT DX,ALCALL DELAY2 ;长延时MOV CX,0005H ;黄灯闪5次Y2: MOV AL,01101111BMOV DX,BADDOUT DX,ALMOV AL,11101101BMOV DX,CADDOUT DX,ALCALL DELAY2MOV AL,01101111BMOV DX,BADDOUT DX,ALMOV AL,11111111BMOV DX,CADDOUT DX,ALCALL DELAY2LOOP Y2MOV AH,1;待定,有键按下退出INT 16HJZ SMOV AH,4CHINT 21H;回到起始状态,不断循环DELAY1 PROC NEAR ;短延时子过程PUSH CX ;CX入栈保护(保护外循环次数)MOV CX,08000H ;置LOOP次数T:LOOP T ;跳转至本身,延时作用POP CX ;CX出栈RET ;返回DELAY1 ENDPDELAY2 PROC NEAR ;长延时子过程PUSH AX ;AX(AL)入栈保护PUSH CX ;CX入栈保护MOV CX,0010H ;置LOOP次数K:CALL DELAY1 ;调用短延时LOOP K ;循环一次,CX减1POP CX ;数据出栈,先进后出POP AXRET ;返回DELAY2 ENDPDELAY3 PROC NEAR ;长延时子过程PUSH AX ;AX(AL)入栈保护PUSH CX ;CX入栈保护MOV CX,0010H ;置LOOP次数Q:CALL DELAY1 ;调用短延时LOOP Q ;循环一次,CX减1POP CX ;数据出栈,先进后出POP AXRET ;返回DELAY3 ENDPCODES ENDSEND START。

微机接口与技术利用8255并行接口控制LED发光二极管的亮灭来模拟十字路口..

微机接口与技术利用8255并行接口控制LED发光二极管的亮灭来模拟十字路口..

目录一.内容 (2)二、技术资料 (2)三.原理 (7)四、电路图 (8)五、详细设计 (9)六.流程图 (11)七.代码 (11)八.调试过程及结果 (16)九.总结: (19)十、答辩 (20)十一、参考资料 (22)一.内容利用8255并行接口控制LED发光二极管的亮灭来模拟十字路口交通灯直行和转向的控制。

设计要求如下:设有一个十字路口,东西南北方向,初始态为4个路口的红灯全亮。

之后,直行车道东西路口的绿灯亮,南北路口的红灯亮,转向灯东西路口的红灯亮,南北路口的绿灯亮。

延迟一段时间后,直行道东西路口黄灯亮,南北路口红灯亮,转向灯保持不变。

闪烁一段时间后,直行车道东西路口的红灯亮,南北路口的绿灯亮,转向灯东西路口的绿灯亮,南北路口的红灯亮。

延迟一段时间后,东西路口绿灯亮,南北路口黄灯亮,转向灯保持不变,之后,重复上述过程。

二、技术资料1、74LS1381)、74138译码器在本实验中的作用:由于在对8255A写控制字时只有C口可以实现高四位输入,低四位输出,然而集成箱中的接口不够多,因此通过74138译码器实现动态的设置到计时2)、74138译码器的功能分析:Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7S3二进制译码器74138 S2S1A2 A1 A0图一、74138译码器的引脚排列图和逻辑符号表1-3:74138译码器真值表输入输出S1 S1+S3 A2 A1 A0 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 11 0 0 1 1 1 1 1 0 1 1 1 11 0 1 0 0 1 1 1 1 0 1 1 11 0 1 0 1 1 1 1 1 1 0 1 11 0 1 1 0 1 1 1 1 1 1 0 11 0 1 1 1 0 1 1 1 1 1 1 00 d d d d 1 1 1 1 1 1 1 1d 1 0 d d 1 1 1 1 1 1 1 12、8255A1)简介8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。

8255控制led灯和汇编语言控制主板发声

8255控制led灯和汇编语言控制主板发声

实验一8255a控制LED灯输出实验要求1.识别仪器上的键盘输入,在LED灯上输出相应字符(0~F)2.将仪器上原来一行4个键,共4列16个键的键盘,对应固定的LED 灯,6个一组(共6个LED灯),第七个控制第一个灯,如此循环3.按住相应键后,显示相应键值在灯上,并且松开后依然不变,直到摁到其他键,6个灯只能亮一个,并且多次按一个键,灯会从左向右循环亮。

8255A引脚图sstack segment stackdb 1024 dup(0)sstack endsdata segmentLEDtb db 0C0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb 80h,90h,88h,83h,0c6h,0a1h,86h,8ehlq db ?data endscode segment 'code'assume cs:code,ds:data,ss:sstackstart:mov ax,datamov ds,axmov dx,06c6h ;初始化控制字81hmov al,10000001bout dx,all1: mov ah,11111110B ;操作灯亮的位置mov dx,06c0h ;通过端口A实现mov al,00000000B ;初始化数码管out dx,almov cx,4 ;循环计数l2:mov dx,06c2h ;通过B端口初始化mov al,ahout dx,almov dx,06c0hmov al,00000000Bout dx,alshl ah,1 ;移位,使亮灯移位or ah,1 ;使只有一个灯亮mov dx,06c4h ;C端口操作in al,dx ;读入行,看是否是哪行为0 and al,00001111b ;高4位清零cmp al,0Fhjnz l3loop l2cmp cl,0jz l1l3: mov bx,0not aland al,00001111bl4:inc blshr al,1cmp al,0jnz l4mov al,bldec alshl al,2mov ah,4sub ah,cladd al,ahinc almov lq,aldec lqs1: cmp al,6jg s2jmp l3s2:sub al,6jmp s1s3: ;输出字符dec almov cl,almov bl,01hshl bl,clmov al,blnot almov dx,06c2hout dx,almov dx,06c0hmov si,offset LEDtbmov bl,lqmov bh,0add si,bxmov al,[si]not alout dx,aljmp s1mov ax,4c00hint 21hcode endsend start实验二汇编 8255/8253 操作主板扬声器实验要求通过汇编语言程序操作8255/8253控制主板扬声器,演奏一段乐谱(真心英雄)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一8255a控制LED灯输出实验要求1.识别仪器上的键盘输入,在LED灯上输出相应字符(0~F)2.将仪器上原来一行4个键,共4列16个键的键盘,对应固定的LED 灯,6个一组(共6个LED灯),第七个控制第一个灯,如此循环3.按住相应键后,显示相应键值在灯上,并且松开后依然不变,直到摁到其他键,6个灯只能亮一个,并且多次按一个键,灯会从左向右循环亮。

8255A引脚图sstack segment stackdb 1024 dup(0)sstack endsdata segmentLEDtb db 0C0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb 80h,90h,88h,83h,0c6h,0a1h,86h,8ehlq db ?data endscode segment 'code'assume cs:code,ds:data,ss:sstackstart:mov ax,datamov ds,axmov dx,06c6h ;初始化控制字81hmov al,10000001bout dx,all1: mov ah,11111110B ;操作灯亮的位置mov dx,06c0h ;通过端口A实现mov al,00000000B ;初始化数码管out dx,almov cx,4 ;循环计数l2:mov dx,06c2h ;通过B端口初始化mov al,ahout dx,almov dx,06c0hmov al,00000000Bout dx,alshl ah,1 ;移位,使亮灯移位or ah,1 ;使只有一个灯亮mov dx,06c4h ;C端口操作in al,dx ;读入行,看是否是哪行为0 and al,00001111b ;高4位清零cmp al,0Fhjnz l3loop l2cmp cl,0jz l1l3: mov bx,0not aland al,00001111bl4:inc blshr al,1cmp al,0jnz l4mov al,bldec alshl al,2mov ah,4sub ah,cladd al,ahinc almov lq,aldec lqs1: cmp al,6jg s2jmp l3s2:sub al,6jmp s1s3: ;输出字符dec almov cl,almov bl,01hshl bl,clmov al,blnot almov dx,06c2hout dx,almov dx,06c0hmov si,offset LEDtbmov bl,lqmov bh,0add si,bxmov al,[si]not alout dx,aljmp s1mov ax,4c00hint 21hcode endsend start实验二汇编 8255/8253 操作主板扬声器实验要求通过汇编语言程序操作8255/8253控制主板扬声器,演奏一段乐谱(真心英雄)。

实验思路通过8255设置引脚PB1 PB0的状态来选通8253,然后通过设置8253芯片的控制字来控制扬声器。

读入乐谱,频率送入计数器2(42h),控制扬声器发声。

发声时间上,因为只要通过8255A将扬声器打开而不关闭,那么只要8253正常工作,扬声器就会一直发声,需要发声时间多长,只需要写一个延时子程序即可,利用LOOP和跳转指令就可以得到一个双循环程序,在根据指令时间依次乘以LOOP循环的次和跳转指令的跳转次数就可以得到想要的延时时间。

子程序循环完毕在将扬声器关闭即可。

延时子程序时间的长短就是发声时间的长短。

sstack segment stackdb 1024 dup(0)sstack endsdata segmentyuefu dw 7227h,6084h,5420h,4551h,4056h,3613hdw 3407h,3042h,2701h,2414h,2275hzi db 2,5,2,5,2,4db 4,5,1,5,1,3db 2,4,2,4,2,3db 4,4,1,5,1,4db 1,3,1,2,1,3,1,2,1,3,1,2db 2,3,2,3,2,0db 6,1db 2,1,2,-1,2,-1db 2,2,2,2,2,1db 4,2,1,2,1,8db 2,7,2,7,2,7db 4,3,1,3,1,3db 2,4,1,4,1,3,1,4,1,3db 2,4,2,4,1,4,1,5db 6,4data endscode segment 'code'assume cs:code,ds:data,ss:sstackstart:mov ax,datamov ds,axmov dx,43h ;初始化控制字mov al,10110111bout dx,alL1:mov bl,0L2:mov al,blshl al,1mov si,offset zimov ah,0add si,axmov cl,[si]mov ch,0inc simov al,[si]cmp al,-1jz L3mov si,offset yuefushl al,1add si,axmov ax,[si]jmp L4L3: call speakoffcall delaycall speakoncall checkcmp bx,-1jz exitloop L3jmp L5L4:call speakoncall opencall delaycall checkcmp bx,-1jz exitloop L4L5:call speakoffcall delaycall speakoninc blcmp bl,47jz L1jmp L2exit :call speakoffmov ax,4c00hint 21hdelay procpush bxpush cxmov bx,03FFH l3: xor cx,cxl2: loop l2dec bxjnz l3pop cxretdelay endpspeakon proc ;扬声器开子程序push axin al,61h ;读取61h端口的原控制信息or al,03h ;D1D0=PB1 PB0=00b,其他位不变out 61h,al ;直接控制发音pop axretspeakon endpspeakoff proc ;扬声器关子程序push axi n al,61h ;读取61h端口的原控制信息a nd al,0fch ;D1D0=PB1 PB0=00b,其他位不变o ut 61h,alpop axretspeakoff endpopen procout 42h,al ;写入低八位数值mov al,ahout 42h,al ;写入高八位数值retopen endpcheck procpush axmov ah,0bh 0B DOS功能调用,检验键盘状态int 21hcmp al,0ffh ;是否没有输入jnz zumov bx,-1zu : pop axretcheck endpcode endsend start实验要求当按下1~8数字键是,分别发出连续的中音1~7和高音i(当按其他键时暂停发音,当按下‘s’键时推出程序,返回操作系统)实验思路在PC/XT/AT家族中,计时器芯片的3个通道都用其专门的功能,通道2是用来控制计算机的扬声器的声音频率的。

通道2用于产生频率信号,故工作方式在方式3,计数值为6A4H=1190,方波输出频率为1.19MHz/1190=1KHz,此信号决定了扬声器的声调,而通道2的控制字则为0B6H,1.19M约等于十六进制12348CH。

8253的通道2计数由8255A的PB0控制,当PB0输出为高电平的时候,是门GATE2为高电平。

此时,8253的通道2允许计数,故通道2的输出方波受PB0控制,从而控制扬声器的音调高低。

通道2的输出能否对扬声器产生持续控制还取决于8255A的PB1。

当PB1为“0”时,OUT2不能通过“与门”;反之则可通过“与门”控制扬声器。

所以,扬声器发音时间的长短取决于8255A的PB1信号。

另外,CPU通过8255A的C口,得知5283通道2的状态和扬声器驱动器的状态。

由上可知,需要扬声器正常发声,需要8253和8255A的协同工作,而8253的控制字为43H,则同过下面的程序来初始化8253。

sstack segment stackdb 1024 dup(0)sstack endsdata segmentyuefu dw 7227h,6084h,5420h,4551h,4056h,3613hdw 3407h,3042h,2701h,2414h,2275hdata endscode segment 'code'assume cs:code,ds:data,ss:sstackstart:mov ax,datamov ds,axmov dx,43h ;初始化控制字mov al,10110111bout dx,alinput: ;判断键盘输入mov ah,08h ;读光标处字符及其属性,根据输入字符控制主板发音int 21hcmp al,'1'jz l1cmp al,'2'jz l2cmp al,'3'jz l3cmp al,'4'jz l4cmp al,'5'jz l5cmp al,'6'jz l6cmp al,'7'jz l7cmp al,'8'jz l8cmp al,'s'jz exitjz input ;如果不是输入以上字符,将没有反应,继续检测输入l1: call speakonmov ax,4551hcall opencall delaycall speakoffjmp inputl2: call speakonmov ax,4056hcall opencall delaycall speakoffjmp inputl3: call speakonmov ax,3613hcall opencall delaycall speakoffjmp inputl4: call speakonmov ax,3407hcall opencall delaycall speakoffjmp inputl5: call speakonmov ax,3042hcall opencall delaycall speakoffjmp inputl6: call speakonmov ax,2701hcall opencall delaycall speakoffjmp inputl7: call speakonmov ax,2414hcall opencall delaycall speakoffjmp inputl8: call speakonmov ax,2275hcall opencall delaycall speakoffjmp inputexit : ;程序终止call speakoffmov ax,4c00hint 21hdelay procpush bxpush cxmov bx,03FFHs1: xor cx,cx ;清零cxs2: loop s2dec bxjnz s1pop cxpop bxretdelay endpspeakon proc ;扬声器开子程序p ush axi n al,61h ;读取61h端口的原控制信息o r al,03h ;D1D0=PB1 PB0=11b,其他位不变o ut 61h,al ;直接控制发音p op axr etspeakon endpspeakoff proc ;扬声器关子程序p ush axi n al,61ha nd al,0fch ;D1D0=PB1 PB0=00b,其他位不变o ut 61h,al ;直接控制闭音p op axr etspeakoff endpopen procout 42h,almov al,ahout 42h,alretopen endpcode endsend start林棋 0906840225 计科一班在第四周的汇编语言实验中,我感觉到了生产实习中最大的挑战。

相关文档
最新文档