收藏 分销(赏)

单片机试题答案.doc

上传人:pc****0 文档编号:6071050 上传时间:2024-11-27 格式:DOC 页数:9 大小:59KB 下载积分:10 金币
下载 相关 举报
单片机试题答案.doc_第1页
第1页 / 共9页
单片机试题答案.doc_第2页
第2页 / 共9页


点击查看更多>>
资源描述
试 题 答 案 2006 ——2007 学年第 1 学期 课程名称:单片机及其应用 使用班级:电子、通信、控制2004级 命题系别:电子基础教学实验中心 命题人:赵建 一、分析简答题(17分) 2、0XA000或A000H 二、程序分析题(8分) ①、定时方式2 (4分) ②、400us或0.4ms (4分) 三、编程题(75分) 1、 ①、程序初始化正确(设置I/O口的初值) ②、程序结构正确(基本的程序框架正确合理) ③、程序结果正确(循环的结果——灯亮灭的情况正确) 2.1、 ①、程序初始化正确(中断的设置等正确) ②、按键检测正确(中断服务程序书写正确) ③、数码管结果正确(总线扩展数码管操作正确) ④、整体结果正确(程序结构及加减数据正确) 2.2、 ①、程序初始化正确(中断的设置等正确) ②、按键检测正确(中断服务程序书写正确) ③、数码管结果正确(I/O口扩展数码管操作正确) ④、整体结果正确(程序结构及加减数据正确) 3、 ①、定时器初始化正确(TMOD,中断,定时器初值正确) ②、程序结构正确(程序结构,中断服务程序编写正确) ③、程序结果及数据存放正确(频率算法和结构存放的地址正确) 4、 ①、程序初始化正确(总线地址正确) ②、ADC0804操作正确(启动AD转换数据正确) ③、程序结果及数据存放正确(转换结束检测数据存放地址正确) 5、 ①、程序初始化正确(定时器及串口初始化正确) ②、数据发送操作正确(发送数据出正确) ③、程序结果整体正确(程序框架正确合理) 附:程序范例,只做评分参考使用,由于思维方式不同,所以,程序的判分以上面的评分细则为准,只要功能正确,就判为正确程序。 1、 #include<reg52.h> void Delay() { unsigned int i=100; while(i--); } void main() { unsigned char Dat = 0x7f; unsigned char i = 8; P0 = 0x0ff; while(1) { if(i--) { P0 = Dat; Delay(); Dat >>= 1; Dat += 0x80; } else { Dat = 0x7f; i = 8; } } } 2、(1) #include<reg52.h> #include<absacc.h> /******************************* 总线地址定义区 ********************************/ #define LED_DIG XBYTE[0x9000] //定义数码管的段选总线地址 #define LED_SEL XBYTE[0x8000] //定义数码管的位选总线地址 /******************************* 全局变量定义区 ********************************/ unsigned char code DisCode[] = {0x0C0,0xF9,0xA4,0xB0,0x99,0x92, 0x82,0xF8,0x80,0x90,0xFF}; //共阳极数码管码表,定位在ROM中 unsigned char Counter = 30; //定义一全局变量 /******************************** 显示延时 *********************************/ void Delay() { unsigned char i = 10; while(i--); } /******************************** 带参数传递的显示程序 *********************************/ void Display(unsigned char *Dat) { LED_DIG = DisCode[*Dat]; //送段选 LED_SEL = 0x01; //选通第一个数码管 Delay(); LED_SEL = 0; //消隐 LED_DIG = DisCode[*(Dat+1)]; LED_SEL = 0x02; //选通第二个数码管 Delay(); LED_SEL = 0; } /******************************** 主函数 *********************************/ void main(void) { unsigned char Disbuf[] = {0,3}; //存放欲显示的数据 IT0 = IT1 = 1; //开中断 EX0 = EX1 = 1; EA = 1; while(1) { Disbuf[0] = Counter%10; //十六进制数分解成十进制数进行显示 Disbuf[1] = Counter/10; Display(Disbuf); } } /******************************** 外部中断0的中断服务子程序 *********************************/ void INT0_Ser() interrupt 0 //循环加操作 { if(Counter++>=59) Counter = 0; } /******************************** 外部中断1的中断服务子程序 *********************************/ void INT1_Ser() interrupt 2 //循环减操作 { if(Counter--<=0) Counter = 59; } (2) #include<reg52.h> /******************************* 总线地址定义区 ********************************/ sbit LED_DIG = P1^3; sbit LED_COM = P1^2; unsigned char code DisCode[] = {0x0C0,0xF9,0xA4,0xB0,0x99,0x92, 0x82,0xF8,0x80,0x90,0xFF}; //共阳极数码管码表,定位在ROM中 unsigned char Counter = 30; /******************************** 显示延时 *********************************/ void Delay(void) { unsigned char i = 10; while(i--); } /******************************** 带参数传递的显示程序 *********************************/ void Display(unsigned char Dat[2]) { static unsigned char i = 0; unsigned LED_Posit = 0x10; for(i = 0;i<2;i++) { P0 = DisCode[Dat[i]]; //送段选 LED_DIG = 1; LED_DIG = 0; P0 = LED_Posit; //选通一个数码管 LED_COM = 1; LED_COM = 0; Delay(); P0 = 0; //消隐 LED_COM = 1; LED_COM = 0; LED_Posit<<=1; } } /******************************** 主函数 *********************************/ void main(void) { unsigned char Disbuf[] = {0,3}; //存放欲显示的数据 IT0 = IT1 = 1; //开中断 EX0 = EX1 = 1; EA = 1; while(1) { Disbuf[0] = Counter%10; //十六进制数分解成十进制数进行显示 Disbuf[1] = Counter/10; Display(Disbuf); } } /******************************** 外部中断0的中断服务子程序 *********************************/ void INT0_Ser() interrupt 0 //循环加操作 { if(Counter++>=59) Counter = 0; } /******************************** 外部中断1的中断服务子程序 *********************************/ void INT1_Ser() interrupt 2 //循环减操作 { if(Counter--<=0) Counter = 59; } 3、#include<reg52.h> unsigned char counter = 0; unsigned char FRQU = 0; /******************************** 主函数 *********************************/ void main() { TMOD = 0x51; TH0 = 50000>>8; //一次定时50ms TL0 = 50000; TL1 = 0; TR0 = TR1 =ET0 = EA = 1; while(1); } /******************************** T0中断服务子函数 *********************************/ void T0_SR() interrupt 1 { TH0 = 50000>>8; //一次定时50ms TL0 = 50000; if(counter++==20) //定时一秒 { counter = 0; TR1 = 0; FRQU = TL1; //读取本次所测频率值 TL1 = 0; TR1 = 1; } } 4、 #include<reg52.h> #include<absacc.h> /******************************* 总线地址定义区 ********************************/ #define ADC0804 XBYTE[0xB000] //定义ADC0804的总线地址 sbit ADC_INT = P3^2; /******************************* 全局变量定义区 ********************************/ unsigned char ADCTemp = 0; //定义一全局变量 /******************************** 延时 *********************************/ void Delay(void) { unsigned char i = 30; while(i--); } /******************************** 主函数 *********************************/ void main(void) { while(1) { ADC0804 = 0xFF; //启动A/D转换 Delay(); while ( ADC_INT ); //等待A/D转换完毕 ADCTemp = ADC0804; //读取A/D转换结果 Delay(); } } 5、 #include<reg52.h> /*************************** 发送数组,只能一个一个的发 ****************************/ void Send() { unsigned char j; unsigned char Dat[]={1,2,3,4}; for(j=0;j<4;j++) { SBUF = Dat[j]; while(TI==0); TI = 0; } } /************************************/ void main(void) { unsigned char i=0; TMOD = 0x20; TH1 = TL1 = -11059200L/12/32/4800; TR1 = 1; SCON = 0x50; Send(); while(1); } - 9 -
展开阅读全文

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


开通VIP      成为共赢上传

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

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

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

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

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

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

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

客服