版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 系统综合课程设计题目:交通灯控制系统 院(系、部): 信息工程学院 姓 名: 王硕 (070480) 胡学智(070288) 李润龙(070779) 班 级: 计073 指导教师签名: 2011 年 1 月 17 日北京 实验一 I/O地址译码一、实验目的 掌握I/O地址译码电路的工作原理。二、实验原理和内容 实验电路如图11所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H287H,Y1:288H28FH, 当CPU执行I/ O指令且地址在28
2、0H2BFH范围内,译码器选中,必有一根译码线输出负脉冲。 例如:执行下面两条指令 MOV DX,2A0H OUT DX,AL(或IN AL,DX) Y4输出一个负脉冲,执行下面两条指令 MOV DX,2A8H OUT DX,AL(或IN AL,DX) Y5输出一个负脉冲。图 11利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、),时间间隔通过软件延时实现。三、编程提示1、实验电路中D触发器CLK端输入脉冲时,上升沿使Q端输出高电平L7发光,RD端加低电平L7灭。2、由于TPC卡使用PCI总线,所以分配的IO地址每台微机可能都不同,编程时需要了解当前的微机使用那段IO地址并进行设置,获取方法请
3、参看汇编程序使用方法的介绍。( 四、实验程序 #include #include #include ApiEx.h #pragma comment(lib,ApiEx.lib) void main() if(!Startup() /*打开设备*/ printf(ERROR:Open Device Error!n); return; printf(Press any key to exit!); while(!kbhit() /*判断是否有键按下*/ PortWriteByte(0x2A0,0x10); /*或PortReadByte(0x2A0, &data)*/ Sleep(1000); /
4、*延迟一秒钟*/ PortWriteByte(0x2A8,0x10); /*或PortReadByte(0x2A8, &data)*/ Sleep(1000); /*延迟一秒钟*/ Cleanup(); /*关闭设备*/ 五、实验结果:按任意键后L7灯每1秒闪烁一次实验二 可编程并行接口(一)(8255方式0)一、实验目的 掌握8255方式0的工作原理及使用方法。二、实验内容 1实验电路如图20,8255C口接逻辑电平开关K0K7,A口接LED显示电路L0L7。2. 编程从8255C口输入数据,再从A口输出.图 20 三、编程提示 1、8255控制寄存器端口地址 28BHA口的地址 288H
5、C口的地址 28AH 2、参考流程图:四、试验程序/*/ /* 可编程并行接口(一) */ /*/ #include #include #include .ApiEx.h#pragma comment(lib,.ApiEx.lib)void main()printf(Press any key to begin!nn);getch();printf(Press any key to exit!n);if(!Startup()/*打开设备*/printf(ERROR:Open Device Error!n);return;PortWriteByte(0x28B,0x89);BYTE data;w
6、hile(!kbhit()/*判断是否有键按下*/PortReadByte(0x28A, &data);Sleep(1000);PortWriteByte(0x288,data);Sleep(1000);Cleanup();/*关闭设备*/五、实验结果:八个开关拨到上方时对应的L0L7灯亮起,拨到下方时对应的灯熄灭。实验三 可编程定时器计数器一、实验目的 掌握8253的基本工作原理和编程方法。二、实验内容1 按图16虚线连接电路,将计数器0设置为方式0,计数器初值为N(N0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变
7、高电平)。 图 162 按图17连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ)。图 17三、编程提示 1、8253控制寄存器地址283H计数器0地址280H计数器1地址281HCLK0连接时钟1MHZ 2、参考流程图(见图18、19):图 18 图 19四、试验程序试验程序1/*/ /* 可编程定时器计数器(一) */ /*/ #include #include #include .ApiEx.h#pragma comment(lib,.ApiEx.lib)void main()int d;printf(Press any
8、 key to begin!nn);getch();printf(Press any key to exit!n);if(!Startup()/*打开设备*/printf(ERROR:Open Device Error!n);return;PortWriteByte(0x283,0x10);printf(Press iinput data!n);scanf(%d,&d);PortWriteByte(0x280,d);Sleep(1000);BYTEdata;BYTEd1;PortReadByte(0x280,&data);while(!kbhit()/*判断是否有键按下*/PortReadBy
9、te(0x280,&data);/*或PortReadByte(0x2A0, &data)*/Sleep(1000);/*延迟一秒钟*/if(data!=d1)d1=data;printf(%dn,data);if(data=0)PortWriteByte(0x280,d);/Sleep(1000);continue;/*或PortReadByte(0x2A8, &data)*/*延迟一秒钟*/Cleanup();/*关闭设备*/实验程序2: /*/ /* 可编程定时器计数器(二) */ /*/ #include#include#include .ApiEx.h#pragma comment(
10、lib,.ApiEx.lib)void main()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
11、,1000/256);Cleanup(); /*关闭设备*/printf(Press any key to exit!);五、实验结果程序1:程序开始时设定初值,每按一次单脉冲数值-1程序2:插入逻辑笔后,到底红绿灯交替亮灭,周期为1秒。实验四 串行通讯实验一、实验目的 、了解串行通讯的基本原理。 、掌握串行接口芯片8251的工作原理和编程方法。二、实验内容、 按图18连接好电路,(8251插通用插座)其中8253计数器用于产生8251的发送和接收时钟.TXD和RXD连在一起。、编程:从键盘输入一个字符,将其ASCII码加 1 后发送出去,再接收回来在屏幕上显示。实现自发自收。图18 串行通讯
12、电路三、实验提示、 图示电路8251的控制口地址为2B9H,数据口地址为2B8H。、 8253计数器的计数初值=时钟频率 /(波特率波特率因子),这里的时钟频率接 1MHz,波特率若选1200,波特率因子若选16,则计数器初值为52。、 收发采用查询方式。四、参考流程图(见图20)图 20五、试验程序/*/ /* 8251串行通信 */ /*/ include #include .ApiEx.h#pragma comment(lib,.ApiEx.lib)void main()int i;BYTE data;if(!Startup() /*打开设备*/printf(ERROR: Open De
13、vice Error!n);return;PortWriteByte(0x283,0x16); /*设8253计数器0工作方式*/Sleep(1*100); /*延时*/PortWriteByte(0x280,52); /*给8253通道0送初值*/Sleep(1*100); /*延时*/for(i=0;i3;i+)PortWriteByte(0x2b9,0); /*初始化8251,向8251控制端口送3个0*/Sleep(1*100); /*延时*/PortWriteByte(0x2b9,0x40); /*复位8251*/Sleep(1*100); /*延时*/PortWriteByte(0
14、x2b9,0x4e); /*1个停止位,8个数据位,波特率因子为16*/Sleep(1*100); /*延时*/PortWriteByte(0x2b9,0x27); /*向8251送控制字允许其接收和发送*/Sleep(1*100); /*延时*/printf(You can Press a key to start:n); /*提示*/printf(ESC is exit!n); /*提示*/for(;)doPortReadByte(0x2b9,&data);while(!(data&0x01); /*发送未准备好则继续接收*/data = getch();if(data = 0x1b) e
15、xit(0); /*若有ESC键按下则返回*/putchar(data);PortWriteByte(0x2b8,data+1); /*发送*/Sleep(1*100); /*延时*/doPortReadByte(0x2b9,&data);while(!(data&0x02); /*接收没准备好则等待*/PortReadByte(0x2b8,&data);printf(%c,data); /*准备好则将接收后的字符显示*/Cleanup(); /*关闭设备*/六、实验结果输入字符cer后出现字符dfs实验五 中断一、实验目的 、掌握PC机中断处理系统的基本原理。 、学会编写中断服务程序。二、实
16、验原理与内容1、实验原理PC机用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理。中断控制器用于接收外部的中断请求信号,经过优先级判别等处理后向CPU发出可屏蔽中断请求。IBMPC、PC/XT机内有一片8259中断控制器对外可以提供8个中断源:中断源中断类型号中断功能IRQ008H时钟IRQ109H键盘IRQ20AH保留IRQ3OBH串行口2IRQ40CH串行口1IRQ50DH硬盘IRQ60EH软盘IRQ70FH并行打印机8个中断源的中断请求信号线IRQ0IRQ7在主机的62线ISA总线插座中可以引出,系统已设定中断请求信号为“边沿触发”,普通结束方式。对于PC/AT及286以上微机
17、内又扩展了一片8259中断控制,IRQ2用于两片8259之间级连,对外可以提供16个中断源:中断源中断类型号中断功能IRQ8070H实时时钟IRQ9071H用户中断IRQ10072H保留IRQ11O73H保留IRQ12074H保留IRQ13075H协处理器IRQ14076H硬盘IRQ15077H保留PCI总线中的中断线只有四根,INTA#、INTB#、INTC#、INTD#,它们需要通过P&P的设置来和某一根中断相连接才能进行中断申请。图 21 中断电路2、实验内容实验电路如图31,直接用手动产单脉冲作为中断请求信号(只需连接一根导线)。要求每按一次开关产生一次中断,在屏幕上显示一次“TPC
18、pci card Interrupt”,中断10次后程序退出。三、编程提示1. 由于9054的驱动程序影响直写9054芯片的控制寄存器,中断实验需要在纯DOS的环境中才能正常运行。这里指的纯DOS环境是指微机启动时按F8键进入的DOS环境。WINDOWS重启进入MSDOS方式由于系统资源被重新规划过,所以也不能正常实验。2. 由于TPC卡使用PCI总线,所以分配的中断号每台微机可能都不同,编程时需要了解当前的微机使用那个中断号并进行设置,获取方法请参看汇编程序使用方法的介绍。(也可使用自动获取资源分配的程序取得中断号)3. 在纯DOS环境下,有些微机的BIOS设置中有将资源保留给ISA总线使用
19、的选项,致使在纯DOS环境(WINDOWS环境下不会出现此问题)下PCI总线无法获得系统资源,也就无法做实验,这时需要将此选项修改为使用即插即用。4. 在纯DOS环境下,有些微机的BIOS设置中有使用即插即用操作系统的选项,如果在使用即插即用操作系统状态下,BIOS将不会给TPC卡分配系统资源,致使在纯DOS环境(WINDOWS环境下不会出现此问题)下PCI总线无法获得系统资源,也就无法做实验,这时需要将此选项修改为不使用即插即用操作系统。5. 由于TPC卡使用9054芯片连接微机,所以在编程使用微机中断前需要使能9054的中断功能,代码如下:mov dx,ioport_cent+68h ;设
20、置 tpc 卡中9054芯片io口,使能中断in ax,dxor ax,0900hout dx,ax其中IOPORT_CENT是9054芯片寄存器组的I/O起始地址,每台微机可能都不同,编程时需要了解当前的微机使用哪段并进行设置,获取方法请参看本书结尾部分的介绍。(也可使用自动获取资源分配的程序取得),+68H的偏移是关于中断使能的寄存器地址,设置含义如下:设置INTCSR(68H)寄存器,中断模式设置BITS功能81:能够产生PCI中断0:禁止产生PCI中断111:能够LOCAL端输入的中断送到PCI端0:禁止LOCAL端输入的中断送到PCI端其它位为零即可,更多内容参看9054芯片数据手册
21、程序退出前还要关闭9054的中断,代码如下:mov dx,ioport_cent+68h ;设置 tpc 卡中9054芯片io口,关闭中断in ax,dxand ax,0f7ffhout dx,ax6. PC机中断控制器8259 的地址为20H、21H,编程时要根据中断类型号设置中断矢量,8259中断屏蔽寄存器IMR对应位要清零(允许中断),中断服务结束返回前要使用中断结束命令:MOV AL,20HOUT 20H,AL中断结束返回DOS时应将IMR对应位置1,以关闭中断 。四、参考流程图开始设置TPC卡中断使能保存原中断向量设置新中断向量设置中断掩码显示提示信息恢复中断掩码计数器为0?YN按任
22、意键?YN恢复原中断向量设置TPC卡中断关闭关中断开中断结束返回中断开始计数器减一显示提示信息发出E0I结束中断关中断开中断中断返回图 22 中断五、程序代码/*/ /* 中断实验*/ /*/#include #include #include .ApiEx.h #pragma comment(lib,.ApiEx.lib) int i = 0; void MyISR() printf(TPC pci card interruptn);i+; void main() if(!Startup() /*打开设备*/ printf(ERROR: Open Device Error!n); retur
23、n; printf(Please Press DMC! Press any key to exit!n); RegisterLocalISR(MyISR); /*注册中断程序*/ EnableIntr(); /*开中断*/ while(!kbhit() & i != 10) DisableIntr(); /*关中断*/ Cleanup(); /*关闭设备*/ 六、实验结果按一次单次脉冲,屏幕中出现“TPC pci card interrupt”,出现十次后程序退出。实验六 模/数转换器一、实验目的了解模/数转换的基本原理,掌握ADC0809的使用方法。二、实验内容、实验电路原理图如图22。通过
24、实验台左下角电位器RW1输出05直流电压送入ADC0809通道0(IN0),利用debug的输出命令启动/转换器,输入命令读取转换结果,验证输入电压与转换后数字的关系。启动IN0开始转换:Out 0298 0读取转换结果:In 0298图 22 模数转换电路、编程采集IN0输入的电压,在屏幕上显示出转换后的数据(用16进制数)。三、实验提示 、ADC0809的IN0口地址为298H,IN1口地址为299H。、IN0单极性输入电压与转换后数字的关系为:其中Ui为输入电压,UREF为参考电压,这里的参考电压为机的电源。、一次A/D转换的程序可以为 MOV DX,口地址 OUT DX,AL ;启动转
25、换 ;延时 IN AL,DX ;读取转换结果放在AL中四、参考流程图(见图23,24)(A) 主程序 (B) 显示子程序五、程序代码:/*/ /* A/D转换实验*/ /*/#include #include #include .ApiEx.h #pragma comment(lib,.ApiEx.lib) void main() BYTE data; printf(Press any key to exit!n); if(!Startup() /*打开设备*/ printf(ERROR: Open Device Error!n); return; while(!kbhit() PortWri
26、teByte(0x298,0x00); /*启动A/D通道0*/ Sleep(70); /*延时*/ PortReadByte(0x298,&data); printf(%dn,data); /*将转换后的数据在屏幕上显示*/ /*如有键按下则退出*/ Cleanup(); /*关闭设备*/ 六、实验结果: 屏幕显示电压。实验七 交通灯控制系统(综合实验)一、实验目的:综合运用8255、8253、8259等设计和搭接接口电路,完成设计要求。二、实验内容:1. 按照时间控制原则,利用并行接口和定时器,采用时间中断方式设计一套十字路口的交通灯管理系统。2. 要求南北方向和东西方向上的车辆在交通灯的
27、控制下交替放行,主干道每次通行时间可设置修改。3.在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换。4.黄灯亮时,要求每秒闪亮一次。5.当绿灯亮时,其显示时间采用倒计时的方法在显示器及实验台上的数码管进行显示。三、实验电路:四、程序流程图:1.主程序:2.中断服务程序:3.显示子程序:五、程序代码:#include #include #include .ApiEx.h #pragma comment(lib,.ApiEx.lib) int flag=0;int d;int portc=0x24,0x44,0x04,0x44,0x04,0x44,0x04,0x81,0x82,0x80,0x82,0
28、x80,0x82,0x80,0xff;BYTE data;DWORD WINAPI ThreadProc(LPVOID lpParam)int a,b;char led10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;a=data/10;b=data%10;PortWriteByte(0x288,leda);PortWriteByte(0x28a,0x10); /*显示十位*/Sleep(1);PortWriteByte(0x288,ledb);PortWriteByte(0x28a,0x08); /*显示个位*/Sleep(1);ret
29、urn 0;void MyISR() printf(0n);int i;switch(flag%2)case 0:for(i=1;i7;i+)PortWriteByte(0x292,portci);Sleep(1000);break;case 1:for(i=8;i14;i+)PortWriteByte(0x292,portci);Sleep(1000);break;flag+;PortWriteByte(0x281,d);Sleep(100); void main() if(!Startup() /*打开设备*/ printf(ERROR: Open Device Error!n); return; PortWriteByte(0x283,0x36); /*写方式字通道0方式3(计数器8253接280H)*/PortWriteByte(0x280,65535%256); /*送计数初值高*/PortWriteByte(0x280,65535/256);/*送计数初值低*/PortWriteByte(0x283,0x50); /*设置计数器1方
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年天府新区信息职业学院单招职业倾向性测试题库含答案详解(b卷)
- 2026年天津海运职业学院单招职业技能测试题库附参考答案详解(预热题)
- 2026年天津交通职业学院单招职业倾向性测试题库附参考答案详解(模拟题)
- 2026年宁德职业技术学院单招职业适应性考试题库附答案详解(培优)
- 2026年宁夏体育职业学院单招职业倾向性考试题库含答案详解(预热题)
- 2026年宁德职业技术学院单招职业技能测试题库附参考答案详解(突破训练)
- 2026年宁波卫生职业技术学院单招综合素质考试题库附答案详解(综合卷)
- 2026年天津医学高等专科学校单招职业技能考试题库附答案详解(能力提升)
- 员工培训计划与考核标准工具
- 高功能计算设备计算功能保证承诺书3篇
- 甲状旁腺护理查房课件
- DB35-T 2142-2023 在用货车油箱柴油采样规程
- 固定式真空绝热压力容器定期检验
- GB 18279-2023医疗保健产品灭菌环氧乙烷医疗器械灭菌过程的开发、确认和常规控制要求
- 新能源汽车概论(中职新能源汽车专业)PPT完整全套教学课件
- 天津高考英语词汇3500
- 知木林乡知木林村传统村落环境保护项目环评报告
- 铁路建设项目甲供甲控物资设备目录
- 平衡皮肤生态环境2对于肌肤护理起到课件
- 茶与茶文化-红茶课件
- 《汽车电路识图》课程标准
评论
0/150
提交评论