1、1 / 23微 型 计 算 机 接 口 技 术 实 验 报 告学 号 : 213*姓 名 :提 交 日 期 : 2016-4-22成 绩 :东 北 大 学 秦 皇 岛 分 校 计 算 机 与 通 信 工 程 学 院20160 / 23【 实 验 编 号 】 1 【 实 验 名 称 】 实 验 三 可 编 程 定 时 器 计 数 器 8253【 实 验 内 容 】1. 可 编 程 定 时 器 计 数 器 8253( 一 )实 验 说 明实 验 原 理 图 :1 / 23实 验 流 程 图 :ASM 程 序 :ioport equ 0d400h-0280hio8253a equ ioport+28
2、0hio8253b equ ioport+281hio8253c equ ioport+283hcode segmentassume cs:codestart:mov dx,io8253c ;向 8253写 控 制 字mov al,36h ;使 0通 道 为 工 作 方 式 3out dx,almov ax,1000 ;写 入 循 环 计 数 初 值 1000mov dx,io8253aout dx,al ;先 写 入 低 字 节mov al,ahout dx,al ;后 写 入 高 字 节mov dx,io8253cmov al,76h ;设 8253通 道 1工 作 方 式 2out dx
3、,almov ax,1000 ;写 入 循 环 计 数 初 值 1000mov dx,io8253bout dx,al ;先 写 低 字 节mov al,ahout dx,al ;后 写 高 字 节mov ah,4ch ;程 序 退 出int 21hcode endsend start2 / 23CPP 程 序 :/*/* 可 编 程 定 时 器 计 数 器 ( 二 ) */*/#include#include#include “ApiEx.h“#pragma comment(lib,“ApiEx.lib“)void main()printf(“-EXP9_3_8253_2-n“);print
4、f(“1. 8253 (CLK0) = (1MHz) or (2MHz)n“);printf(“2. TPC (+5V) = 8253 (GATE0,GATE1)n“);printf(“3. 8253 (OUT0) = 8253 (CLK1)n“);printf(“4. 8253 (OUT1) = LJB (Ui)n“);printf(“5. I/O (280-287) = 8253 (CS)n“);printf(“Press any key to begin!nn“);getch();if(!Startup() /*打 开 设 备 */printf(“ERROR: Open Device E
5、rror!n“);return;PortWriteByte(0x283,0x36); /*写 方 式 字 通 道 0方 式 3*/PortWriteByte(0x280,1000%256); /*送 计 数 初 值 */PortWriteByte(0x280,1000/256);PortWriteByte(0x283,0x76); /*设 置 计 数 器 1方 式 字 */PortWriteByte(0x281,1000%256); /*送 计 数 初 值 */PortWriteByte(0x281,1000/256);Cleanup(); /*关 闭 设 备 */printf(“Press
6、any key to exit!“);getch();2. 可 编 程 定 时 器 计 数 器 8253( 二 )实 验 说 明 :3 / 23实 验 原 理 图 :实 验 流 程 图 :4 / 23ACM 程 序 :ioport equ 0d400h-0280hio8253a equ ioport+283hio8253b equ ioport+280hcode segmentassume cs:codestart: mov al,14h ;设 置 8253通 道 0为 工 作 方 式 2,二 进 制 计 数mov dx,io8253aout dx,almov dx,io8253b ;送 计
7、数 初 值 为 0FHmov al,0fhout dx,allll: in al,dx ;读 计 数 初 值call disp ;调 显 示 子 程 序push dx mov ah,06h mov dl,0ffhint 21hpop dxjz lllmov ah,4ch ;退 出int 21hdisp proc near ;显 示 子 程 序push dxand al,0fh ;首 先 取 低 四 位mov dl,alcmp dl,9 ;判 断 是 否 #include#include “ApiEx.h“#pragma comment(lib,“ApiEx.lib“)void main()BY
8、TEdata;if(!Startup() /*打 开 设 备 */printf(“ERROR: Open Device Error!n“);return;PortWriteByte(0x283,0x10); /*设 8253计 数 器 0工 作 方 式 0,只 写 低 字 节 */PortWriteByte(0x280,0x20); /*写 入 计 数 初 值 32*/while(!kbhit() /*有 键 按 下 则 退 出 */PortReadByte(0x280,printf(“%dn“,data); /*打 印 计 数 器 值 */Cleanup(); /*关 闭 设 备 */【 实
9、 验 编 号 】 2 【 实 验 名 称 】 实 验 五 七 段 数 码 管6 / 23【 实 验 内 容 】1.七 段 数 码 管 静 态 显 示实 验 说 明 :实 验 原 理 图 :实 验 流 程 图 :7 / 23ACM 程 序 :data segmentioport equ 0d400h-0280hio8255a equ ioport+288hio8255b equ ioport+28bhled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhmesg1 db 0dh,0ah,Input a num (0-9h):,0dh,0ah,$data en
10、dscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8255b ;使 8255的 A口 为 输 出 方 式mov ax,80hout dx,alsss: mov dx,offset mesg1 ;显 示 提 示 信 息mov ah,09hint 21hmov ah,01 ;从 键 盘 接 收 字 符int 21hcmp al,0 ;是 否 小 于 0jl exit ;若 是 则 退 出cmp al,9 ;是 否 大 于 9jg exit ;若 是 则 退 出sub al,30h ;将 所 得 字 符 的
11、 ASCII码 减 30Hmov bx,offset led ;bx为 数 码 表 的 起 始 地 址xlat ;求 出 相 应 的 段 码mov dx,io8255a ;从 8255的 A口 输 出out dx,aljmp sss ;转 SSS8 / 23exit: mov ah,4ch ;返 回 DOSint 21hcode endsCPP 程 序 :/*/* 七 段 数 码 管 ( 一 ) */*/#include#include#include “ApiEx.h“#pragma comment(lib,“ApiEx.lib“)char led10=0x3f,0x06,0x5b,0x4f
12、,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/*上 面 为 从 0-9对 应 的 段 码 表 */void main()int out;if(!Startup() /*打 开 设 备 */printf(“ERROR: Open Device Error!n“);return;PortWriteByte (0x28b,0x80); /*设 8255A口 C口 输 出 */printf(“nInput a number (0-9),other key to exit!:n“); /*显 示 提 示 */while(true)out = getch();if(out0x39) break;printf(“%cn“,out);PortWriteByte(0x288,ledout-48);Cleanup(); /*关 闭 设 备 */2.七 段 数 码 管 动 态 显 示实 验 说 明 :