已阅读5页,还剩73页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
例1,设内存DATA单元存放一个无符号字节数据0B5H,编写程序将其拆成两位十六进制数,并存入HEX和HEX1单元的低4位。HEX存放高位十六进制数,HEX1单元存放低位十六进制数,DSEG SEGMENTDATA DB B5HHEX DB ?,? DSEG ENDS,CSEG SEGMENTASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG MOV DS,AX MOV AL,DATA MOV AH,AL AND AL,0F0H,MOV CL,4 SHR AL,CL MOV HEX,AL AND AH,0FH MOV HEX+1,AH MOV AH,4CH INT 21HCSEG ENDS END START,MOV CL,4 SHR AL,CL MOV HEX,AL AND AH,0FH MOV HEX+1,AH MOV AH,4CH INT 21HCSEG ENDS END START,DATA SEGMENTHEX DB 0ABH,37HDAT DB ?DATA ENDS,CODE SEGMENT ASSUME CS:CODE,DS:DATA,MOV AH,4CHINT 21HCODE ENDSEND START,START:,MOVAX,DATAMOV DS,AX,MOV AL,HEXAND AL,0FHMOV CL,4SHL AL,CLMOV BL,HEX+1AND BL,0FHADD AL,BLMOV DAT,AL,例2设HEX、HEX+1单元的低四位分别存放一位十六进制数,编制程序将其合并为一个字节,并存入DAT单元。其中HEX单元中数据作为高位部分。,例3在地址偏移量为3000H的ALF单元开始,存放一个压缩的BCD码,将其转化为ASCII码,存放在接下来的BLF开始的单元中。,DATA SEGMENTORG 3000HALF DB 89HBLF DB 2 DUP(?)DATA ENDS,CODE SEGMENT ASSUME CS:CODE,DS:DATA,START:,MOV AX,DATAMOV DS,AXMOV AL,ALFMOV BL,ALMOV CL,4SHR AL,CLOR AL,30H,MOV BLF,ALAND BL,0FHOR BL,30HMOV BLF+1,BL MOV AH,4CHINT 21HCODE ENDSEND START,DATA SEGMENTORG 1000HDAT1 DB -1,2,3,-9COUNT DW NMN DB ?DATA ENDS,CODE SEGMENT ASSUME CS:CODE,DS:DATA,CODE ENDSEND START,START:MOV AX ,DATA MOV DS, AX,MOV AH,4CHINT 21H,MOV SI,OFFSET DAT1MOV CX,COUNTMOV BL,SIINC SIDEC CXCMP BL,SIJL NEXTXCHG BL,SI,NEXT:INC SI DEC CX JNZ AGAIN MOV MN,BL,AGAIN:,例4:求N个带符号字节中的最小数,例5、从内存ADR单元开始,连续存放出1000个学生的某门课成绩. 统计90100, 7089, 6069, 60以下各段人数.解: 设 CX: 计数器, SI: 地址指针. 定义: S5, S6 ,S7 ,S9 单元 存放各分数段的人数. AL: 待查分数.,DATASEGMENTADRDB68, 59 , 85, 96, 76COUNT DW1000S5DW0S6DW 0S7DW0S9DW0DATAENDS,CODESEGMENTASSUMECS:CODE, DS:DATASTART:MOVAX, DATAMOVDS, AXMOVSI, OFFSET ADRMOVCX, COUNT,AGAIN:MOVAL, SICMPAL, 60JLNEXT1CMPAL, 70JLNEXT2CMPAL, 90JGENEXT3INCWORD PTR S6 JMP STOP,NEXT1:INCWORD PTR S9JMPSTOPNEXT2:INCWORD PTR S7JMPSTOPNEXT3:INCWORD PTRS5STOP :INCSIDECCXJNZAGAINMOVAH,4CHINT21HCODEENDSENDSTART,ADRDB250 DUP (68, 59 , 85, 96),思考:如果多加一个分数段“8090”呢?,例6,计算 X20 (0X8)Y= 5X-2 (8X15) X (其它)设X为单字节带符号整数,且存在ARGX单元,计算结果Y存入RLT单元,分析:求X绝对值,若X为正数,则是其本身,若X为负数,则将其取补,也就是连同其符号位在内一起取补,原来的负数变成了正数,即X的绝对值,5X可用X*2*2X的算法求得,DATASEGMENTARGXDB7RLTDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXXORAX,AXMOVAL,ARGXCMPAL,0JGNEXT1NEGALJMPSTOP,NEXT1:CMPAL,15JLNEXT2JMPSTOP,NEXT3:SAL AL,1 JNC GO1 INC AH GO1: SAL AL,1 JNC GO2 INC AH GO2: ADD AL,ARGXADCAH,0SUBAX,2 STOP: MOVRLT,AX MOVAH,4CHINT21HCODEENDSENDSTART,NEXT2:CMPAL,8JGNEXT3ADDAL,20 ADC AH,0JMPSTOP,X20 (0x=8)5X2 (8x15)x (其它),Y,MOV BL,5IMUL BL,例7:编制程序统计AX寄存器中有多少位置“1”,将置“1”的位数送往CL寄存器中。,DATA SEGMENTDAT DW 30CONUT DB 16DAT1 DB ?DATA ENDSCODE SEGMENT ASSUME CS: CODE,DS: DATA,START:MOV AX, DATA MOV DS, AX MOV CL, 0 MOV AX,DAT MOV CH, COUNT,AGAIN: ROL AX ,1;ROR JNC NEXT INC CLNEXT: DEC CH JNZ AGAIN MOV DAT1, CL,MOV AH, 4CH INT 21HCODE ENDS END START,思考:如果不想改变AX寄存器内容怎么办?,例8、编程:求解123NBX转NEXT MOV AX,BX ;小于,则大数送AX,NEXT:,MOV MAX,AX ;完,则存大数 HLT,INC BX ;修改指针 INC BX,回顾以前学习的如何求得100个16位带符号数得最大值?,DSEGSEGMENTDATA DB-1,3,-5COUNTDW50RLT DW0DSEGENDS,CODESEGMENTASSUMECS:CODE,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXMOVSI,OFFSET DATAMOVCX,COUNTMOVDX,0AGAIN:MOVAL,SICMPAL,0JGEPLUSINCDX,方法2:ANDAL,ALJNSPLUS,PLUS:INCSIDECCXJNZAGAINMOVRLT,DXMOVAH,4CHINT21HCODEENDSENDSTART,例10统计由DATA单元开始的字节数据块中负元素的个数。数据个数在COUNT单元,统计结果存入RLT单元。(两种方法),思考:还有其他指令可以吗?,DATA SEGMENTORG 0500HDAT DB 1,4,6,9,10RLT DW ?COUNT DW 10DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,START:,MOV AX,DATAMOV DS,AXMOV SI,OFFSET DATMOV CX,COUNTXOR AX,AX,ADD AL,SIADC AH,0INC SIDEC CXJNZ AGAIN,AGAIN:,MOV RLT,AXMOV AH,4CHINT 21HCODE ENDSEND START,用字操作指令,XOR AX,AX XOR DX,DXAGAIN:MOV AL,SI ADD DX,AX MOV RLT,DX,例11.求10个无符号字节数的和(用8位数的运算指令),结果用两个字节表示。(0500H开始,结果050AH和050BH,高位在050BH中),DATA SEGMENTORG 0100HDAT1 DB 11H,13H,24H, 34HDAT2 DB 22H,23H,78H, 14HRLT DB 10 dup(?)COUNT DW 10DATA ENDS,CODE SEGMENT ASSUME CS:CODE,DS:DATA,START:,MOV AX,DATAMOV DS,AXMOV SI,OFFSET DAT1MOV DI,OFFSET DAT2MOV BX,OFFSET RLTMOV CX,COUNTCLCMOV AL,SIADC AL,DI,DAA MOV BX, ALINC SIINC DIINC BXDEC CXJNZ AGAINMOV AH,4CHINT 21HCODE ENDSEND START,AGAIN:,例12.0100H和010AH单元,各存放一个10字节的BCD数(组合,地位地址存放低位字节),求这两个数的和,且把和放在0114H开始的存储单元,例13:若有一输入的ASCII码串STRING,长度在COUNT单元中,要把其中的数码取出,转换为未组合的BCD码,放在另一存储区BUFFER中,并统计数码串的长度。(不讲),DATASEGMENTSTRING DBAB*98*CD543*COUNT DW12BUFFER DB 12 DUP (?)CON DB ?DATAENDSCODESEGMENTASSUMECS:CODE, DS:DATASTART:MOVAX, DATAMOVDS, AXMOVCX, COUNTMOVBL, 0MOVSI, OFFSET STRINGMOVDI, OFFSET BUFFERAGAIN:MOVAL, SIINCSI,INC DIINCBLNEXT:DECCXJNZAGAIN MOV CON, BLMOVAH, 4CHINT21HCODEENDSENDSTART,CMPAL, 30HJBNEXTCMPAL, 39HJANEXTANDAL, 0FHMOVDI, AL,例14:编制程序统计AX寄存器中有多少位置“1”,将置“1”的位数送往CL寄存器中。,DATA SEGMENTDAT DW 30DATA ENDSCODE SEGMENT ASSUME CS: CODE,DS: DATA,START:MOV AX, DATA MOV DS, AX MOV CL, 0 MOV AX,DAT,AGAIN: CMP AX, 0 JZ NEXT SHL AX,1 JNC AGAIN INC CL JMP AGAIN,NEXT:MOV AH, 4CH INT 21HCODE ENDS END START,思考:如果不想改变AX寄存器内容怎么办?,DATASEGMENTORG1000HDAT1DB20 DUP(1,2,3,4,5)COUNTDW100ORG2000HDAT2DB100 DUP(?)DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AX,方法2AGAIN:MOVSBDECCXJNZAGAIN,方法3REP MOVSB,MOVAH,4CHINT21HCODEENDSENDSTART,例15.串操作:自1000H单元开始有一个100个数的字节数据块,要把她们传送到2000H开始的单元中,用3种方法:不用串;用单个传送的串操作;用数据块成组传送(REP)。,MOV CX,COUNT LEA SI,DAT1 LEA DI,DAT2AGAIN:MOV AL,SI MOV DI,AL INC SI INC DI DEC CX JNZ AGAIN,DATA SEGMENTBUF DW 8970H,0FA59H,1123HDATA ENDS,CODE SEGMENT ASSUME CS:CODE,DS:DATA,MOV AH,4CHINT 21HCODE ENDSEND START,START:,MOVAX,DATAMOV DS,AX,MOV AX,BUFCMP AX,BUF+1JGE NEXTXCHG AX,BUF+1,NEXT:,例16.从BUF开始,有三个不同的16位带符号数,编制程序,将较大的数存放在AX中,较小的数放在BX中。,5X-7(0X8)3X (8=X15)0 (其他),例17、计算Y设X为字节数据,在DAT单元存放,计算结果并存入MEM单元.,DATA SEGMENTDAT DB 13HMEM DB ?DATA ENDS,CODE SEGMENT ASSUME CS:CODE,DS:DATA,START:MOV AX,DATA MOV DS,AX MOV AL,DAT MOV BL,AL CMP AL,0 JLE NEXT CMPAL,15 JGE NEXT CMP AL,8 JL NEXT2 SHL AL,1,ADD AL,BLJMP STOP,NEXT:MOV AL,0 JMP STOPNEXT2:MOV CL,2 SHL AL,CL ADD AL,BL SUB AL,7 STOP:MOV MEM,AL MOV AH,4CH INT 21H CODE ENDS END START,MUL BL,例1:将2片6264(2764)连接到8086系统总线上,其内存地址为70000H73FFFH。,例2:用6264(8K8RAM)二片,建立08000H0BFFFH的的内存区。,分析:1、片数2片16K/8k 2、数据线:8根 3、片内寻址:8K213,A12A0连接A13A1。 4、每片的地址范围如下,74S138译码,5、控制线:WR 、RD,IO/M,或,例3:下图为一SRAM芯片,用该芯片扩展成一个8K8的存储器。(1)写出该芯片的存储容量,共需多少这样的芯片才能满足上述要求?(2)若该芯片与8086CPU相连,起始地址为02000H,且地址连续,请用全译码法画出满足要求的连接图。,分析:(1)A11A0一共12根地址线,字数为2124K。连接A12A1 D0D3一共4根数据线,位数为4。容量4K4。8K8/4K44片。,(2)地址02000H开始,一共8K8,213,到03FFFH结束。与8086相连,则这4片为一组。,(2)地址02000H开始,到03FFFH结束。与8086相连,则这4片为一组。选择的芯片是4K的,所以片内寻址部分为A1A12。,例4利用2K8位的静态RAM 6116构成8086的从F1000HF1FFFH的内存,请用全译码法画出6116与8086CPU系统总线的连接图。,分析:6116芯片如右图所示。2K211,地址线A0A10,8位的数据线D0D7。构成8086的从F1000HF1FFFH的内存,容量为00000H00FFFH,=21284K8.所以: 4K8/2K82片。,(2)地址F1000H开始,一共8K8,213,到F1FFFH结束。与8086相连,则这2片为一组。选择的芯片是2K的,所以片内寻址部分为A1A11。,习题1、 对由8K8位,RAM组成的存贮器系统,若某组的起始地址为08000H,则其末地址为 H。,09FFFH,习题2:图为SRAM芯片,利用该芯片构成8086的从E8000HEFFFFH的内存.1.该芯片的存储容量多少?需要几片才能满足要求?2.画出片选信号/CS产生的电路.,分析:芯片如右图所示。地址线A0A13,14根地址线,2 14 16K,8位的数据线D0D7。所以容量为16K8。构成8086的从E8000HEFFFFH的内存,容量为00000H07FFFH,=215832K8.所以: 32K8/16K82片。,(2)地址E8000H开始,到EFFFFH结束。与8086相连,则这2片为一组。选择的芯片是16K的,所以片内寻址部分为A1A14。,A18,M/IO,例1:系统中有一片8259A,中断请求信号用电平触发方式,要用ICW4,中断类型码为60H67H,用特殊完全嵌套方式,无缓冲,采用中断自动结束方式。设端口地址为20H,21H。,1,1,0,0,1,1,A0,D7 D6 D5 D4 D3 D2 D1 D0,ICW1:1BH,D7 D6 D5 D4 D3 D2 D1 D0,0,1,A0,0,0,1,1,0,0,0,中断类型号的高5位,ICW2与中断类型号高5位一致,低3位16位机的时候无效。,ICW2:60H,ICW4,MOV AL,1BHOUT 20H,AL;写ICW1,ICW4:13H,MOV AL,60HOUT 21H,AL;写ICW2,MOV AL,13HOUT 21H,AL;写ICW4,例2:系统中有一片8259A,中断请求信号用电平触发方式,要用ICW4,中断类型码为60H67H,用特殊完全嵌套方式,无缓冲,采用中断自动结束方式。设端口地址为93H,94H。,ICW1:1BH,需要注意的就是ICW1的A0要求是0,其它A0要求是1。,ICW2:60H,MOV AL,1BHOUT 94H,AL;写ICW1,ICW4: 13H,MOV AL,60HOUT 93H,AL;写ICW2,MOV AL,13HOUT 93H,AL;写ICW4,例3:单片8259A,完全嵌套方式。8259A的IR0IR7中断类型号依此为08H0FH,端口地址为20H21H,中断采用边沿触发方式,缓冲器方式,发EOI中断结束,全嵌套优先级管理的工作方式。,ICW1:00010011B,ICW2:00001000B,MOV AL,13HOUT 20H,AL;写ICW1,ICW4: 00001101B,MOV AL,80HOUT 21H,AL;写ICW2,MOV AL,0DHOUT 21H,AL;写ICW4,例4:8086系统采用级联方式,主8259A的中断类型码从30H开始,端口地址为20H、21H,中采用边沿触发方式。从片8259A的INT接主片的IR7,从片中断类型码从40H开始,端口地址为22H、23H,采用边沿触发方式,主从片均不需要ICW4。,MOV AL,00010000BMOV DX,20HOUT DX,AL;写ICW1,MOV AL,30HINC DXOUT DX,AL;写ICW2,MOV AL,80H;OUT DX ,AL;写ICW3,(1)主8259A初始化,(2)从片初始化,主片,从片,MOV AL,00010000BMOV DX,22HOUT DX,AL;写ICW1,MOV AL,40HINC DXOUT DX,AL;写ICW2,MOV AL,07H;OUT DX ,AL;写ICW3,填空:1、单片8259可管理( )级可屏蔽中断。4片级联最多可管理( )级。最大可扩展( )级。,29,8,64,2、8259的A0接地址总线A1时,若其中一个端口地址为82H,另一个端口地址为( )H;若某外设的中断类型码为86H,则该中断源应和8259的中断请求寄存器IRR的( )输入端相连。,80,IR6,3、16位微机系统中,有一片8259构成中断控制系统。设在片内A00时端口的地址为PA,在片内A01时的端口地址为PB。,MOV DX,PAMOV AL,00011011B;ICW1OUT DX,AL,MOV DX,PBMOV AL,10001000B;ICW2OUT DX,AL,MOV AL,00001101B;ICW4OUT DX,AL,MOV AL,11000010B;OCW1OUT DX,AL,(1)、中断结束的方式为( )。(2)、中断级IR2的中断类型码为( )。(3)、IR1和IR2上有效的中断请求信号在IF=1时能否引起CPU的中断?,非自动结束,(ICW4的D1位0),(ICW2),8AH,IR1不能引起CPU中断,IR2能引起CPU中断。(OCW1的D1和D2,是0不屏蔽,开放;是1屏蔽,禁止。),4、若中断向量表中地址为0040H单元中存放的是1234H,0042H单元中存放的是5679H,试问:(1)这些单元对于的中断类型号是什么?(2)该中断服务程序的起始地址是什么?,分析:中断向量表地址中断类型号4可以用二进制表示的中断类型号左移2位。,反过来,中断类型号用二进制表示的中断向量地址逻辑右移2位。,(1)由0040H01000000B右移后00010000B10H16D,(2)中断向量即中断服务程序的起始地址。逻辑地址CS:IP=5678H:1234H,已知中断类型号N,取(4N,4N+1) IP取(4N2,4N+3) CS,5、对于8259可编程控制器,当其单片使用时可同时接收( 8 )外设的中断请求;当级联使用时主片的( IRi )应与从片的( INT )连接。,A.8个 B.12个 C.4个 D.16个,6、3片8259级联,最多可以接( )个可屏蔽中断源。,(8从片个数)从片个数8(82)2822个,22,7、某一可编程中断控制器8259A的IR3接在一个输入设备的中断请求输出线上,其中断类型号为83H,问该片的中断类型号的范围是多少?,分析:中断类型号高5位都相同,所以是80H开始,后3位由所接的IRi决定。所以范围是连续8位:80H87H。,8、某中断控制器8259A,初始化命令字ICW2内容为23H,问该片的中断类型号的范围是多少?,分析:一部分取自初始化命令字ICW2的高5位,另一部分来自IRi编号。,20H27H,例1设某系统中有两片8255芯片,由74LS138译码器产生两个芯片的片选信号。要求:第一片8255(J1)的A口工作在方式0输出,B口工作在方式0输入,C口高4位为输出,低4位为输入。第二片8255(J2)的A口工作在方式0输入,B口工作在方式1输出,C口高4位输出,C口低4位为B口控制信号。(1)试指出两片8255芯片各自的端口地址;(2)试写出两片8255芯片各自的方式控制字;(3)试写出两片8255芯片各自的初始化程序。,解:(1)根据译码电路图,可分析出:J1的A,B,C和控制口的地址分别为0138H,013AH,013CH,013EH。J2的A,B,C和控制口的地址分别为0130H,0132H,0134H,0136H。 (2)按照8255方式控制字的格式,两片8255的控制字分别为J1:10000011B J2:10010100B或10010101B,第一片8255(J1)的A口工作在方式0输出,B口工作在方式0输入,C口高4位为输出,低4位为输入。第二片8255(J2)的A口工作在方式0输入,B口工作在方式1输出,C口高4位输出,C口低4位为B口控制信号。,(3)J1的初始化程序为 MOV DX,013EH MOV AL,83H OUT DX,ALJ2的初始化程序为MOV DX,0136H MOV AL,94H(或95H)OUT DX,AL,例2.8255的A0,A1管脚和8086CPU的A0,A1两根地址线分别直接相连,已知8255的端口地址是唯一的,且8255的控制口地址为0047H,A口工作于方式1输入,B口工作于方式0输出,C口除了联络信号线外其余的作为输出。(1)写出8255A口,B口,C口的端口地址。(2)写出8255的初始化程序。,(1)A口地址为0044H,B口地址为0045H,C口地址为0046H。(2)8255的初始化程序。 MOV DX,0047H MOV AL,10110000B OUT DX,AL,例3.若8255的A0和CPU的A0直接相连,8255的A1和CPU的A1直接相连,已知8255的C口地址为0C2H,回答以下问题:(1)写出8255的其它端口地址。(2)要使8255的PC6置1,下面程序是否正确,若不正确,写出正确的程序。 MOV DX,0C2H MOV AL,00001101B OUT DX,AL(3)若要求A口、B口均工作于方式0, A口输入, B口输出, C口输出,编写初始化程序。,(1)写出8255的A口地址为0C0H,B口地址为0C1H,控制口地址为0C3H。,(2)不正确 MOV DX,0C3H MOV AL,00001101B OUT DX,AL,(3) MOV DX,0C3H MOV AL,10010000B OUT DX,AL,2)要使8255的PC6置1,下面程序是否正确,若不正确,写出正确的程序。 MOV DX,0C2H MOV AL,00001101B OUT DX,AL,(3)若要求A口、B口均工作于方式0, A口输入, B口输出, C口输出,编写初始化程序。,例3.若8255的A0和CPU的A0直接相连,8255的A1和CPU的A1直接相连,已知8255的C口地址为0C2H,,例4某微机控制系统中扩展一片8255作为并行口,如图所示。其中A口为方式1输入,以中断方式与CPU交换数据,中断类型号为0FH;B口为方式0输出,C口的普通I/O线作为输入。请编写8255的初始化程序,并设置A口的中断矢量。,解:从图上可得到8255的一组地址为00B0H,00B2H,00B4H,00B6H,或另一组地址为00B8H,00BAH,00BCH,00BEH。初始化程序:MOV AL,10111001B ;方式控制字MOV DX,00B6HOUT DX,ALMOV AL,00001001B ;PC4置1,开发A口的输入中断请求OUT DX,AL ;中断矢量设置程序,MOV AX,0MOV DS,AXMOV DI,0FH4;送中断向量表的偏移地址MOV AX,OFFSET SERV ;SERV为中断服务程序MOV DI,AX;将服务程序的入口地址IP存入INC DIINC DIMOV AX,SEG SERV;MOV DI,AX;将服务程序的入口地址CS存入,思考:如果给B口设置中断向量呢?,MOV AL,00000101B ;PC2置1,开发B口的输入中断请求OUT DX,AL ;中断矢量设置程序,例:用一片8255,PA0PA7接8盏灯,循环亮,每盏灯亮1秒。端口地址为0F8H0FBH,已知延时程序为Delay。,分析:A口输出低电平时,灯才会亮。,5V,MOVAL, 80H OUT0FBH, AL MOVAL, 0FFH OUT0F8H, AL MOVAL,0FEHAGAIN:OUT 0F8H, AL CALL DELAY RORAL, 1 JMP AGAIN,控制字:1000000B80H,所有灯全灭:A口写入0FFH11111111b,后依次亮,;第一盏灯亮,其余灭,;每盏灯依次亮,思考:若灯依次灭呢?,MOVAL, 80H OUT0FBH, AL MOVAL, 00H OUT0F8H, AL MOVAL,01HAGAIN:OUT 0F8H, AL CALL DELAY RORAL, 1 JMP AGAIN,思考题:若用2片8255的每片3个口都接灯,另一片的控制口地址为0F7H。,则共有48盏灯,控制字仍为80H,MOVAL, 80HOUT0FBH, ALOUT0F7H, ALMOVAL, 0FFHOUT0F8H, ALOUT0F9H, ALOUT0FAH, ALOUT0F4H, ALOUT0F5H, ALOUT0F6H,AL,例:由8255A口读入2位BCD码,将其位置互换(8338)后由B口输出,8255控制口地址为97H,试编制初始化程序。,MOVAL, 90HOUT97H, ALINAL, 94HMOVCL, 4ROLAL, CLOUT95H, AL,控制字:10010000B,例:如图所示,使8255A口为工作方式0,并作为输出,B口为工作方式0,作为输入,用一组开关信号接入B口,A口输出线接至一组发光二极管。完成用开关控制发光二极管亮灭的初始化程序,LED7,A7 A6 A5 A4 A3 A2 A1 A0 0 1 0 0 0 0 X X,端口地址40H43H,控制字:10000010B82H,MOVAL, 82H OUT43H, AL AGAIN :IN AL, 41H OUT40H, AL JMPAGAIN,例4 利用8255作为CPU与打印机的接口,硬件如图所示,B口工作于方式0输出。若要打印字符A,试编写此接口程序(STB为选通信号,BUSY为忙信号)。(未用的地址线置0),分析接口图可知A口,B口,C口,控制口地址分别为90H,94H,98H,9CH,接口程序如下: MOV AL,81H ;10000001B OUT 9CH,AL W:IN AL,98H TEST AL,08H JNZ W MOV AL,A OUT 90H,AL MOV AL,0EH OUT 9CH,AL INC AL OUT 9CH,AL,;从PC7发一个负脉冲, 将打印字符锁存在打印机,例1:某8253端口地址为F8HFBH,欲用通道0以方式1,按BCD计数,计数值为5080。,1.确定通道控制字;2.计数值的低8位为80;3.计数值的高8位为50。,初始化程序为:MOV AL,33HOUT 0FBH,ALMOV AL,80HOUT 0F8H,ALMOV AL,50HOUT 0F8H,AL,在计数过程中,8253读计数器现行值的方法:(将计数值存入内部锁存器),MOV AL,43H ;计数器1的锁存命令OUT 0FBH,AL;写入控制寄存器IN AL,0F9H ;读低8位MOV CL,AL ;存入CL中IN AL,0F9H ;读高8位MOV CH,AL ;存入CH中,例2:系统中8253芯片的通道0至通道2和控制端口的地址分别为0FFF0H,0FFF2H,0FFF4H和0FFF6H。1、通道0工作在方式2,CLK0=2MHZ,要求输出OUT0=1KHZ的速率波;2、通道1工作在方式0,其CLK1输入外部计数事件,每计满1000个向CPU发出中断请求。编写8253通道0和通道1的初始化程序。,2、8253通道1的初始化程序为 MOV AL,01100001B MOV DX,0FFF6H OUT DX,AL MOV AL,10H MOV DX,0FFF2HOUT DX,AL,1、N=2M/1K=2000=2000H(BCD),2、N10001000H(BCD),1、8253通道0的初始化程序为 MOV AL,00100101B MOV DX,0FFF6H OUT DX,AL MOV AL,20H MOV DX,0FFF0H OUT DX,AL,例3:编程,将8253计数器0设置为方式1,计数初值为3000, 计数器1设置为方式2,计数初值为2010H, 计数器2设置为方式4,计数初值为4030H。(设8253的端口地址为70H73H),N0=3000=3000H(BCD),MOV AL,00100011B ;送计数器0控制字OUT 73H,ALMOV AL,30HOUT 70H,AL ;送计数器0的计数初值MOV AL,01110100BOUT 73H,AL ;送计数器1的控制字MOV AL,10HOUT 71H,AL MOV AL,20HOUT 71H,AL ;送计数器1的计数初值MOV AL,10111000BOUT 73H,AL ;送计数器2的控制字MOV AL,30HOUT 72H,AL MOV AL,40HOUT 72H,AL ;送计数器2的计数初值,例5有如下接口原理如图所示。要求发光二极管L0亮5S后就熄灭;L1在K1启动后亮6S后就熄灭;L2亮4S灭4S交替进行。写出源程序片段(段
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论