2012山东大学单片机试题 下载本文

内容发布更新时间 : 2024/12/23 22:55:39星期一 下面是文章的全部内容请认真阅读。

一、试将下面的8051单片机的汇编语言程序转换为实现同样功能的C语言程序。(15分)

ORG 0000H LJMP MAIN ORG 001BH LJMP INT_T1 ORG 0100H MAIN:

MOV SP,#70H MOV TMOD,#10H MOV TL1,#58H MOV TH1,#9EH MOV A,#30 SETB ET1 SETB EA; SETB TR1 SJMP $ INT_T1 :

MOV TL1,#58H MOV TH1,#9EH DEC A

CJNE A,#15,NOT15 MOV P2,#15H LJMP T1_END NOT15:

CJNE A,#10,NOT10 MOV P2,#10H LJMP T1_END NOT10:

CJNE A,#5,NOT5 MOV P2,#05H LJMP T1_END NOT5:

CJNE A,#0,T1_END MOV P2,#00H MOV A,#30 T1_END: RETI END

二、利用中断技术设计一个故障检测系统。当出现故障1时,线路1上出现上升沿;当出现故障2时,线路2上出现下降沿;当出现故障3时,线路3上出现上升沿。没有故障时,线路1和线路3为低电平,线路2为高电平,对应故障源的故障指示灯全熄灭。出现故障时,对应故障源的故障指示灯闪烁(闪烁周期定为1秒钟,亮0.5秒,灭0.5秒)。故障消失后,

指示灯熄灭。试用8051单片机和必要的数字逻辑电路实现该故障检测功能,画出电路原理图,并写出相应程序。

(假设单片机外接12MHz的晶体)。(20分)

三、飞机夜间飞行时,机翼上安装有一个信号灯闪烁,有两种闪烁方式,用一个方式设置开关进行设置,一种是指示灯亮0.1秒,灭0.4秒;另外一种方式是亮0.2秒,灭0.8秒。试用单片机实现,画出电路图,并编写相应的程序(假设晶振频率为11.0592MHz)(20分)

四、利用8051单片机设计应答方式的通信程序。通讯参数:晶振为11.0592MHz,9600,n,8,1。通讯过程如下:主机将内存单元中的10个数据发送给从机,并将数据块校验值(将各个数据进行异或,取最后的异或值作为校验值)发给从机。从机接收数据并进行数据块的校验,若校验正确,则从机发送00H给主机,否则发送0FFH给主机,主机重新发送数据。(在适当的地方加程序注释)。(20分)

五、利用MSC1211的A/D构成数据采集系统。使用模拟通道0对0~10mV的信号进行连续数据采集,采集16次后取得平均值,存放到预先分配好的30个内存单元中,这30个单元存满后,再从第一个单元进行覆盖保存。写出完整的程序清单(在适当的地方加程序注释)。(15分)

六、阐述学习“单片机原理及应用”课程的心得体会。(10分)

山东大学 2011-2012 学年 2 学期 《单片机原理及应用》 课程试卷 (A) 参考答案

一. (15分)

#include \ //2分 unsigned char i; void main (void) {

TMOD=0x10; //2分 TL1=0x58;

TH1=0x9E; //2分 i=30;

ET1=1;

EA = 1; //2分 TR1=1; while(1); }

void T1_ISR (void) interrupt 3 //2分 {

TL1=0x58;

TH1=0x9E; i--;

switch(i) //4分 {

case 15:

P2=0x15;

break; //1分 case 10:

P2=0x10; break; case 5:

P2=0x5; break; case 0: i=50; P2=0; break; default:

P2=0xff; break; } }

二.(20分,电路图5分,主程序5分,外部中断函数5分,定时器中断函数5分)

#include \sbit P10=P1^0; sbit P11=P1^1; sbit P12=P1^2; sbit P13=P1^3; sbit P14=P1^4; sbit P15=P1^5;

unsigned char i; //声明计数变量。 unsigned char FLASH1=0; unsigned char FLASH3=0; unsigned char FLASH5=0;

void T0_ISR (void) interrupt 1 //定时器T0中断函数 {

TL0=0xB0; //重新装入时间常数 TH0=0x3C;

i--; //计数变量减1 if(i==0)

{ if (FLASH1)

P11=~P11; else

P11=1; if (FLASH3)

P13=~P13;