1、 试 题 答 案2006 2007 学年第 1 学期课程名称:单片机及其应用 使用班级:电子、通信、控制2004级命题系别:电子基础教学实验中心 命题人:赵建一、分析简答题(17分)2、0XA000或A000H二、程序分析题(8分)、定时方式2 (4分)、400us或0.4ms (4分)三、编程题(75分)1、程序初始化正确(设置I/O口的初值)、程序结构正确(基本的程序框架正确合理)、程序结果正确(循环的结果灯亮灭的情况正确)21、程序初始化正确(中断的设置等正确)、按键检测正确(中断服务程序书写正确)、数码管结果正确(总线扩展数码管操作正确)、整体结果正确(程序结构及加减数据正确)22、程
2、序初始化正确(中断的设置等正确)、按键检测正确(中断服务程序书写正确)、数码管结果正确(I/O口扩展数码管操作正确)、整体结果正确(程序结构及加减数据正确)3、定时器初始化正确(TMOD,中断,定时器初值正确)、程序结构正确(程序结构,中断服务程序编写正确)、程序结果及数据存放正确(频率算法和结构存放的地址正确)4、程序初始化正确(总线地址正确)、ADC0804操作正确(启动AD转换数据正确)、程序结果及数据存放正确(转换结束检测数据存放地址正确)5、程序初始化正确(定时器及串口初始化正确)、数据发送操作正确(发送数据出正确)、程序结果整体正确(程序框架正确合理)附:程序范例,只做评分参考使用
3、,由于思维方式不同,所以,程序的判分以上面的评分细则为准,只要功能正确,就判为正确程序。1、#includevoid 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;elseDat = 0x7f;i = 8;2、(1)#include#include/*总线地址定义区*/#define LED_DIG XBYTE0x9000/定义数码管的
4、段选总线地址#define LED_SEL XBYTE0x8000/定义数码管的位选总线地址/*全局变量定义区*/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 =
5、 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)Disbuf0 = Counter%10;/十六进制数分解成十进制数进行显示Disbuf1 = Counter/10;Di
6、splay(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/*总线地址定义区*/sbit LED_DIG = P13;sbit LED_COM = P12;unsigned char code DisCode = 0x0C0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x
7、80,0x90,0xFF;/共阳极数码管码表,定位在ROM中unsigned char Counter = 30;/*显示延时*/void Delay(void)unsigned char i = 10;while(i-);/*带参数传递的显示程序*/void Display(unsigned char Dat2)static unsigned char i = 0;unsigned LED_Posit = 0x10;for(i = 0;i2;i+)P0 = DisCodeDati;/送段选LED_DIG = 1;LED_DIG = 0;P0 = LED_Posit;/选通一个数码管LED_C
8、OM = 1;LED_COM = 0;Delay();P0 = 0;/消隐LED_COM = 1;LED_COM = 0;LED_Posit=59)Counter = 0;/*外部中断1的中断服务子程序*/void INT1_Ser() interrupt 2/循环减操作if(Counter-=0)Counter = 59;3、#includeunsigned char counter = 0;unsigned char FRQU = 0;/*主函数*/void main()TMOD = 0x51;TH0 = 500008;/一次定时50msTL0 = 50000;TL1 = 0;TR0 =
9、TR1 =ET0 = EA = 1;while(1);/*T0中断服务子函数*/void T0_SR() interrupt 1TH0 = 500008;/一次定时50msTL0 = 50000;if(counter+=20)/定时一秒counter = 0;TR1 = 0;FRQU = TL1;/读取本次所测频率值TL1 = 0;TR1 = 1;4、#include#include/*总线地址定义区*/#define ADC0804 XBYTE0xB000/定义ADC0804的总线地址sbit ADC_INT = P32;/*全局变量定义区*/unsigned char ADCTemp =
10、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/*发送数组,只能一个一个的发*/void Send()unsigned char j;unsigned char Dat=1,2,3,4;for(j=0;j4;j+)SBUF = Datj;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 -