收藏 分销(赏)

《微机原理与接口技术》期末试题.docx

上传人:pc****0 文档编号:8800633 上传时间:2025-03-02 格式:DOCX 页数:17 大小:172.79KB
下载 相关 举报
《微机原理与接口技术》期末试题.docx_第1页
第1页 / 共17页
《微机原理与接口技术》期末试题.docx_第2页
第2页 / 共17页
点击查看更多>>
资源描述
考 生 信息 栏 院(系) 班级 姓名 学号 ………………………………………………装……………………订……………………线…………………………………… 2007 — 2008学年 第 2 学期 物理与机电工程学院 05级 电子信息(本)专业 《微机原理与接口技术》期末试卷(B) 试卷类别:开卷( )闭卷( √ ) 考试用时: 120 分钟 考试时间:2008 年 7 月 1 日 下 午 考试地点: 文203 题号 分数 一 二 三 四 五 注意事项 1、学生的院(系)别、专业、班级、姓名、学号必须填写在考生信息栏内指定的位置。 2、学生在考试之前必须填写考试时间和地点。 3、答题字迹要清楚,并保持卷面清洁。 总分 评卷人 复核人 考生考试诚信承诺书 在我填写考生信息后,表示我已阅读和理解《龙岩学院考试纪律与违纪处分办法》的有关规定,承诺在考试中自觉遵规守纪,如有违反将接受处理;我保证在本科目考试中,本人所提供的个人信息是真实、准确的。 考生签名: 考 生 信息 栏 院(系) 班级 姓名 学号 ………………………………………………装……………………订……………………线…………………………………… 一、 填空题(每空1分,共20分) 1、程序控制下的数据传送,通过CPU执行程序中的I/O指令来完成数据传送,分为 、 和中断传送 。    2、通用微型计算机的硬件是由中央处理器(CPU)、 、 存储器 、输入输出设备及 其组成的。  3、设异步传输时的波特率为115200bps,若每个字符对应一位起始位,七位有效数据位,一位偶校验位,一位停止位,则每秒钟传输的最大字符数是 。  4、中断系统的作用实现 操作、处理异常事故、 。 5、计算机基本接口部件主要有 、 、 、串行通信等。 二、简答题(共10分) 1、为个么要进行按键消除抖动的处理,在软件上通常采用什么样方法消除抖动?(5分) 2、在LPC2138中属于串行通信的部件有哪些?说明它们各自的主要用途。(5分) 二、 设计与应用(共10题,每题10分,任选题目,满分50分)(部分子程序被省略) 1、请对下面程序添加注释(3分),说明其程序功能(3分),并根据你的想法对程序的功能进行部分修改,说明修改后程序功能的变化(4分)。 #include "config.h" /* LED8~LED1 8个LED分别由P1.25~P1.18控制P1[25:18]控制LED8~LED1,低电平点亮*/ const uint32 LEDS8 = (0xFF << 18); void DelayNS (uint32 dly) { uint32 i; for ( ; dly>0; dly--) for (i=0; i<50000; i++); } int main (void) { uint8 i; PINSEL2 = PINSEL2 & (~0x08); IO1DIR = LEDS8; while (1) { for (i=0; i<8; i++) { IO1SET = ~(LEDS8 & (7 << (18+i))); DelayNS(20); IO1CLR = LEDS8 & (7 << (18+i)); DelayNS(20); } } return 0;} 考 生 信息 栏 院(系) 班级 姓名 学号 ………………………………………………装……………………订……………………线…………………………………… 2、请对下面程序添加注释(3分),说明其程序功能(3分),画出程序流程图(4分)。 #include "config.h" uint8 rcv_buf[8]; // UART0数据接收缓冲区 volatile uint8 rcv_new; // 接收新数据标志 void __irq IRQ_UART0 (void) { uint8 i; if ((U0IIR & 0x0F) == 0x04) rcv_new = 1; for (i=0; i<8; i++) { rcv_buf[i] = U0RBR; } VICVectAddr = 0x00; } int main (void) { UARTMODE set; set.datab = 8; set.stopb = 1; set.parity = 0; rcv_new = 0; PINSEL0 = 0x00000005; // 设置I/O连接到UART0 UART0_Init(115200, set); U0FCR = 0x81; // 使能FIFO,并设置触发点为8字节 U0IER = 0x01; // 允许RBR中断,即接收中断 IRQEnable(); VICIntSelect = 0x00000000; // 设置所有的通道为IRQ中断 VICVectCntl0 = 0x20 | 0x06; // UART0分配到IRQ slot0 VICVectAddr0 = (uint32)IRQ_UART0; VICIntEnable = 1 << 0x06; while (1) { if (rcv_new == 1) { rcv_new =0; UART0_SendBuf(); } } return 0; } 3、请对下面程序添加注释(3分),说明其程序功能(3分),并根据你的想法对程序的功能进行部分修改,说明修改后程序功能的变化(4分)。 #include "config.h" #define CAT1025 0xA0 /* CAT1025器件从机地址 */ #define BEEP 1 << 7 /* 蜂鸣器BEEP控制口,P0.7,低电平蜂鸣 */ int main (void) { uint8 i; uint8 data_buf[32]; PINSEL0 = 0x00000000; PINSEL1 = 0x00000000; IO0DIR = BEEP; IO0SET = BEEP; IRQEnable(); I2C1Init(100000);// I2C初始化,100K for (i=0; i<10; i++) data_buf[i] = i + '0'; /* 往起始地址0x00开始写入10个数据 */ I2C_WriteNByte(CAT1025, ONE_BYTE_SUBA, 0x00, data_buf, 10); //I2C_WriteNByte(CAT1025, 0, 0x00, &i, 1); DelayNS(10); for (i=0; i<10; i++) data_buf[i] = 0; /* 读回刚才写入的数据 */ I2C_ReadNByte(CAT1025, ONE_BYTE_SUBA, 0x00, data_buf, 10); for (i=0; i<10; i++) {if (data_buf[i] != (i + '0')) { while (1) { IO0SET = BEEP; DelayNS(20); IO0CLR = BEEP; DelayNS(20); } } } IO0CLR = BEEP; DelayNS(50); IO0SET = BEEP; while (1); return 0; } 4、面程序添加注释(3分),说明其程序功能(3分),并根据你的想法对程序的功能进行部分修改,说明修改后程序功能的变化(4分)。 #include "config.h" #define HC595_CS (1 << 29) // P0.29口为74HC595的片选 uint8 MSPI_SendData(uint8 data) { //略 } /* 此表为LED0~F以及L、P的字模 */ uint8 const DISP_TAB[19] = { // 0 1 2 3 4 5 6 7 8 9 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90, // A b C d E F 0x88, 0x83, 0xC6, 0xA1,0x86, 0x8E, // L P C 0xC7, 0x8C,0xC6 }; /* 此表为LPC2131字模 */ // L P C 2 1 3 1 uint8 const LPC2131[7] = { 0xC7, 0x8C, 0xC6, 0xA4, 0xF9, 0xB0, 0xF9}; uint8 rcv_data; int main (void) { uint8 i; PINSEL0 = 0x00005500; // 设置SPI管脚连接 PINSEL1 = 0x00000000; IODIR = HC595_CS; MSPI_Init(); // 初始化SPI接口 while(1) { for(i=0; i<16; i++) { rcv_data = MSPI_SendData(DISP_TAB[i]); // 发送显示数据 DelayNS(80); // 延时 } for(i=0; i<7; i++) { rcv_data = MSPI_SendData(LPC2131[i]); // 发送显示数据 DelayNS(80); // 延时 } } return 0; } 5、下面程序添加注释(3分),说明其程序功能(3分),并根据你的想法对程序的功能进行部分修改,说明修改后程序功能的变化(4分)。 #include "config.h" int main (void) { PINSEL0 = 2 << 24; // P0.12连接匹配1.0 T1PR = 99; // 分频 T1MCR = 0x02; // 设置T1MR0匹配后将T1TC复位 T1EMR = 0x30; // T1MR0匹配后MAT1.0输出翻转 T1MR0 = 110592/10; // 输出频率周期控制 T1TCR = 0x03; // 启动并复位T1TC T1TCR = 0x01; while (1); return 0; } 6、下面程序添加注释(3分),说明其程序功能(3分),并根据你的想法对程序的功能进行部分修改,说明修改后程序功能的变化(4分)。 #include "config.h" #include "music.h" /* 歌曲曲谱 - 虹彩妹妹*/ const uint32 HCMM[] = {//略 }; /* 歌曲节拍 */ const uint32 HCMM_L[] = {//略 }; int main (void) { uint8 i; PINSEL0 = 0x02 << 14; // P0.7选择PWM2功能 PWMPR = 0x00; // 不分频,计数频率为Fpclk PWMMCR = 0x02; // 设置PWMMR0匹配时复位PWMTC PWMPCR = 0x0400; // 允许PWM2输出,单边PWM PWMMR0 = Fpclk / 1000; PWMMR2 = PWMMR0 / 2; // 50%占空比 PWMLER = 0x05; // PWM0和PWM2匹配锁存 PWMTCR = 0x02; // 复位PWMTC PWMTCR = 0x09; // 启动PWM输出 while(1) { for(i = 0; i < sizeof(HCMM); i++) { PWMMR0 = Fpclk / HCMM[i]; // 设置输出频率 PWMLER = 0x05; // 更新匹配值后,必须锁存 Delay(HCMM_L[i]); // 延时,控制播放速度 } } return 0; } 7、下面程序添加注释(3分),说明其程序功能(3分),并根据你的想法对程序的功能进行部分修改,说明修改后程序功能的变化(4分)。 #include "config.h" int main (void) { uint32 ADC_Data; char str[20]; PINSEL0 = 0x00000005; // 管脚连接串口 PINSEL1 = 1 << 28; // P0.30连接到AD0.3 UART0_Init(); /* 进行ADC模块设置 */ AD0CR = (1 << 3) | // SEL=8,选择通道3 ((Fpclk / 1000000 - 1) << 8) | // CLKDIV=Fpclk/1000000-1,转换时钟为1MHz (0 << 16) | // BURST=0,软件控制转换操作 (0 << 17) | // CLKS=0, 使用11clock转换 (1 << 21) | // PDN=1,正常工作模式 (0 << 22) | // TEST1:0=00,正常工作模式 (1 << 24) | // START=1,直接启动ADC转换 (0 << 27); // 直接启动ADC转换时,此位无效 DelayNS(10); ADC_Data = AD0DR; // 读取ADC结果,并清除DONE标志位 while (1) { AD0CR |= 1 << 24; // 进行第一次转换 while ((ADDR & 0x80000000) == 0); // 等待转换结束 AD0CR |= 1 << 24; while ((AD0DR & 0x80000000) == 0); ADC_Data = AD0DR; ADC_Data = (ADC_Data >> 6) & 0x3ff; ADC_Data = ADC_Data * 2480; // 参考电压经过3/4分压 ADC_Data = ADC_Data / 1024; sprintf(str, "%4d mV VIN3", ADC_Data); ISendStr(0,0,0x30,str); } return 0; } 8、下面程序添加注释(3分),说明其程序功能(3分),并根据你的想法对程序的功能进行部分修改,说明修改后程序功能的变化(4分)。 #include "config.h" #define BEEP 1 << 7 // P0.7控制蜂鸣器 void __irq RTC_Int(void) { if((IO0SET & BEEP) == 0) IO0SET = BEEP; else IO0CLR = BEEP; ILR = 0x01; // 清除RTC增量中断标志 VICVectAddr = 0; // 向量中断结束 } int main (void) { IO0DIR = BEEP; IO0SET = BEEP; IRQEnable(); /* RTC初始化 */ PREINT = Fpclk / 32768 - 1; // 设置基准时钟分频器 PREFRAC = Fpclk - (Fpclk / 32768) * 32768; CIIR = 0x01; // 设置秒值的增量产生一次中断 ILR = 0x03; // 清除RTC增量和报警中断标志 CCR = 0x01; // 启动RTC VICIntSelect = 0x00; // 设置所有中断连接IRQ中断 VICVectCntl0 = 0x20 | 13; // 分配通道0 VICVectAddr0 = (int)RTC_Int; // 设置中断服务程序地址 VICIntEnable = (1 << 13); // 使能RTC中断 while(1); // 等待中断 return 0; } 9、下面程序添加注释(3分),说明其程序功能(3分),并根据你的想法对程序的功能进行部分修改,说明修改后程序功能的变化(4分)。 #include "config.h" #define LED1 1 << 18 // P0.18控制LED1 #define KEY1 1 << 16 // P0.16 #define KEY2 1 << 17 // P0.17 #define BEEP 1 << 7 // P0.7控制蜂鸣器 int main(void) { uint32 i,j; PINSEL0 = 0x00000000; PINSEL2 = PINSEL2 & (~0x08); // P1[25:16]连接GPIO IO0DIR = BEEP; IO1DIR = LED1; IO0SET = BEEP; while(( WDMOD & 0x04 ) == 0x04) // 判断看门狗超时标志 { for(j = 0; j < 0xFFFFF; j++); if((IO0SET & BEEP) == 0) { IO0SET = BEEP; if((IO0PIN & KEY2) == 0) WDMOD = 0x00; // 如果KEY2按下,则软件清零看门狗超时标志位 } else IO0CLR = BEEP; // 蜂鸣器鸣叫 } /* 如果没有发生看门狗复位或者看门狗超时标志已经清除,则初始化看门狗 */ WDTC = 0xff000; // 设置看门狗定时器参数 WDMOD = 0x03; // 设置看门狗模式:中断且复位 WDFEED = 0xAA; // 第一次喂狗启动WDT WDFEED = 0x55; /* 正常情况下,闪烁LED1 */ while(1) { /* 用按键模拟导致无法周期性喂狗的意外情况 */ while((IO0PIN & KEY1) == 0); // 如果按键1按下,就停止喂狗 for(j = 0; j < 0xFF; j++) // LED1闪烁周期 { for(i = 0; i < 0x0FFF; i++); // 喂狗周期 WDFEED = 0xAA; // 喂狗时序 WDFEED = 0x55; } /* 闪烁LED1 */ if((IO1SET & LED1) == 0) IO1SET = LED1; else IO1CLR = LED1; } return 0; } 10、下面程序添加注释(3分),说明其程序功能(3分),并根据你的想法对程序的功能进行部分修改,说明修改后程序功能的变化(4分)。 #include "config.h" #define BEEP 1 << 7 // P0.7控制蜂鸣器 /* ********************************************************************************************************* ** 函数名称 :main() ** 函数功能 :演示外部中断唤醒掉电的CPU,但不产生中断 ** 入口参数 :无 ** 出口参数 :无 ********************************************************************************************************* */ int main (void) { PINSEL0 = 0x00000000; // 管脚连接GPIO PINSEL1 = 0x00000001; // P0.16连接EINT0 IO0DIR = BEEP; // 设置BEEP控制口为输出,其余输入 EXTWAKE = 0x01; // 外部中断0唤醒芯片 EXTINT = 0x01; // 清除EINT0中断标志 IO0SET = BEEP; while (1) { PCONP = 0x00; // 关闭定时器、RTC、UART等功能部件 PCON = 0x02; // 系统进入掉电模式 /* 当系统被唤醒后,取反BEEP控制 */ if ((IO0SET & BEEP) == 0) IO0SET = BEEP; else IO0CLR = BEEP; EXTINT = 0x01; // 清除EINT0中断标志 } return (0); } 三、 综合设计(满分30分) 要求:1、在该综合设计项目中必需包含3种以上接口部件,项目由自己确定。 评分:方案设计(含必要的电路图)10分,流程图10分,程序10分。 4、考 生 信息 栏 院(系) 班级 姓名 学号 ………………………………………………装……………………订……………………线……………………………………
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服