


免费预览已结束,剩余28页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.实验一:简单程序设计实验(1) 编写一个32 位无符号数除法的程序,要求将存放在num1中的 32 位无符号数与存放在 num2 中的 16 位无符号数相除,结果存放在num3 和 num4中。程序流程图略。参考源程序:datasegmentnum1 dd 2a8b7654h num2 dw 5abch num3 dw ?num4 dw ?dataendscodesegmentassume ds:data, cs:codestart:mov ax,data;数据段寄存器初始化mov ds,axmov ax, word ptr num1 mov dx, word ptr num1+2 div num2mov num3,ax mov num4,dxmov ah,4ch;正常返回 dos 系统int 21hcodeends end start(2) 编写一个拆字程序。要求将存放在ary 单元的 2 位十六进制数x 1x 2 拆为 x 1 和 x 2 两部分,并以0x 1 和 0x 2 的形式分别存入ary+1和 ary+2 单元中。程序流程图略。参考源程序:datasegment ary db 2ah,?,?dataendscodesegmentassume ds:data, cs:codestart:mov ax,datamov ds,axmov si,offset ary;取ary 的偏移地址mov al,si;取16进制数至 al;.mov bl,aland al,0f0h;取16进制数的高四位,即x1shr al,4mov si+1,almov al,bl;存0x 1and al,0fh;取16进制数的低四位,即x2mov si+2,al;存0x 2mov ah,4chint 21hcodeends end start实验二:分支程序设计实验(1) 编写一个字符比较程序,比较3 个无符号字节数a ,b, c 的大小,并根据比较结果对变量 k 赋值:如果 3 个数不相等,则k=0 ;如果 3 个数中有两个相等,则k=1 ; 如果 3 个数都相等,则k=2 。程序流程图略。参考源程序:data segment;定义待比较数 a 、b、c,比较结果 k a db 20hb db 20h c db 20h k db ?dataendscodesegmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov al,acmp al,b;对a 、b进行比较,不相等则转到comp2jne comp2;相等则比较a 、ccmp al,cjne k1 jmp k2; a 、c不相等则 k=1; a 、c相等则 k=2comp2:mov bl,bcmp bl,cje k1;对 b、 c进行比较,相等则k=1cmp al,cje k1;对 a 、c进行比较,相等则k=1k0:mov k,0jmp exitk1:mov k,1jmp exitk2:mov k,2exit:mov ah,4chint 21hcodeends end start(2) 编写一个能实现下列表达式的程序:?n = ?a + ba b设 a, b, c 为小于 128 的正整数。? a - b + c程序流程图略。参考源程序:a bdatasegmenta db 22hb db 10h c db 01h;定义a 、b、c、nn db ?dataendscodesegmentassume cs:code, ds:datastart:mov ax,datamov ds,axmov al, a cmp al, bjg calculadd al,b;a小于或等于b 则 n=a+bjmp exitcalcul: sub al, badc al, cexit:mov n, al mov ah,4ch int 21hcodeendsend start实验三循环程序设计实验(1) 将字符串 strn (以 “ $结”尾)中的每一个字符均加上偶校验位,并统计有多少个字符因含有奇数个“ 1而”加上了校验位。统计结果存于n单元中。程序流程图略。参考源程序:da tasegmentstrn db what$;任意定义一个字串,以“$”结尾count equ $-strn n db ?buf db count dup(?)dataendscodesegmentassume cs:code, ds:data start:mov ax, datamov ds, ax mov ax, data mov es, axlea si, strn lea di, buf mov cx, count mov al, 0lp1:mov bl, si;逐个取字符进行判断and bl, bl;自己和自己做与运算jp next;根据 pf 标志位的变化进行跳转inc alorbl, 80h next:mov di, blinc siinc di loop lp1mov n, almov ah, 4ch int 21hcodeendsend start(2) 在 first开始的一片连续的数据区中存放着100 个数据,编写一个程序,统计第1个数据 0之前的数据个数。程序流程图略。参考源程序:da tasegmentfirst db 10h,24h,34h, 73h,20h,44h,03h,36h,41h;任取 9 个数做演示count equ $-firstnum db ?dataendscodesegmentassume cs:code, ds:data start:mov ax,datamov ds,axmov dl, 0;计数值初始为0mov cx,countmov bx, offset firstlp1:mov al, bx;每次取一个数,与0 比较cmp al, 00h jne nextjmp exit;找到 0 则退出next:inc dl;没找到 0 则计数值加1 inc bxloop lp1exit:mov num, dlmov ah, 4ch int 21hcodeends end start实验四:子程序设计实验将buf 开始的 10个单元中两位十六进制数转换成ascii 码,并在屏幕上显示出来。要求码型转换通过子程序hexasc 实现,参数传送采用寄存器传送方式。程序流程图略。参考源程序 :(1) 实现方法一:远过程调用da ta segmentbuf db 10h,2fh,0d0h,0feh,33h,0f0h,20h,10h,3dh,0a2hcount equ $-buf;定义任意长度的一段buf da ta endsstack1 segment stackdb 100 dup(?);设置足够深度的栈区stack1 endscodesegmentassume cs:code,ds:data,ss:stack1 start:mov ax,datamov ds,axmov si,offset buf mov cx,countagain:mov al,si;逐个取数mov bl,alshr al,4and al,0fh;先对高字节部分转换(寄存器al 传参)call far ptr hexasc;调用子程序mov dl,almov ah,02h;显示高字节部分对应的字符int 21hmov al,bland al,0fh;再对低字节部分转换(寄存器al 传参)call far ptr hexasc;调用子程序mov dl,almov ah,02h;显示低字节部分对应的字符int 21hmov dl,20hmov ah,02h;显示空格int 21hinc siloop againmov ah,4ch int 21hcodeendscodebsegmentassume cs:codeb hexascproc farcmp al,09h;判断是不是数字ja hexatof;是字母则转到hexatofadd al,30h;是数字则对应到数字的ascii 码jmp endhexhexatof:add al,37hendhex: ret;是字母则对应到字母的ascii码hexascendpcodebendsend start(2) 实现方法二:近过程调用da ta segmentbuf db 10h,2fh,0d0h,0feh,33h,0f0h,20h,10h,3dh,0a2hcount equ $-buf;定义任意长度的一段buf da ta endsstack1 segment stackdb 100 dup(?);设置足够深度的栈区stack1 endscodesegmentassume cs:code,ds:data,ss:stack1 start:mov ax,datamov ds,axmov si,offset buf mov cx,countagain:mov al,si mov bl,al;逐个取数shr al,4and al,0fhcall hexasc;先对高字节部分做转换mov dl,al;显示高字节部分对应的字符mov ah,02h int 21hmov al,bland al,0fh;再对低字节部分做转换call hexascmov dl,al;显示低字节部分对应的字符mov ah,02h int 21hmov dl,20h;显示空格mov ah,02h int 21hinc si;继续循环或退出loop againmov ah,4ch int 21hhexascproc nearcmp al,09h jahexatof addal,30h jmp endhexhexatof:add al,37h endhex: ret hexascendpcodeends end start.实验五:dos 中断调用实验(1)如果从键盘上依次输入的是一个数字和一个字母,则输出“ right ”标记后结束程序, 否则输出标记“error ”后转向原出错处重做。试编程实现该功能。程序流程图略。参考源程序 :da tasegmentmsg db 0ah,0dh,right,0ah,0dh,$ wrn db 0ah,0dh,error,0ah,0dh,$dataendscodesegmentassume cs:code, ds:data start:mov ax,datamov ds,axagain:mov ah,01h;等待用户输入1 个字符并显示int 21h cmp al,39h ja emsg cmp al,30hjb emsg;判断输入是否是数字,不是则报错mov ah,01h;等待用户输入1 个字符并显示int 21h cmp al,a jb emsgcmp al,z;判断输入是否是大写字母,不是则继续jb exit;判断是不是小写字母cmp al,a jb emsg cmp al,zjb exit;不是字母则报错,是字母则转到exitemsg:lea dx,wrnmov ah,09h int 21hjmp againexit:mov dx,offset msgmov ah,09h;显示 “ right”并退出 int 21hmov ah,4ch.int 21hcodeends end start( 2)编写一程序分类统计字符个数:即接收键入的一串字符(字符个数不超过50个,该字符串用回车作为结束),并按数字、字母和其它字符分类计数,然后将结果存入digit 、letter 和other 3 个存储单元中,并显示结果。程序流程图略。参考源程序 :da tasegmentmsg1 db 0ah, 0dh, number of digit:,20h,$ msg2 db 0ah, 0dh, number of letters:, 20h,$msg3 db 0ah, 0dh, number of other characters:, 20h, $ buf db 50db 0db 50 dup(?);设置足够深的栈区digit db ? letter db ? other db ?dataendsstack1segment stackdb 100 dup(?) stack1endscodesegmentassume cs:code,ds:data,ss:stack1 start:mov ax,datamov ds,axmov ah,0ah;等待用户输入字符串并显示mov dx,offset buf int 21hmov si, offset buf mov cl,si+1mov ch,00h mov al,00h mov ah,00h mov bh,00hagain: mov bl,si+2cmp bl,30hjb oth; ascii 码小于 30h 则归类为 “其它 ”cmp bl,3ahjb dig; ascii 码大于等于30h 小于 3ah 则归类为 “数字 ” cmp bl,41hjb oth; ascii 码大于等于3ah 小于 41h 则归类为 “其它 ” cmp bl,5bhjb let;ascii 码大于等于41h 小于 5bh 则归类为 “字母 ” cmp bl,61hjb oth; ascii 码大于等于5bh 小于 61h 则归类为 “其它 ” cmp bl,7bhjb let; ascii 码大于等于61h 小于 7bh 则归类为 “字母 ”oth:inc al; “其它 ”计数器加1 jmp endlpdig:let:inc ah; “数字 ”计数器加1jmp endlpinc bh; “字母 ”计数器加1endlp:inc siloop again;继续循环mov digit, ah;统计各类个数mov letter, bh mov other, almov dx, offset msg1 mov ah,09hint 21hmov al, digit call disp;显示 “数字 ”有多少个mov dx, offset msg2 mov ah,09hint 21hmov al, letter call disp;显示 “字母 ”有多少个mov dx, offset msg3 mov ah,09hint 21hmov al, other call disp;显示 “其它 ”有多少个mov ah,4ch int 21hdispproc near;显示子程序mov ah,00h mov dh,0ah div dhmovch,ah addal,30h movdl,al mov ah, 02h int 21hadd ch,30hmov dl, ch mov ah, 02h int 21hretdispendpcodeends end start实验六:扩展定时器 / 计数器接口实验( 1)计数器 0工作于方式 3,编写初始化程序,观察其输出 out0 信号的波形。修改计数初值,观察 out0 信号的变化情况。 硬件连接方法: 8254计数器 0的clk0 端接规则的脉冲输入(频率自选), out0 接示波器的 正极;示波器负极接地。程序流程图略。参考源程序:data segmentdb 100 dup(?) data endscodesegmentstart:assume cs:code, ds:datamov ax,datamov ds,axmov dx,20fh;写入计数器 0的控制字mov al,00010110bout dx,almov dx,20ch;写入计数器 0的计数初值mov al,05hout dx,almov ah,4chint 21hcodeendsend start( 2)将计数器1和计数器 0 级联起来,二者均工作于方式3,编写初始化程序,观察out1 和out0 信号的波形,说明二者的关系。修改计数初值,观察out0 和 out1 输出波形的变化情况。硬件连接方法:8254 计数器 1的clk1 端接规则的脉冲输入(频率自选),out1 接8254计数 器0的clk0 ,计数器 0的输出 out0 接示波器正极;示波器负极接地。程序流程图略。参考源程序:datasegment db 100 dup(?)dataendscodesegmentstart:assume cs:code,ds:datamov ax,datamov ds,axmov dx,20fhmov al,00010110bout dx,al;写入计数器0的控制字mov dx,20chmov al,05h;写入计数器0的计数初值out dx,almov dx,20fhmov al,01010110b out dx,almov dx,20dh;写入计数器;写入计数器1的控制字1的计数初值mov al,02hout dx,almov ah,4chint 21hcodeendsend start实验七:并行输入 / 输出接口 8255a简单编程实验(1) 利用 8255a 的 b 口输出控制两组发光二级管l1,l3,l5,l7和 l2,l4,l6,l8亮灭交替变化。分析:按照题目要求,当 8255a 的 b 口输出为 01010101b(55h) 时,发光二极管 l1,l3,l5,l7 会被点亮,当 8255a 的 b 口输出为 10101010b (0aah) 时,发光二极管 l2,l4,l6,l8 会被点亮。因此,通过延时改变 8255a 的 b 口输出,即可实现两组发光二极管的亮灭交替变化。由于 led 随时出于准备好的状态,因此 8255a 的 b 口可工作于方式0 输出, 其它端口未使用,无需考虑。因此,8255a 的方式控制字为:10000000b(80h) 。硬件连接方法:8255a 的 b 口 pb0pb7 分别连接l1l8 。程序流程图略。参考源程序:.486datasegmentporta dw 208h;8255a 端口 a地址portb dw 209h;8255a 端口 b地址portc dw 20ah;8255a 端口 c地址port_ctr dw 20bh;8255a 控制端口地址dataendsstack1segment stackdb 100 dup(?) stack1endscodesegmentassume cs:code, ds:data, ss:stack1 start:mov ax,datamov ds,axmov dx, port_ctr mov al, 10000000b out dx, almov dx, portb mov al, 00h out dx, al;8255a 初始化;控制字;8255a 端口b清零, led 初始化 ( 全灭 )lp0:mov bl, 01010101b mov al, blout dx, al call delaynot al mov bl, almov ah, 01h;调用 bios 的 16h 功能判断键盘是否有输入int 16hjnz exit jmp lp0exit:mov ah, 4chint 21hdelayproc near;延时子程序 ( 可通过修改 nop 指令数量改变延时时间) mov ecx, 0fffffffhlp2:nop loopd lp2 retdelayendpcodeends end start(2) 利用8255a 的 a 口 读入8 个开关k1k8的状态,当只有k1 合上时, l1l8 显示00000001b ;当只有k1 和 k2 合上时, l1l8 显示 00000010b;当只有k1,k2 和 k3 合 上时, l1l8 显示 00000011b;当只有k1,k2,k3和 k4 合上时, l1l8显示 00000100b ; 直到所有开关合上时,l1l8显示00001000b ,并结束程序的运行。发光二极管的状态通过 8255a 的 b 口进行控制。分析:按照题目要求,可以通过查询的方式读取8255a 的 b 口状态,并根据查询的结果给a口送出相应数据,a 口工作在方式0 的输入状态, b 口工作在方式0 输出状态, c 口不需要考虑,所以8255a 的方式控制字为:10010000b )硬件连接方法:( 1) 8255a 的 a 口 pa0pa7 对应连接k1k8 ;( 2) 8255a 的 b 口 pb0pb7 对应连接l1l8 ; 源代码:datasegmentlistdb 01h, 03h, 07h, 0fh, 1fh, 3fh, 7fh, 0ffh dataendsstack1segment stackdb 100 dup(?) stack1endscodesegmentassume cs:code, ds:data, ss:stack1 start:mov ax, datamov ds, axmov dx, 20bh;8255a 初始化mov al, 10010000b out dx, almov dx, 209h;8255a 的b口清零, led 初始化 (全灭 ) mov al, 00hout dx, all0:mov dx, 208h;读8255a 的a口,获得开关状态inal, dxmov bl, 00h mov cx, 8mov si, offset listl1:inc blcmp al, si jzfind inc si loop l1 jmp l0find:mov al, bl mov dx, 209h out dx, al cmp al, 08h jnz l0mov ah, 4ch int 21hcodeends end start;当前开关状态为表中所列状态之一;显示 led 状态实验八:并行输入 / 输出接口 8255a综合应用实验( 1)利用 8254计数器 0、计数器 1和8255a的b口实现对发光二极管的定时控制,让8个发光二极管每隔 1s从左到右依次点亮。(要求计数器1的时钟脉冲频率为250khz )。分析: 根据题目要求,需要利用8254进行定时 1s控制,定时到后,改变8255a 的b口输出。可以利用中断的方式实现,8254定时到时向 cpu申请中断, cpu 相应中断后在中断程序中改变8255a 的b口输出。由于题目要求8254的输入脉冲频率为250khz ,所以需要级联计数器1和计数器 0实现 1s定时(参考程序中利用计数器1进行 20ms定时,计数器 0进行 50次计数,计数次数到时由out0 向cpu 申请中断)。8255a 的b口控制 led ,可工作在方式0输出, a 口未使用,为了选通实验板上的中断输入c口的 pc7须输出低电平,因此c口的高四位工作在方式0输出。综合上述要求, 8254和8255a 的初始化参数为:8254计数器 1的计数初值为:n=20ms/4 s=5000d ;方式控制字为:01110100b (74h)8254计数器 0的计数初值为:n=50d ;方式控制字为:00010100b (14h)8255a 的方式控制字:10000000b( 80h ); c口按位置位/复位控制字:00001110b (0eh)( 使pc7复位,允许 8254的out0 中断到达系统8259的irq3 端)此外,利用中断方式实现题目要求的功能还需要设置系统8259芯片的中断屏蔽字和系统存储器中的中断向量表(修改中断类型号为0bh 的中断向量)。硬件连接方法:(1) 250khz 脉冲输出接 8254的clk1 , out1 接clk0 , out0 接irq ;(2) 8255a 的b口pb0pb7 对应连接 l1l8 。程序流程图略。参考源程序:datasegmentport0 dw 20ch;8254计数器 0端口地址port1 dw 20dh;8254计数器 1端口地址port2 dw 20eh;8254计数器 2端口地址port3 dw 20fh;8254控制寄存器端口地址porta dw 208h;8255a 的a 口端口地址portb dw 209h;8255a 的b口端口地址portc dw 20ah;8255a 的c口端口地址dataport_ctr dw 20bh ends;8255a 的控制寄存器端口地址stack1segment stackdb 100 dup(0) stack1endscodesegmentassume cs:code, ds:data, es:data, ss:stack1start:mov ax, datamov ds, ax mov es, axmov al, 80h; 8255初始化 , b 口方式 0输出, c口高 4位输出mov dx, port_ctrout dx, almov al, 0eh;pc7清零,允许 8254中断到 irq3 out dx, almov al, 00h;发光二极管初始化(全灭 ) mov dx, portbout dx, almov ax, 350bh;保存系统原有0bh 号中断的中断向量至堆栈int 21h push es push bxmov ax, seg intproc mov ds, axmov dx, offset intprocmov ax, 250bh;将程序要求的中断向量写入int 21hin al, 21h;设置 8259的imr 寄存器,允许irq3 中断and al, 0f7hout 21h, alsti;开中断, cpu 可以响应外部可屏蔽中断mov dx, port3;8254 计数器 0初始化mov al, 14hout dx, almov dx, port0;计数器 0写入计数初值50d mov al, 50dout dx, almov dx, port3;8254 计数器 1初始化mov al, 74hout dx, almov dx, port1;计数器 1写入计数初值5000d mov ax, 5000dout dx, al mov al, ah out dx, al.mov bh, 80hmov al, bh;bh 存放当前 8255a 的b口输出mov dx, portb out dx, al;8255a 的b口输出wait0:n opnopnopmov ah, 01hint 16h;判断键盘上是否有键按下,若有则结束程序jnz exitjmp wait0exit:pop dx;恢复中断向量表中的原有0bh 号中断向量pop dsmov ax, 250bhint 21hmov ah, 4chint 21hintproc proc nearmov al, bh ror al,1 mov bh, almov dx, portb;向8255a 的b口写出数据,点亮对应ledout dx, almov al, 20h;向8259发出中断结束命令out 20h, aliretintproc endp codeendsend start(2)8255a 的a口与 8个开关相连,工作于方式 1下,要求:利用当前的开关状态通过 b口控制l1l8 的亮或灭。 a口的 /stb a选通信号由按键 k 发出,每按一次 k 键,读入当前开关状态。分析:8255a 的b 口用来控制 led 的亮灭,可工作在方式 0下。 根据题意,可以通过查询方式不断读取 8255a 的c口状态确定 k 键是否按下,也可以利用中断方式,当k 键按下时,由intra ( pc3)向 cpu 申请中断。当判断k 键按下后,读取8255a 的a口状态,并通过b口显示到 led 上。利用查询方式实现时,仅需要给定方式选择控制字;利用中断方式实现时,除控制字外还需设定intea 为1,允许 intra 申请中断。因此, 8255a 的方式控制字为:10110000b(0b0h) ;使 i ntea(pc4) 置 1,其控制字为00001001b ( 09h )。 注意:利用中断方式实现时还需要置pc7为0,使 intra 能到达 8259的irq3硬件连接与参考源程序:(1) 利用查询方式实现硬件连接:1) 8255a 的a 口pa0pa7 与k1k8 对应相连;2) 8255a 的b口pb0pb7与l1l8 对应相连;3) 按键 k接 8255a 的c口pc4。参考源程序:codesegment assume cs:codestart:mov al, 0b0h; 8255a 初始化,方式控制字10110000bmov dx, 20bh out dx, almov dx, 209h;led 初始化mov al, 00h out dx, alagain:mov ah, 01h;判断计算机键盘上是否有键按下,若有结束程序int 16hjnz exitmov dx, 20ah;读入 8255a 的c口状态in al, dxtest al, 00010000b;判断 pc4=1 ? (k 键是否按下) jnz againmov dx, 208h;读入 8255a 的a 口状态in al, dxmov dx, 209h;将a 口状态送 8255a 的b口out dx, aljmp againexit:mov ah, 4chint 21hcodeends end start(2) 利用中断方式实现硬件连接:1) 8255a 的a 口pa0pa7 与k1k8 对应相连;2) 8255a 的b口pb0pb7与l1l8 对应相连;3) 按键 k接 8255a 的c口pc4;4) 8255a 的c口pc3( intra )接irq 。参考源程序:datasegmentporta dw 208h; 8255a 的a 口地址portb dw 209h; 8255a 的b口地址portc dw 20ah; 8255a 的c口地址dataport_ctr dw 20bh ends; 8255a 的控制口地址stack1segment stackdb 100 dup(0) stack1endscodesegmentassume cs:code, ds:data, es:data, ss:stack1 start:mov ax, datamov ds, ax mov es, axmov dx, port_ctr;写入 8255a 方式控制字 0b0hmov al, 0b0hout dx, almov al, 09h;写入 c口按位置位控制字,pc4置“ 1”out dx, almov al, 0eh;写入 c口按位复位控制字,pc7置“ 0” ,开irqout dx, almov ax, 350bh;保存系统原有中断号为0bh 的中断向量到堆栈int 21hpush espush bxmov ax, seg intprocmov ds, ax;向0bh 号中断写入新的中断向量mov dx, offset intprocmov ax, 250bhint 21hin al, 21h;允许 8259 的irq3 中断and al, 0f7hout 21h, alsti;允许 cpu 响应可屏蔽中断wait0:mov ah, 01h;判断是否有键按下,若有则结束程序,若无则等待int 16hjz wait0pop dx;恢复系统中断向量表pop dsmov ax, 250bh int 21hmov ah, 4ch int 21hintproc proc nearmov dx, porta;读入 8255a 端口a 的状态(开关状态) in al, dxmov dx, portb;从8255a 的b口输出开关状态,由对应的led 显示out dx, almov al, 20h;给8259发中断结束指令out 20h, aliret intproc endpcodeends end start实验九: led 显示器接口实验(1)编制一个从左到右循环显示字符“ 8的”程序, 要求每个字位的停留时间约为1s,当从标准键盘上按下任意键时结束程序。分析: 根据题意要求, 实验板上的 6位8段数码管的段选信号均相同,为字符“8”的段码( 80h )。为了实现从左到右循环显示且每个字位停留约1s的功能,只需要每隔一秒给位选信号赋值, 选通 /断开相应的位即可。当循环显示到最右端时,延时1s再从最左端开始显示。为此,在该题中我们利用8255a 的a 口作为 6位led 显示器的段选口(地址 208h ),8255a 的b口作为 6位led 显示器的位选口(地址209h)。 8255a 的控制字为: 10000000b ( 80h) 硬件连接:(1) 8255a 的a 口pa0pa7 分别对应连接led 显示器的段选输入ah.(2) 8255a 的b口pb0pb5 分别对应连接 led1led6 显示器的位选输入。程序流程图略。参考源程序:.486stack1segment stackdb 100 dup(0) stack1endscodesegmentassume cs:code, ss:stack1start:mov al, 80hmov dx, 20bh; 8255a 工作方式初始化,a口方式 0输出, b口方式 0输出out dx, almov al, 80h;8255a 的a 口输出字符“8”的段码 80hmov dx, 208hout dx, all1:mov bl, 20h;led 显示器位选信号存放在bl 中, 20h 表示最左边一位l2:mov al, bl;将led 位选信号输出到8255a 的b口mov dx, 209hout dx, alcall delay;调研软件延时程序mov ah, 01h;判断标准键盘上是否有键按下,若有则结束程序int 16hjnz exitshr bl, 1jnz l2;led 位选信号右移一位,选中下一位ledjmp l1;当循环到最右边一位led 时,重新填充bl 值,开始新一轮循环exit:mov dx, 208h.mov al, 0ffh out dx, al mov dx, 209h mov al, 00hout dx, al;关闭所有 ledmov ah, 4ch int 21hdelayproc nearmov ecx, 0fffffffhlp:loopdlp retdelayendpcodeends end start(2)完成多位 led 显示器的显示, 即设计一个显示字符串1234.56 的程序, 当标准键盘上有任意键按下时结束程序。基本思想:借助动态扫描、 分时显示的办法, 利用人眼视觉的滞留效应,实现人眼看上去的各位 “同时”显示。分析:利用实验操作面板上引出的8255a 的分别 a 口和 b 口作为 6位8段 led 显示器的位选口和 段选口, 从段选口依次输出待显示字符的段码,并选通相应的位实现对多位led 显示器的刷新。 8255a 的a 口和 b口均工作在方式0的输出方式,方式控制字为:1000000b (80h )。 硬件连接:(1) 8255a 的a 口pa0pa5 对应连接 led1led6 的位选;(2) 8255a 的b口pb0pb7 对应连接段选 ah; 程序流程图略。参考源程序:datasegmentsegtabdb 0c0h, 0f9h, 0a4h, 0b0h;定义 0f 的段码存储区db 99h, 92h, 82h, 0f8hdb 80h, 98h, 88h, 83h db 0c6h, 0a1h, 86h, 8ehdispmem db 01h, 02h, 03h, 04h, 05h, 06h;定义显示缓冲区dataendsstack1segment stackdb 100 dup(0) stack1endscodesegmentassume cs:code,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乾颐堂tcp-tp课件教学课件
- 社区护理灾害核心概念
- 山西2025年初级招采人员考试(招标采购专业实务)试题库及答案
- 2025年全国成人高校招生考试地理复习题库及答案
- 高校二级学院工作汇报
- 2025销售合同范本参考
- 护理实习第三方协议书6篇
- 广东省深圳市龙岗区2022-2023学年高三下学期高考第三次模拟考试英语题库及答案
- 公司春节前安全培训课件
- 早教销售工作总结
- 第4课 用联系的观点看问题 第二框
- 医疗质量医疗安全十八项核心制度培训模板
- 标杆地产五星级酒店精装修标准
- 脑器质性精神障碍患者的护理查房
- (高清版)TDT 1013-2013 土地整治项目验收规程
- 西方经济学简史
- 信息管理系统的设计与实现
- 新闻报道与舆论导向
- 局放实验操作规程
- 透明土实验技术的研究进展
- 戴海崎心理与教育测量第4版课后习题答案
评论
0/150
提交评论