




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微型计算机接口技术实验报告学 号:213*姓 名:提交日期:2016-4-22成 绩:东北大学秦皇岛分校 计算机与通信工程学院2016 【实验编号】1 【实验名称】实验三 可编程定时器计数器8253【实验内容】1. 可编程定时器计数器8253(一)实验说明实验原理图:实验流程图:ASM程序:ioportequ 0d400h-0280hio8253aequ ioport+280hio8253bequ ioport+281hio8253cequ 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,almov ax,1000 ;写入循环计数初值1000mov dx,io8253bout dx,al ;先写低字节 mov al,ahout dx,al ;后写高字节mov ah,4ch ;程序退出int 21h code endsend startCPP程序:/*/* 可编程定时器计数器(二) */*/#include#include#include ApiEx.h#pragma comment(lib,ApiEx.lib)void main()printf(-EXP9_3_8253_2-n);printf(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 Error!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 any key to exit!);getch();2. 可编程定时器计数器8253(二)实验说明:实验原理图:实验流程图:ACM程序:ioportequ 0d400h-0280hio8253aequ ioport+283hio8253bequ ioport+280hcode segmentassume cs:codestart: mov al,14h ;设置8253通道0为工作方式2,二进制计数 mov dx,io8253a out dx,al mov dx,io8253b ;送计数初值为0FH mov al,0fh out dx,allll: in al,dx ;读计数初值 call disp ;调显示子程序 push dx mov ah,06h mov dl,0ffh int 21h pop dx jz lll mov ah,4ch ;退出 int 21hdisp proc near ;显示子程序 push dx and al,0fh ;首先取低四位 mov dl,al cmp dl,9 ;判断是否=9 jle num ;若是则为0-9,ASCII码加30H add dl,7 ;否则为A-F,ASCII码加37Hnum: add dl,30h mov ah,02h ;显示 int 21h mov dl,0dh ;加回车符 int 21h mov dl,0ah ;加换行符 int 21h pop dx ret ;子程序返回 disp endp code endsend startCPP程序:/*/* 可编程定时器计数器(一) */*/#include#include#include ApiEx.h#pragma comment(lib,ApiEx.lib)void main()BYTEdata;if(!Startup()/*打开设备*/printf(ERROR: Open Device Error!n);return;PortWriteByte(0x283,0x10);/*设8253计数器0工作方式0,只写低字节*/ PortWriteByte(0x280,0x20);/*写入计数初值32*/ while(!kbhit()/*有键按下则退出*/PortReadByte(0x280,&data); printf(%dn,data);/*打印计数器值*/Cleanup();/*关闭设备*/【实验编号】2 【实验名称】实验五 七段数码管【实验内容】1.七段数码管静态显示实验说明:实验原理图:实验流程图:ACM程序:data segmentioportequ 0d400h-0280hio8255aequ ioport+288hio8255bequ ioport+28bhled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhmesg1 db 0dh,0ah,Input a num (0-9h):,0dh,0ah,$data endscode 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 ;将所得字符的ASCII码减30Hmov bx,offset led ;bx为数码表的起始地址xlat ;求出相应的段码mov dx,io8255a ;从8255的A口输出out dx,aljmp sss ;转SSSexit: mov ah,4ch ;返回DOSint 21hcode endsCPP程序:/*/* 七段数码管(一) */*/#include#include#include ApiEx.h#pragma comment(lib,ApiEx.lib)char led10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/*上面为从0-9对应的段码表*/void main()intout;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.七段数码管动态显示实验说明:实验原理图:实验流程图:ACM程序:data segmentioportequ 0d400h-0280hio8255aequ ioport+28ahio8255bequ ioport+28bhio8255cequ ioport+288hled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码buffer1 db 5,6 ;存放要显示的个位和十位bz dw ? ;位码data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,io8255b ;将8255设为A口输出mov al,80hout dx,almov di,offset buffer1 ;设di为显示缓冲区loop2:mov bh,02lll: mov byte ptr bz,bhpush didec diadd di, bzmov bl,di ;bl为要显示的数pop di mov al,0 mov dx,io8255a out dx,almov bh,0mov si,offset led ;置led数码表偏移地址为SIadd si,bx ;求出对应的led数码mov al,byte ptr simov dx,io8255c ;自8255A的口输出out dx,almov al,byte ptr bz ;使相应的数码管亮mov dx,io8255aout dx,almov cx,3000delay:loop delay ;延时mov bh,byte ptr bzshr bh,1jnz lllmov dx,0ffhmov ah,06int 21hje loop2 ;有键按下则退出mov dx,io8255amov al,0 ;关掉数码管显示out dx,almov ah,4ch ;返回int 21hcode endsend startCPP程序:/*/* 七段数码管(二) */*/#include#include#include ApiEx.h#pragma comment(lib,ApiEx.lib)void main()printf(-EXP11_5_LED_2-n);printf(1. 8255 (PA0-PA6) = LED (a-g)n);printf(2. 8255 (PC0-PC1) = LED (S0-S1)n);printf(3. I/O (288-28F) = 8255 (CS)n);printf(4. TPC (GND) = LED (dp)n);printf(Press any key to begin!nn);getch();if(!Startup()/*打开设备*/printf(ERROR: Open Device Error!n);return;printf(Please enter any key return!);doPortWriteByte(0x28b,0x82);/*设置8255的A口C口均为输出*/PortWriteByte(0x288,0x6d);PortWriteByte(0x28a,0x02);/*显示十位5*/Sleep(1000);PortWriteByte(0x288,0x7d);PortWriteByte(0x28a,0x01);/*显示个位6*/Sleep(1000);while(!kbhit();PortWriteByte(0x28a,0x00);Cleanup();/*关闭设备*/【实验编号】3 【实验名称】实验八 交通灯控制实验【实验内容】实验说明1. 实验目的 通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。二.实验内容如图-29,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律亮灭。三.编程提示: 十字路口交通灯的变化规律要求:(1) 南北路口的绿灯、东西路口的红灯同时亮30秒左右。(2) 南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。(3) 南北路口的红灯、东西路口的绿灯同时亮30秒左右。(4) 南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。(5) 转(1)重复。实验原理实验流程图Asm程序:;*;* 十字路口红绿灯模拟演示程序 *;* 端口各灯的设置: *;* 1红 1黄 1绿 0 0 2红 2黄 2绿 *;*; io8255aequ 28ah-0280h io8255bequ 28bh-0280h io_port_addreequ 0cf8h;32位配置地址端口 io_port_dataequ 0cfch;32位配置数据端口 io_plx_idequ 0540610b5h;TPC卡设备及厂商IDdata segment portc1 db 24h,44h,04h,44h,04h,44h,04h ;六个灯可能db 81h,82h,80h,82h,80h,82h,80h ;的状态数据db 0ffh ;结束标志 io_9054base_address db 4 DUP(0);TPC卡9054芯片I/O基地址暂存空间 io_base_address db 4 DUP(0);TPC卡I/O基地址暂存空间 memory_base_address db 4 DUP(0);TPC卡MEMORY基地址暂存空间 interrupt_line db 2 DUP(0);TPC卡中断号暂存空间 pcicardnotfind db 0dh,0ah,TPC pci card not find or address/interrupt error !,0dh,0ah,$ io9054baseaddress db 0dh,0ah,TPC pci card 9054 Chip I/O Base Address : ,$ iobaseaddressdb 0dh,0ah,TPC pci card I/O Base Address : ,$ memorybaseaddressdb 0dh,0ah,TPC pci card Memory Base Address : ,$ intnumberdb 0dh,0ah,TPC pci card Interrupt Line : ,$ enter_returndb 0dh,0ah,$data endsstacks segment db 100 dup(?)stacks endscode segment assume cs:code,ds:data,SS:STACKS,es:data.386;386模式编译start:mov ax,datamov ds,axmov es,axmov ax,stacksmov ss,axcall findtpc1;查找TPC卡资源并显示mov dx,word ptr io_base_addressadd dx,io8255bmov al,90hout dx,al ;设置8255为C口输出mov dx,word ptr io_base_addressadd dx,io8255are_on:mov bx,0on:mov al,portc1bxcmp al,0ffhjz re_onout dx,al ;点亮相应的灯inc bxmov cx,5000 ;参数赋初值test al,21h ;是否有绿灯亮jz de1 ;没有,短延时mov cx,45000 ;有,长延时de1:mov di,65000 ;di赋初值9000de0:dec di ;减1计数jnz de0 ;di不为0loop de1push dxmov ah,06hmov dl,0ffhint 21hpop dxjz on ;没有,转到onexit:mov ah,4ch ;返回DOSint 21hfindtpc1 proc near;查找TPC卡资源并显示pushadpushfdmov ebx,080000000hfindtpc1_next:add ebx,100hcmp ebx,081000000hjnz findtpc1_continuemov dx,offset pcicardnotfind;显示未找到tpc卡提示信息mov ah,09hint 21hmov ah,4chint 21h;退出findtpc1_continue:mov dx,io_port_addremov eax,ebxout dx,eax;写地址口mov dx,io_port_datain eax,dx;读数据口cmp eax,io_plx_idjnz findtpc1_next;检查是否发现tpc卡mov dx,io_port_addremov eax,ebx add eax,14hout dx,eax;写地址口mov dx,io_port_datain eax,dx;读数据口mov dword ptr io_9054base_address,eaxand eax,1jz findtpc1_next;检查是否为i/o基址信息 mov eax,dword ptr io_9054base_addressand eax,0fffffffeh mov dword ptr io_9054base_address,eax ;去除i/o指示位并保存mov dx,io_port_addremov eax,ebxadd eax,18hout dx,eax;写地址口mov dx,io_port_datain eax,dx;读数据口mov dword ptr io_base_address,eaxand eax,1jz findtpc1_next;检查是否为i/o基址信息mov eax,dword ptr io_base_addressand eax,0fffffffehmov dword ptr io_base_address,eax;去除i/o指示位并保存mov dx,io_port_addremov eax,ebxadd eax,1chout dx,eax;写地址口mov dx,io_port_datain eax,dx;读数据口mov dword ptr memory_base_address,eaxand eax,1hjnz findtpc1_next;检查是否为memory基址信息mov eax,dword ptr memory_base_addressand eax,0fffffff0hmov dword ptr memory_base_address,eax;去除memory指示位并保存mov dx,io_port_addremov eax,ebxadd eax,3chout dx,eax;写地址口mov dx,io_port_datain eax,dx;读数据口and eax,0ffhmov word ptr interrupt_line,ax;去除interrupt其它指示位并保存 mov dx,offset io9054baseaddress;显示i/o提示信息mov ah,09h
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第六章谈判准备(二)
- 幼儿园小班音乐教案《摇啊摇摇到外婆桥》
- 学习2022学校安全工作会议解读全文
- 新职业领域教师资格证面试题库精 编版
- 腰椎间盘突出症康复护理
- 杭州面试题目精 编:面试官必 备指南
- 2022年员工职业素养培训
- 学习202218岁成人礼解读
- 资本市场双向开放的机遇与挑战
- 行政仓库盘点汇报
- 2024年东南亚一体式直流充电桩市场深度研究及预测报告
- 新人教版高中英语必修一《Unit 1 Teenage Life 》单元课件全套
- DZ∕T 0213-2020 矿产地质勘查规范 石灰岩、水泥配料类(正式版)
- 保险公司案件风险排查工作报告
- 安徽医科大学辅导员考试试题2024
- (正式版)SHT 3078-2024 立式圆筒形料仓工程设计规范
- 政务公开工作培训
- 医院感染管理培训课件:妇产科感染的防治措施
- 农村伪劣食品总结汇报
- 人体解剖学与组织胚胎学(高职)全套教学课件
- 展会现场管理方案
评论
0/150
提交评论