补充练习题
8、在XTAL频率是12MHz的标准8051器件上,用Timer1产生10kHz定 时器滴答中断。 #include<reg51.h> /*T1中断服务程序:每100个时钟周期执行1次*/ static unsigned long overflow_count=0; void timer1_ISR(void) interrupt 3 { overflow_count++; //溢出计数器加1 } /*main C 函数:置T1为8位定时器重装(方式2), 定时器计数到255时溢出,用156重装并产生中断*/ void main(void){ TMOD=(TMOD&0x0F)|0x20; //设置方式(带重装8位定时器) TH1=256-100; //重装TL1来计数100个时钟周期 TL1=TH1; ET1=1; //允许T1中断 TR1=1; //启动T1运行 EA=1; //全部中断允许 while(1); //不做什么(无限循环):T1的中断每100个时钟周期将出 现1次,由于8051CPU运行在12MHz,故中断以10kHz的频率发生 } 说明:每次定时器滴答中断都会使变量 overflow_count加1; main函数在while(1)循环中将定时器T1初始化为无限循环。
13、三态缓冲器的输出应具有三种状态,其中 不包括 A、高阻抗状态 B、低阻抗状态 C、高电平状态 D、低电平状态 14、在接口电路中的“口”一定是一个 A、已赋值的寄存器 B、数据寄存器 C、可编址的寄存器 D、既可读又可写的寄存器
15、下列理由中,不能说明MCS-51的I/O编址是统 一方控制信号 C、使用存储器指令进行I/O控制信号 D、P3口线具有第二功能 16、如果把8255的A1、A0分别与80C51的P0.1、 P0.0连接,则8255的A、B、C口和控制寄存器 的地址可能是 A、××00H~××03H B、00××H~03××H C、0×××H~3×××H D、×00×H~×03×H
9、采用10MHz晶振,在P1.0脚上输出周 期为2.5s,占空比为20%的脉冲信号。 分析:采用定时器T0。 对于10MHz晶振,使用定时器最大 定时为几十ms。取10ms定时,则周期 2.5s需250次(2500ms=2.5s)中断, 占空比为20%,高电平应为50次 (500ms)中断。 10ms定时,晶振fosc=10MHz。 需定时器计数次数 =10×103×10/12=8 333 中断服务程序名为time0.c。
第5章 MCS-51单片机内部资源及编程
1、当计数器产生计数溢出时,该位作为TF0 (TF1)位置“1”。对计数器溢出的处理,在中 断方式时,该位作为(中断请求标志)位使用; 在查询方式时,该位作(查询的状态)位使用。 2、在定时器工作方式0下,计数器的宽度为13 位,如果系统晶振频率为3MHz,则最大定时时 间为( 213 12 32768s )。 3
3、响应中断后,产生长调用指令LCALL,执行该指令的 过程包括:首先把(PC)的内容压入堆栈,以进行断 点保护,然后把长调用指令的16位地址送(PC),使 程序执行转向(ROM)中的中断地址区。 4、执行中断返回指令,要从堆栈弹出断点地址,以便去 执行被中断了的主程序。从堆栈弹出的断点地址送给 A、A B、CY C、PC D、DPTR 5、在中断流程中有“关中断”的操作,对于外部中断0, 要关中断应复位中断允许寄存器的 A、EA位和ET0位 B、EA位和EX0位 C、EA位和ES位 D、EA位和EX1位
6、与定时工作方式1和0比较,定时工作方式2不 具备的特点是 A、计数器溢出后能自动重新加载计数初值 B、增加计数器位数 C、提高定时精度 D、适于循环定时和循环计数应用 7、对于8031单片机应用系统,中断响应并自动生 成长调用指令LCALL后,应 A、转向外部程序存储器去执行中断服务程序 B、转向内部数据存储器去执行中断服务程序 C、转向外部数据存储器去执行中断服务程序 D、转向内部程序存储器去执行中断服务程序
20、调制解调器(MODEM)的功能是 A、数字信号与模拟信号的转换 B、电平信号与频率信号的转换 C、串行数据与并行数据的转换 D、基带传送方式与频带传送方式的转换 21、以下有关第9位数据的说明中,错误的是 A、第9位数据位的功能可由用户定义 B、发送数据的第9数据位内容在SCON寄存 器的TB8位中预先准备好 C、帧发送时使用指令把TB8位的状态送入发 送SBUF中 移位寄存器的第9位 D、接收到的第9位数据位送SCON寄存器的 RB8中保存
4、若原来工作寄存器0组为当前寄存器组,现要 改1组为当前寄存器组,不能使用的指令是 A、SETB PSW.3 B、SETB D0H.3 C、MOV PSW.3,1 D、CPL PSW.3
第3章 单片机汇编程序设计
1、假定累加器A的内容为30H,执行指令: 1000H:MOVC A,@A+PC 后,把程序存储器(1031H)单元的内容送累加器A 中。 2、假定DPTR的内容为8100H,累加器A的内容为40H, 执行指令: 1000H:MOVC A,@A+DPTR 后,送入A的是程序存储器(8140H)单元的内容。 3、假定(SP)=60H,(ACC)=30H,(B)=70H, 执行下列指令: PUSH ACC PUSH B 后,SP的内容为(62H),61H单元的内容为 (30H),62H单元的内容为(70H)。
补充练习题
第1章 基础知识
1、80C51与87C51的区别在于 A、内部程序存储器的类型不同 B、内部数据存储器的类型不同 C、内部程序存储器的容量不同 D、内部数据存储器的容量不同
2、80C51与8051的区别在于 A、内部ROM的类型不同 B、半导体工艺的型式不同 C、内部寄存单元的数目不同 D、80C51使用EEPROM,而8051使用EPROM 3、在下列单片机芯片中使用掩膜ROM作为内部程序存储器的是 A、8031 B、80C51 C、8032 D、87C51
17、专用寄存器“串行数据缓冲寄存器”,实际 上是(串行发送数据缓冲)寄存器和(串行接 收数据缓冲)寄存器的总称。 18、MCS-51的串行口在工作方式0下,是把串行 口作为(同步移位)寄存器来使用。这样,在 串入并出移位寄存器的配合下,就可以把串行 口作为(并行输出)口使用,在并入串出移位 寄存器的配合下,就可以把串行口作为(并行 输入)口使用。 19、在串行通信中,收发双方对波特率的设定应 该是(一样)的。
#include<reg51.h> #define uchar unsigned char uchar time; uchar period=250; uchar high=50; timer0( ) interrupt 1 using 1{ TH0=(65536-8333)/256; TL0=(65536-8333)%256; if (++time= =high) P1.0=0; else if(time= =period) { time=0; P1.0=1; } } main( ){ TMOD=0x01; TH0=(65536-8333)/256; TL0=(65536-8333)%256; EA=1; ET0=1; TR0=1; do{ } while(1); }
4、假定(SP)=62H,(61H)=30H,(62H)=70H。 执行下列指令: POP DPH POP DPL 后,DPTR的内容为(7030H),SP的内容为 (60H)。 5、假定(A)=85H,(20H)=0FFH,(CY)=1,执 行指令: ADDC A,20H 后,累加器A的内容为(85H),CY的内容为(1), AC的内容为(1),OV的内容为(0)。 6、假定标号qaz的地址为0100H,标号qwe值为0123H。 应执行指令: qaz:SJMP qwe 该指令的相对偏移量为(21H)。
/*T0中断服务程序*/ /*重载计数初值*/
/*高电平时间到变低*/ /*周期时间到变高*/
/*T0方式1*/ /*预置计数初值*/
10、定时器:从60秒到0秒的倒记时。 #include "reg51.h“ unsigned char LED_seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char LED_bit[2]={0x01,0x02}; unsigned LED_buf[2]={0,0}; sbit P1_0=P1^0; #define count 921 //单片机的晶振频率是11.0592MHz unsigned char a=60; void time_isp(void) interrupt 1 { unsigned char k; TH0=(65536-count)/256; TL0=(65536-count)%256; k++; if(k==1000) {a--;k=0;} else if(a==0) a=60; P1_0=~P1_0; } void convert (unsigned int n) { unsigned char j; unsigned char i=0; for(j=0;j<=1;j++) { LED_buf[j]=0; } while(n)
7、假定addr11=00100000000B,标号qaz的地址 为1030H。执行指令: qaz:AJMP addr11 后,程序转移到地址(1100H)去执行。 8、在相对寻址方式中,寻址的结果体现在( )。 A、PC中 B、累加器A中 C、DPTR中 C、某个存储单元中 9、在相对寻址方式中,“相对”两字是指相对于 ( )。 A、地址偏移量rel B、当前指令的首地址 C、当前指令的末地址 D、DPTR值
{ LED_buf[i]=(unsigned char)(n%10); n=n/10; i++; } } void delay(int n) { int i; for(i=0;i<n;i++){ } } void main(void) { unsigned char i; TMOD=0x01; TH0=(65536-count)/256; TL0=(65536-count)%256; EA=1; ET0=1; TR0=1; while(1) { convert(a); for(i=0;i<=1;i++) { P2=LED_seg[LED_buf[i]]; P0=LED_bit[i]; delay(100); } }