单片机考试复习题与答案-(13149) 下载本文

```

14.已知单片机系统晶振频率为6MHZ,若要求定时值为10ms时,定时器T0工作方式1时,定时器T0 对应的初值是多少?TMOD的值是多少?TH0=? TL0=? TMOD=0X01;

TH0=(65536-5000)/256;=0xec TL0=(65536-5000)%6;=0x78

15.请说明为什么使用LED需要接限流电阻,当高电平为+5V时,正常点亮一个LED需要多大阻值的限流电阻(设LED的正常工作电流为10mA,导通压降为2V),为什么? R=(5-2)/10mA=300欧

16.简述LED数码管动态扫描的原理及其实现方式。

数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划\的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。 通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动

17.指出下面程序的语法错误并改正。 #include main() { a=C;

Int a=7,C delay(10)

void delay() ; { cgar i;

for(i=0;i<=255;”++”); }

#include

main(){

a=C; //a和C必须先定义才可使用

Int a=7,C //缺分号,应该提在使用前说明 I要小写

delay(10) //延时子程序必须先定义,或先有函数原型说明

void delay();{ //作为函数定义,有函数定义不能嵌套的问题, //即不能在一个函数内定义另一个函数,而且“{”前不应有分号 //作为函数原型说明,应该放在函数调用之前,且其后不应该接函数体

cgar i; //字符型应该是unsigned char for(i=O; i<=255; ”++”);// ”++”应改成i++ } //主函数没有结束,缺”}”

#include

#define uint unsigned int

````

```

#define uchar unsigned char void delay(uint k); main() {

int a,C; a=C; a=7,C;

delay(10); }

void delay(uint k) {

uchar i; while(--k)

for(i=0;i<=255;i++) {;} }

18.指出下面程序的语法错误并改正。 #include Sbit led=p1^0;

Void into_srv() interrupt 0 {Led=!led;} Void main(); IT0=1; IE=0x81 While(1);

计算题

1、设单片机时钟频率为6MHZ,使P1.0引脚输出50ms周期的方波,画出电路图并编程实现。

2、采用89C52单片机,P1口外接8个共阳Led0~Led7指示灯。由接在P3.2/P3.3的2个按键SW1和SW2控制其上循环及下循环逐个点亮的流水灯。画出其硬键接线图并编写控制程序。

````

```

3、已知8051单片机系统中,振荡频率为12MHZ,编程实现现用定时器T0实现P1.1引脚产生周期2s的方波。

4、如图1-1所示,单片机P1口的P1.0和P1.1各接一个开关S1、S2,端口P1.5、P1.6和P1.7各接一只发光二极管。由S1和S2的不同状态来确定哪个发光二极管被点亮,控制状态如表1-4所示,编程实现。

5、外部中断0引脚(P3.2)接一个开关,P1.0接一个发光二极管。开关闭合一次,发光二极管改变一次状态,试编程。

6、让接在P1.0引脚上的LED闪烁发光,试编程。

7、在串行口工作在方式1和方式3时,定时/计数器为12MHZ,且串行口的波特率为4900位/秒,写出定时计数器1的初始化程序。

````

```

8、利用单片机的P3口接8个发光二极管,P1口接8个开关,编程实现,当开关作动时,对应的二极管亮灭。

9、设单片机的fosc=6MHZ,要求在P1.7脚上的指示灯亮一秒灭一秒,请用定时器T1编程实现题目要求。

#include #define th1 0x06

#define tl1 0x97 //100ms @6MHz Fosc sbit LED=P1^7;

void Timer1()interrupt 3 {

TL1=tl1; TH1=th1; LED=~LED; }

void TimerInit() {

TMOD=0x01; TH1=th1; TL1=tl1; EA=1; ET1=1; TR1=1; }

void main() {

TimerInit(); while(1); }

10、设fosc=12MHZ,利用定时器,T0(工作在方式2)在P1.1引脚上获取输出周期为0.4ms的方波信号,定时器溢出时采用中断方式处理,请编写T0的初始化程序及中断服务程序。

````