单片机期末考试试题1

更新时间:2023-04-23 10:45:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

单片机期末考试试题1

单片机考试试题

一、填空题(每空1分,共20分)

1、LED的显示驱动方式:静态、动态;静态显示方式和动态显示方式 2、键盘的类型:扫描式、非扫描式;

3、常见AD的驱动:ADC0809、ADC0832;

4、89C51单片机有一个可编程的全双工串行通信接口;其帧格式可以有8位、10位,11位 5、通信分串行和并行,串行通信分异步通信和同步通信;

6、按类别熟悉所有的指令,特别注意三条数据传送指令之间的区别。

答案:MOV单片机内部RAM中的数据传递;MOVX 累加器和单片机外部数据存储器间数据传递;MOVC 累加器和程序存储器之间的数据传递

7、访问不同的逻辑空间时,采用的指令:片内外程序存储器空间----MOVC,片内数据存储器空间和SFR----MOV,片外数据存储器地址空间----MOVX

8、8051有三个存储空间:片内外统一编址的程序存储器,片内外不统一编址的数据存储器,特殊功能寄存器(片内) 9、共阴型8位动态显示电路,共阳型3位动态显示电路

二、选择题(每题2分,共20分)

1、8031有四个工作寄存器区,由PSW状态字中的RS1、RS0两位的状态来决定,单片机复位后,若执行 SETB RS0 指令,此时只能使用( )区的工作寄存器。 A.0区 B.2区 C.3区 D.1区 2、CPU主要的组成部分为( c )。

A.运算器,指令译码器 B.运算器,寄存器 C.运算器,控制器 D.加法器,寄存器 3、理解7种寻址方式,并能区分和识别每条指令属于何种寻址方式;

立即数寻址 MOV A,#40H;将40H这个立即数传送给累加器ACC,“#”符号称为立即数符号,40H在这里称为立即数。立即数寻址是指将操作数直接写在指令中。

直接寻址指把存放操作数的内存单元的地址直接写在指令中。在MCS-51单片机中,可以直接寻址的存储器主要有内部RAM区和特殊功能寄存器SFR区。 MOV A,30H;将内部RAM30H单元内的数传送给累加器ACC。

寄存器寻址寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。MOV A,R0;数据存放在R0~R7中的某个通用寄存器内,或者放在某个专用寄存器中。e.g.:MOV A,R7 ADD A,R0

寄存器间接寻址MOV A, @R0 假如R0寄存器中的数据是50H,则以上指令的意思是:将内部RAM中50H单元内的数传送给累加器ACC。e.g.假如R1内的数是70H,在内部RAM的70H单元中存放的数据是00H,在执行以下指令后,外部RAM中3FFFH单元的内容是00H。 MOV A,@R1

MOV DPTR,#3FFFH MOVX @DPTR,A

位寻址当单片机要进行某一位二进制数操作时,可采用位寻址。E.g. :SETB C 指令含义:将专用寄存器PSW中的CY位置为1。 CLR P1.0;将单片机的P1.0清“0”。 SETB P1.0;将单片机的P1.0置“1”。 变址寻址E.G. :MOVC A,@A+DPTR

单片机期末考试试题1

指令含义:假设在执行指令前,数据指针DPTR中的数据是1000H,累加器ACC中的数据是50H,则上述指令执行的操作是将:程序存储器1050H单元中的数据传送给累加器ACC。

同样寻址方式的指令还有两条:MOVC A,@A+PC JMP @A+DPTR 相对寻址在跳转程序中有一种相对寻址方式,程序的书写方式是:SJMP rel

程序含义:当程序执行到上述语句时,在当前语句位置的基础上向前或向后跳转rel中指明的位置。范例 JZ rel

CJNE A, #DATA , rel DJNZ R0,rel

三、简述题(每题5分,共20分)

1、时钟电路的结构,作用,及振荡周期、机器周期、指令周期之间的关系;

答案:时钟电路:可产生时钟脉冲序列,允许晶振频率6MHZ和12MHZ

单片机必须在时钟的驱动下才能进行工作。MCS-51单片机内部具有一个时钟振荡电路,只需要外接振荡器,即可为各部分提供时钟信号

典型的时钟电路:在电路中,电容通常取30pF,晶振的取值通常为:1MHZ-33MHZ(不同型号的单片机的上限频率可能有差别)。

振荡周期/时钟周期:Tc=晶振频率fosc(或外加频率)的倒数 状态周期:Ts=2个时钟周期(Tc)(很少用到此概念) 机器周期:Tm=6个状态周期(Ts)=12个振荡周期(Tc) 指令周期: Ti:执行一条指令所需的机器周期(Tm)数

振荡周期= 晶振频率fosc的倒数;1个机器周期 = 12个振荡周期;1个指令周期 = 1、2、4个机器周期

2、复位电路的作用、类型及典型复位电路

答案:作用:单片机在重新启动时都需要复位,复位时单片机各部分将处于一个固定的状态

类型:复位操作有上电自动复位和按键手动复位两种典型复位电路:上电自动复位电路,手动复位电路,“看门狗”复位电路

3、单片机引脚功能:P0—P3口各自起的作用,包括P3口可以功能复用,P0口与P2口组成16位地址等;

答案:

并行输入和输出端口P0:双向三态输入输出端口。P0口既可作为地址总线,也可作为数据总线。P0可驱动8个LSTTL,其它P口可以驱动4个LSTLL。P0口的功能与驱动能力;P0口可以作为通用的I/O口;P0口可以作为单片机系统的地址/数据线使用;P0可以驱动8个标准的TTL负载电路。

并行输入和输出端口P1:P1口为8位准双向输入输出端口。 P1口的功能和驱动能力;P1口只可以作为通用的I/O口使用;P1可以驱动4个标准的TTL负载电路;

并行输入和输出端口P2:P2口作为通用I/O时,准双向输入输出端口。P2口作为高8位地址总线,AB8-AB15。P2口与P0一起构成单片机与外电路相连接的扩展端口。通常可以用来扩展存储器、及与其它总线型连接方式的外设。P2可以驱动4个标准的TTL负载电路。

并行输入和输出端口P3:P3口可以功能复用;P3口作为通用I/O时,为准双向输入输出端口。 P3口的第二功能。P3口的功能和驱动能力;P3口可以作为通用的I/O口使用;可以作为单片机系统的第二功能的输入和输出。P3口可以驱动4个标准的TTL负载电路

初学者可能对P3口的第二功能的用法有些疑惑,在他们看:

第二功能和原功能之间要有一个切换的过程,或者说要有一条指令,事实上,各端口的第二功能完全是自动的,不需要指令的切换。

4、单片机存储结构,了解特殊功能寄存器,特别注意各寄存器复位后的值,如PC复位后的值为0x0000。PSW寄存器的结构及相关位的作用。特殊功能寄存器的作用,主要为PC、SP、DPTR、PSW等。

答案:单片机有5个独立的存储空间:片内/片外程序存储器64K(0000-0FFFFH);128B的片内数据存储器(00-7FH);

单片机期末考试试题1

128B特殊功能寄存器SFR(80-0FFH);位寻址区(20H-2FH); 片外数据存储器64K(0000-0FFFFH)。 PC复位后的值为0x0000 PSW(程序状态字,8位):存放指令执行后的有关状态。 位序 D7 D6 D5 D4 D3 D2 D1 D0 位标志CY AC F0 RS1 RS0 OV / P CY(C):进位和借位标志,当指令执行中有进位和借位产生时,CY为1,反之为0。 AC:辅助进位、借位标志(低半字节对高半字节的进位和借位),有进位和借位产生时,AC为1,反之为0。F0:用户标志位,由用户自定义。RS1和RS0:工作寄存器选择标志位。OV:溢出标志位。P:奇偶校验位,当A中1的个数为偶数时P=0,反之为1。 SP(堆栈指针,8位):专门存放堆栈的栈顶位置。遵循“先进后出”的原则。

DPTR(数据地址指针,16位):存放程序存储器的地址或外部数据存储器的地址。可分DPH和DPL两个独立8位寄存器使用。

PC(程序地址寄存器,16位):执行指令后自动加一,常将PC值设置成程序第一条指令的内存地址。访问范围:0000-0FFFFH。

ACC(累加器,8位):特殊用途的寄存器,专门存放操作数或运算结果。 pc,p0,p1,T0,T1,DPTR都是16位,其他都是8位

3、波特率的含义及计算方法;

答案:波特率,即数据传送速率,表示每秒钟传送二进制代码的位数,它的单位是b/s.假设数据传送速率是120字符/s,而每个字符格式包含10个代码位(1个起始位、1个终止位、8个数据位).这时,传送的波特率为10b/字符×120字符/s=1200BPS

每一位代码的传送时间Td为波特率的倒数.T(d)=1b/(1200b乘以s的倒数) 波特率 =2SMOD fosc/【32 12(2的n次方 - X)】 其中:X 是定时器初值 初值 X = 2n -( 2SMOD fosc)/(32 波特率 12) 例:设甲乙机以串行方式1进行数据传送,fosc=11.0592MHz,波特率为1200b/s。甲机发送的16个数据存在内RAM 40H~4FH单元中,乙机接收后存在内RAM 50H为首地址的区域中。解:串行方式1波特率取决于T1溢出率(设SMOD=0), 计算T1定时初值:

T1初值 = 256 –(2的0次方/32) ×11059200/12×1200)= 232 = E8H

4、如何利用定时器T1的溢出率计算波特率;

波特率 = 2SMOD×(T1溢出率)/ 32 或 波特率=(2SMOD/32) T1的溢出率 溢出率:T1溢出的频繁程度 即:T1溢出一次所需时间的倒数。

5、如何利用串口实现双机通信。

两串口的GND相接,A串口的TXD接B串口的RXD,B串口的TXD接A串口的RXD,OK。程序嘛只要设置两边的波特率相等就行了,很简单

11、注意如何利用软件和定时器结合的方法产生任何时间的定时时间的方法。

定时/计数器的计时范围有限,当晶振采用12MHz时,方式1的计时时间最长,也只有65.536ms。当需要定时的时间超出了定时/计数器的计数范围,如需定时2秒,这时可以采用以下两种方法来处理: 答案:定时器+软件计数的方法

思路是:利用定时/计数器T1,工作于方式1,实现50 ms/次的定时,只要定时40次即可实现2s定时。 可以算出定时/计数器T1工作于方式1时,时间常数初值为

X=65536-t(fosc/12)=65536-50×10-3×(12×106/12) =15536=3CB0H 于是(TH1)=3CH ,(TL1)=0B0H。

定义TMOD=00010000B,此处只给出延时2s的查询方式子程序。 DELAY:MOV R3,#40 ;设置定时器溢出次数 SETB TR1 ;启动T1开始计时

D1: MOV TH1,#3CH ;装入时间常数初值

单片机期末考试试题1

MOV TL1,#0B0H

D2: JBC TF1,D3;TF1为1否?是则跳至D3,并清TF1, AJMP D2 ;否,则跳至D2 D3: DJNZ R3,D1;R3=0?不是,跳到D1 CLR TR1 ;是,则停止计数 RET

9、如何设定定时器的初值,

某单片机系统,主频为12M,由定时中断产生P1,0口给出方波信号,方波频率为500HZ。

分析:方波频率为500HZ,周期为2ms。即每1ms使P1.0输出信号翻转一次即可,选用定时器0,方式1,16位工作模式

(TH0,TL0)=0xFFFF-1000=0xFC17 TH0=0x0FC,TL0=0x17

ORG 0000H

SJMP START

ORG 000BH SJMP T0_INT ORG 0100H

START:

MOV TH0,#0FCH MOV TL0,#17H SETB ET0 SETB EA SETB TR0 SJMP $

ORG 0200H

T0_INT:CLR TR0

MOV TH0,#0FCH MOV TL0,#17H SETB TRO CPL P1.0 RETI

END

10、注意定时中断用于产生PWM脉冲波的方法,比如产生周期位1s,高电平时间为0.4s的PWM脉冲波的方法(重点)

1、利用指令进行程序设计,如:编程将片内20H单元开始的30个数传送到片外RAM 3000H开始的单元中。

MOV R1,#20H MOV R2,#1EH

MOV DPTR,#3000H

SEND_LOOP:

MOV A,@R1

MOVX @DPTR,A INC R1 INC DPTR

DJNZ R2,SEND_LOOP

2、如果要将内部RAM中40H单元中的数据传递到外部RAM的2000H单元中,应如何解决?试写出相应程序。

单片机期末考试试题1

MOV DPTR,#2000H MOV A,40H MOVX @DPTR,A

3:加数存放在内部RAM的41H(高位)和40H(低位),被加数存放在43H(高位)和42H(低位),将它们相加,和存放在46H~44H中。

CLR C

MOV A, 40H ADD A, 42H MOV 44H,A MOV A, 41H ADDC A, 43H MOV 45H,A CLR A

ADDC A, #00H MOV 46H,A

1、单片机中断系统的原理;

答案:CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生或中断请求);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);

待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回)。 中断过程:中断请求→中断响应→中断服务→中断返回

单片机通过对4个特殊功能寄存器实施中断控制:中断允许寄存器IE;中断优先级寄存器IP;定时/计数器及外部中断控制寄存器TCON;串口控制寄存器SCON

2、典型中断源的入口地址及其优先级;

3、中断控制相关,掌握如何开停中断、设置中断优先级、外部中断中断方式(电平触发/边沿触发)、中断控制;

4、掌握中断相关寄存器:IE、IP、TCON、SCON等;

IE---中断允许寄存器IE:功能:控制单片机是否接受中断申请,以及接受哪一种中断申请

;字节地址:A8H;其格式和每位的含义如下,可以位寻址:

单片机期末考试试题1

定时/计数器T0溢出中断请求位

T0定时或计数完成时TF0=1,同时申请中断

由位操作指令或数据传送指令实现。

例:同时打开外部中断0和串行口中断,可设置为: 法1:MOV IE,#10010001B 法2:SETB ES SETB EX0 SETB EA

IP---中断优先级寄存器IP;功能:对89C51单片机进行高级别或低级别中断的设置,

IP的字节地址:B8H;格式和每位的含义如下:

例:令串行口为高优先级中断,外部中断0为低优先级中断。 法1: MOV IE,#10010001B ;开中断 MOV IP,#00010000B ;设优先级 法2: MOV IE,#10010001B SETB PS

如果几个同级别的中断源同时申请中断,CPU如何响应?

答案:此时CPU按自然优先级顺序确定该响应哪个中断请求。

TCON---定时/计数器及外部中断控制寄存器TCON;功能:1可设置外部中断申请的形式:低电平触发还是下降沿触

发2控制定时/计数器的计时开始或停止3是各中断源(串口中断除外)是否申请中断的标志位;字节地址:88H格式如下,各位含义见

D7(TF1) D6(TR1) D5(TF0) D4(TR0) D3 (IE1) D2(IT1) D1(IE0) D0(IT) 形式 符号 位地址 功能

中 IT0 88H 外部中断0的触发控制位;IT0=0:低电平触发;IT0=1:下降沿触发 断 IE0 89H 外部中断0请求标志位。CPU采样到外部中断0的中断请求时, IE0=1;CPU响应该中断时, IE0

=0

控 IT1 8AH 外部中断1的触发控制位;IT1=0:低电平触发;IT1=1:下降沿触发

制 IE1 8BH 外部中断1的中断请求标志位;CPU采样到外部中断1的中断请求时, IE1=1;CPU响应该中断

时, IE1=0

定 TR0 8CH TR0=1:启动定时/计数器T0; TR0=0:停止定时/计数器T0 时/ TF0 8DH 定时/计数器T0溢出中断请求位; T0定时或计数完成时TF0 计时 申请中断; CPU响应该中断时, TF0=0

TR1 8EH TR1=1:启动定时/计数器T1 ;TR1=0:停止定时/计数器T1

数 TF 18FH 定时/计数器T1溢出中断请求位T1定时或计数完成时TF1=1,同控制 时申请中断;CPU响应该中断时, TF1=0

编程设定TCON为低电平触发的高优先级中断源。 法1:CLR IT1

单片机期末考试试题1

SETB PX1 SETB EX1 SETB EA 法2:CLR IT1 MOV IP,#04H MOV IE,#84H

TCON用于控制其启动、停止和中断申请。TCON的低4位用于控制外部中断,高4位用于控制定时/计数器的启动和中断申请。

SCON----串口控制寄存器SCON

功能:只有D1和D0位用于中断,作为串口中断请求标志,即串口中断请求寄存器;字节地址:98H;格式如下:D7 D6 D5 D4 D3 D2 D1(TI) D0(RI)

5、中断函数的写法,注意外部中断、定时器中断、串口中断;

软件构成:主程序+中断服务程序

6、定时器/计数器的原理和结构;

答案: 原理(1)计数-----定时/计数器的实质是加1计数器(16位),其原理类似于古代用来计时的水钟:(2)定

时------单片机内部的计数器用作定时器时,是对标准的时钟进行了计数,每来一个时钟脉冲,计数器加1,只要保证计数脉冲的间隔相等,则计数值就代表了时间的流逝。

结构单片机内部的16位定时/计数器由高8位和低8位两个寄存器组成:T0由TH0和TL0组成;T1由TH1和TL1组成;定时

/计数器的计数值就存放在这里面。定时/计数器T1的结构与T0相同。 定时/计数器T0的结构示意图

7、定时器的4种工作模式:方式0(13位)

7、定时器的4种工作模式:方式0(13位)、方式1(16位)、方式2(8位自动重载)、方式3(不要求掌握);

答案:工作方式0:当TMOD的M1M0=00时,定时/计数器工作于方式0。13位定时/计数方式,因此,最多可以计到213,也就是8192次。,由TL0的低5位和TH0(8位)共同完成计数功能(TL0的高3位可忽略)。 当TL0的低5位溢出时,向TH0产生进位;TH0溢出时,将定时器中断请求标志位TF0置1,可申请中断,也可对TF0进行查询。 工作方式1:当M1M0=01时,定时/计数器工作于方式1。方式1的计数位数是16位,因此,最多可以计到216,也就是65536次。由TL0作为低8位,TH0作为高8位共同构成。其余操作同方式0。

方式2(8位自动重载)当M1M0=10时,定时/计数器工作于方式2。这是自动重装初值的8位计数方式,因此,最多可以计到2 8,也就是256次。它省去了方式0和方式1在多次重复计数状态下必须重新设定计数初值的麻烦,但是却付出了减小定时时间的代价。

方式3(不要求掌握)方式3只适用于定时/计数器T0。当T1被设定为方式3状态时,将停止计数。当M1M0=11时,T0工作于方式3。此时TL0和TH0作为两个相互独立的8位定时/计数器使用。TL0既可定时又可计数,它使用T0的各控制位、引脚和中断源,即C/、GATE、TR0、TF0、T0(P3.4引脚)、(P3.2引脚);TH0此时只能用作内部定时功能,它借用了定时/计数器T1的控制位TR1和T1的中断标志位TF1,其启动和停止只受TR1控制。

8、定时器/计数器的控制寄存器及其每位所代表的含义:TCON、TMOD;

答案:在单片机中有两个特殊功能寄存器与定时/计数有关,它们就是TMOD和TCON,定时/计数器T0、T1就由它们来控制:

1.定时器工作方式寄存器TMODTMOD用于设置工作方式;TMOD用于设置T0和T1的工作方式,字节地址为89H,不能按位寻址。其格式和各位的含义如下:

单片机期末考试试题1

2.定时/计数器控制寄存器TCONTCON用于控制其启动、停止和中断申请。TCON的低4位用于控制外部中断,高4位用于控制定时/计数器的启动和中断申请。TF0(或TF1)

当计数溢出时,TF0(或TF1)会自动由0变1,告诉我们计数已满,我们可以通过查询TF0(或TF1)位的状态来判断计时时间是否已到;如果采用定时中断方式,则TF0(或TF1)由0变1时,能自动引发中断。TR0(或TR1)由图4-11 可知,只有当TR0(或TR1)为1时,开关1才能闭合,计数脉冲才能进入计数器,故TR0(或TR1)称为运行控制位,可用指令“SETB TR0(或TR1)”来置位以启动定时/计数器运行;或用指令“CLR TR0(或TR1)”来关闭定时/计数器的工作,一切全靠编程人员控制。

四、程序分析与系统设计题(4题,共40分)键盘,计时器

一, 编程实现c=a平方+b平方,设a,b均小于10,a存在31H单元;b存于32H单元,吧c存于

33H单元。

MOV A,31H MOV B,31H MUL A,B MOV C,A MOV A,32H

ORG 0000H

LJMP MAIN

ORG 000BH AJMP SERVE 主程序:

ORG 0030H

MAIN: MOV SP,#60H

MOV B,#0AH

MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#3CH SETB TR0

MOV B,32H MUL A,B ADD C,A MOV 33H,C

二,设时针钟频率为6MHZ,试编写利用T0产生1秒定时的程序,在程序中实现p1.0的反转

SETB ET0 SETB EA SJMP $ 中断服务程序: ORG 000BH

SERVE: MOV TL0,#0B0H

MOV TH0,#3CH

DJNZ B,LOOP

CLR TR0 CLR P1.0

LOOP: RETI

END

三,某信号采集系统要求用一片A/D转换集成芯片在1s内对16个热电偶的输出电压分数进行A/D转换。已知热电偶输出电压范围为0~25mV(对应于0~450℃温度范围),需分辨的温度为0.1

℃,试问应选

单片机期末考试试题1

择几位的A/D转换器?其转换时间为多少?

答案:分辨率=0.1/450=1/4500

12位ADC的分辨率=1/(2的12次方)=1/4096 故需选用13位A/D转换器。 转换时间=1/6=62.5ms

7、大题:3*5矩阵键盘的扫描、ADC0809的AD处理。 4、矩阵键盘的驱动写法;

实验题:利用8279实现对F4区的键盘扫描,将键号显示于8位数码管上

CMD_8279 XDATA 0bF01H ;8279命令字、状态字地址

DATA_8279 XDATA 0bF00H ;8279读写数据口的地址 KeyCount DATA 50H ORG 0000H LJMP STAR ORG 0100H STAR: MOV SP,#60H ACALL INIT8279;初始化子程序 MOV KeyCount,#0

STAR1: CALL SCAN_KEY ;键扫描 JNC STAR1 ;没有按键 XCH A,KeyCount INC A CJNE A,#9,STAR2 MOV KeyCount,#0 ACALL INIT8279_1 ;8个数码块全有字符显示后,再按键,清除显示 SJMP STAR1 STAR2: XCH A,KeyCount CALL KEY_NUM ;键值转换为键号 MOV DPTR,#LED_TAB ;字型码表 MOVC A,@A+DPTR CALL WRITE_DATA SJMP STAR1 ;8279初始化

INIT8279: MOV A,#34H ;可编程时钟设置,设置分频系数(20分频) MOVX @DPTR,A CLR A ;8*8字符显示,左边输入, 外部译码键扫描方式 MOV DPTR,#CMD_8279 MOVX @DPTR,A 三、矩阵式键盘及其接口电路

INIT8279_1: CALL CLEAR ;清显示 MOV A,#90H ;从最后一个数码管开始移位显示 MOVX @DPTR,A RET

CLEAR: MOV A,#0DEH ;清除命令 MOV DPTR,#CMD_8279 MOVX @DPTR,A WAIT1: MOVX A,@DPTR JB ACC.7,WAIT1 ;显示RAM清除完毕吗? RET

SCAN_KEY: MOV DPTR,#CMD_8279 MOVX A,@DPTR ;读状态 READ_FIFO: ANL A,#7 JZ NO_KEY;是否有键按下 READ: MOV A,#40H MOVX @DPTR,A ;读FIFO RAM MOV DPTR,#DATA_8279 MOVX A,@DPTR SETB C ;有键 SCAN_KEY1: RET NO_KEY: CLR C ;无键按下,清CY SJMP SCAN_KEY1 KEY_NUM: ANL A,#3FH RET

WRITE_DATA: MOV DPTR,#DATA_8279 MOVX @DPTR,A RET LED_TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 080H,90H,88H,83H,0C6H,0A1H,86H,8EH END

单片机期末考试试题1

【例9-10】按图9-15及图9-16,试编制矩阵式键盘扫描程序。 解:

KEY: MOV P1,#0F0H ;行线置低电平,列线置输 JC KEY4 ;C=1,该列有键按下,(列线编入态 号存R1) KEY0: MOV A,P1 ;读列线数据 DEC R1 ;C=0,无键按下,修正列编号 CPL A ;数据取反,“1”有效 DJNZ R3,KEY3 ;判循环结束否?未结束继续 ANL A,#0F0H ;屏蔽行线,保留列线数据 寻找有键按下的列线 MOV R1,A ;存列线数据(R1高4位) KEY4: MOV A,R2 ;取行线数据(低4位) JZ GRET ;全0,无键按下,返回 MOV R2,#00H ;置行线编号初值 KEY1: MOV P1,#0FH ;行线置输入态,列线置低 MOV R3,#03H ;置循环数

CLR C ; 电平

MOV A, P1 ;读行线数据 KEY5: RRC A ;依次右移入C中 CPL A ;数据取反,“1”有效 JC KEY6 ;C=1,该行有键按下,(行线编 ANL A, #0FH ;屏蔽列线,保留行线数据 号存R2) MOV R2,A ;存行线数据(R2低4位) INC R2 ;C=0,无键按下,修正行线编号 JZ GRET ;全0,无键按下,返回 DJNZ R3,KEY5 ;判循环结束否?未结束继续 JBC F0,WAIT ;已有消抖标志,转 寻找有键按下的行线 SETB F0 ;无消抖标志,置消抖标志 KEY6: MOV A,R2 ;取行线编号

CLR C ; LCALL DY10ms ;调用10ms延时子程序

(参阅例4.13),消抖 RLC A ;行编号×2 SJMP KEY0 ;重读行线列线数据 RLC A ;行编号×4 GRET: RET ; ADD A,R1 ;行编号×4+列编号=WAIT: MOV A,P1 ;等待按键释放 按键编号 CPL A ; KEY7: CLR C ; ANL A,#0FH ; RLC A ;按键编号×2 JNZ WAIT ;按键未释放,继续等待 RLC A ;按键编号×4(LCALL+ KEY2: MOV A,R1 ;取列线数据(高4位) RET共4字节)

MOV DPTR,#TABJ ; MOV R1,#03H ;取列线编号初值

MOV R3,#03H ;置循环数 JMP @A+DPTR ;散转,执行相应键功 CLR C ; 能子程序 KEY3: RLC A ;依次左移入C中 TABJ: LCALL WORK0 ;调用执行0#

键功能

单片机期末考试试题1

… … 子程序

RET ; LCALL WORK15 ;调用执行15#键功 LCALL WORK1 ;调用执行1#键功能能子程序

RET ; 子程序

RET ;

【例9-11】按图9-17,试编制中断方式键盘扫描程序,将键盘序号存入内RAM 30H。

ORG 0000H ;复位地址

LJMP STAT ;转初始化

ORG 0003H ;中断入口地址 LJMP PINT0 ;转中断服务程序 ORG 0100H ;初始化程序首地址 STAT: MOV SP,#60H ;置堆栈指针

SETB IT0 ;置为边沿触发方式 MOV IP,#00000001B ;置为高优先级中断 MOV P1,#00001111B ;置P1.0~P1.3置为输入态,置P1.4~P1.7输出0

SETB EA ;CPU开中 SETB EX0 ;开中

LJMP MAIN ;转主程序,并等待有键按下时中断

OGR 2000H ;中断服务程序首地址 PINT0: PUSH Acc ;保护现场 PUSH PSW ;

MOV A,P1 ;读行线(P1.0~P1.3)数据 CPL A ;数据取反,“1”有效

ANL A, #0FH ;屏蔽列线,保留行线数据 MOV R2,A ;存行线(P1.0~P1.3)数据(R2低4位)

MOV P1,#0F0H ;行线置低电平,列线置输入态

MOV A,P1 ;读列线(P1.4~P1.7)数据 CPL A ;数据取反,“1”有效

ANL A,#0F0H ;屏蔽行线,保留列线数据(A中高4位)

MOV R1,#03H ;取列线编号初值 MOV R3,#03H ;置循环数 CLR C ;

PINT01:RLC A ;依次左移入C中

JC PINT02 ;C=1,该列有键按下,(列线编号存R1)

DEC R1 ;C=0,无键按下,修正列编号 DJNZ R3,PINT01 ;判循环结束否?未结束继续寻找有键按下列线

PINT02:MOV A,R2 ;取行线数据(低4位) MOV R2,#00H ;置行线编号初值 MOV R3,#03H ;置循环数

PINT03:RRC A ;依次右移入C中

JC PINT04 ;C=1,该行有键按下,(行线编号存R2)

INC R2 ;C=0,无键按下,修正行线编号

DJNZ R3,PINT03 ;判循环结束否?未结束继续寻找有键按下行线

PINT04:MOV A,R2 ;取行线编号

单片机期末考试试题1

CLR C ;

RLC A ;行编号×2 RLC A ;行编号×4

ADD A,R1 ;行编号×4+列编号=按键编号

MOV 30H,A ;存按键编号 POP PSW ; POP Acc ; RETI ;

6、第九章课件P135页关于AD参数的设计例题;

四、8位集成ADC0809

ADC0809是采用CMOS工艺制成的8位八通道逐次逼近型A/D转换器。 分辨率: 8位 精度: 8位 转换时间: 100µs 增益温度系数: 20ppm/℃ 输入电平: TTL 功耗: 15mW 2.ADC0809工作原理

① 输入3位地址信号,在ALE脉冲的上升沿将地址锁存,经译码选通某一通道的模拟信号进入比较器;

②发出A/D转换启动信号START,在START的上升沿将SAR清0,转换结束标志EOC变为低电平,在START的下降沿开始转换;

③转换过程在时钟脉冲CLK的控制下进行;

④转换结束后,EOC跳为高电平,在OE端输入高电平,从而得到转换结果输出。 3.ADC0809引脚功能

IN0~IN7:8路模拟电压输入。 

ADDC、ADDB、ADDA:3位地址信号。 ALE:地址锁存允许信号输入,高电平有效。 D7~D0(2-1~2-8):8位二进制数码输出。

OE:输出允许信号,高电平有效。即当OE=1时,打开输出锁存器的三态门,将数据送出。 UR(+)和UR(-):基准电压的正端和负端。

CLK:时钟脉冲输入端。一般在此端加500kHz的时钟信号。

START:A/D转换启动信号,为一正脉冲。在START的上升沿将逐次比较寄存器SAR清0,在其下降沿开始A/D转换过程。

EOC:转换结束标志输出信号。在START信号上升沿之后 EOC信号变为低电平;当转换结束后,EOC变为高电平。此信号可作为向CPU发出的中断请求信号。

单片机期末考试试题1

2、ADC 0809应用实例 ⑴ 中断方式

【例9-12】 按图9-20,用中断方式对8路模拟信号依次A/D转换一次,并把结果存入以30H为首址的内RAM中,试编制程序。 解:

ORG 0000H ;复位地址 中断 LJMP STAT ;转初始化程序 ORG 0200H ;中断服务子程序首地址 ORG 0013H ;中断服务子程序入口PINT1: PUSH Acc ;保护现场

PUSH PSW ; 地址

LJMP PINT1 ;中断,转中断服务子程 MOVX A,@DPTR ;读A/D值 序; MOV @R1,A ;存A/D值 ORG 0100H ;初始化程序首地址 INC DPTR ;修正通道地址 STAT: MOV R1,#30H ;置数据区首址 INC R1 ;修正数据区地址 MOV R7,#8 ;置通道数 MOVX @DPTR,A ;启动下一通道A/D SETB IT1 ;置边沿触发方式 DJNZ R7,GORETI ;判8路采集完否?未完 SETB EX1 ;开中 继续 SETB EA ;CPU开中 CLR EX1 ;8路采集已完,关中 MOV DPTR,#0FEF8H ;置0809通道0地址 GORETI:POP PSW ;恢复现场

POP Acc ; MOVX @DPTR,A ;启动0通道A/D

LJMP MAIN ;转主程序,并等待A/D RETI ;中断返回 ⑵ 查询方式

工作在查询方式时,0809 EOC端可不必通过反相器与或相连,直接与80C51 P1口或P3口中任一端线相连。

【例9-13】 图9-20中,用P1.0直接与0809 EOC端相连,试用查询方式编制程序,对8路模拟信号依次A/D转换一次,并把结果存入以40H为首址的内RAM中。 解:

MAIN: MOV R1,#40H ;置数据区首址 MOV R7,#8 ;置通道数 SETB P1.0 ;置P1.0输入态

MOV DPTR,#0FEF8H ;置0809通道0地址 LOOP: MOVX @DPTR,A ;启动A/D

JNB P1.0,$ ;查询A/D转换结束否?未完继续查询等待 MOVX A,@DPTR ;A/D已结束,读A/D值 MOV @R1,A ;存A/D值

单片机期末考试试题1

INC DPTR ;修改通道地址 INC R1 ;修改数据区地址

DJNZ R7,LOOP ;判8路采集完否?未完继续 RET ;8路采集完毕,返回 ⑶ 延时等待方式

工作在延时等待方式时,0809 EOC端可不必与80C51相连,是根据时钟频率计算出A/D转换时间,略微延长后直接读A/D转换值。

【例9-14】 图9-20中,0809 EOC端开路,fosc=6MHz,试用延时等待方式编制程序,对8路模拟信号依次A/D转换一次,并把结果存入以50H为首址的内RAM中。 解:编程如下:

MAIN:MOV R1,#50H ;置数据区首址 MOVX A,@DPTR ;读A/D值 MOV R7,#8 ;置通道数 MOV @R1,A ;存A/D值 MOV DPTR,#0FEF8H;置0809通道0地址 INC DPTR ;修正通道地址 LOOP:MOVX @DPTR,A ;启动A/D INC R1 ;修正数据区地址 MOV R6,#17 ; DJNZ R7,LOOP ;判8路采集完否?未完继续 DJNZ R6,$ ;延时68 S:2机周×17=34机 RET ;8路采集完毕,返回 周,2 S×34=68 S

3、LED的显示驱动程序的写法; 并行扩展静态显示电路

【例9-2】按图9-3编制显示子程序,显示数(≤255)存在内RAM 30H中。 DIR1: MOV A,30H ;读显示数 MOV P0,A ;送数 MOV B,#100 ;置除数 MOV P2,#BFH ;输出十位显示符 DIV AB ;产生百位显示数字 MOV A,B ;读个位显示数字 MOVC A,@A+DPTR ;读百位显示符 MOV DPTR,#TAB ;置共阳字段码表首 MOV P0,A ;送数 址 MOV P2,#DFH ;输出百位显示符 MOV P0,A ;送数 MOV A,B ;读余数 MOV P2,#7FH ;输出个位显示符 MOV B,#10 ;置除数 MOVX @DPTR,A ;输出个位显示符

RET ; DIV AB ;产生十位显示数字

MOV DPTR,#TAB ;置共阳字段码表首TAB: DB 0C0H,0F9H,0A4H,0B0H,99H;共阳字段码表

DB 92H,82H,0F8H,80H,90H; 址

MOVC A,@A+DPTR ;读十位显示符 串行扩展静态显示电路

【例9-3】按图9-4编制显示子程序,显示字段码已分别存在32H~30H内RAM中。 DIR2: MOV SCON,#00H ;置串口方式0 JNB TI,$ ;等待串行发送完毕 CLR ES ;串口禁中 CLR TI ;清串行中断标志 SETB P1.0 ;“与”门开,允许TXD发 MOV SBUF,32H ;串行输出百位显示字移位脉冲 段码 MOV SBUF,30H ;串行输出个位显示字 JNB TI,$ ;等待串行发送完毕 段码 CLR TI ;清串行中断标志 JNB TI,$ ;等待串行发送完毕 CLR P1.0 ;“与”门关,禁止TXD发 CLR TI ;清串行中断标志 移位脉冲

RET ; MOV SBUF,31H ;串行输出十位显示字

段码

BCD码输出静态显示电路

【例9-4】按图9-5试编制显示子程序(小数点固定在第二位),已知显示数存在内RAM 30H~32H中。

单片机期末考试试题1

解:编程如下:

DIR3: MOV P1,#11100000B ;选通个位

ORL P1,30H ;输出个位显示数 MOV P1,#11010000B ;选通十位

ORL P1,31H ;输出十位显示数 MOV P1,#10110000B ;选通百位

ORL P1,32H ;输出百位显示数 RET

【例9-5】按图9-7,试编制循环扫描(10次)显示子程序,已知显示字段码存在以30H(低位)为首址的8字节内RAM中。

解:编程如下:

DIR4:MOV R2,#10 ;置循环扫描次数 INC P1 ;选通下一位显示 MOV DPTR,#7FFFH ;置74377口地址 CJNE R0,#38H,DLP2 ;判8位扫描显示完否?未DLP1:ANL P1,#11111000B ;第0位先显示 完继续 MOV R0,#30H ;置显示字段码首址 DJNZ R2,DLP1 ;8位扫描显示完毕,判10DLP2:MOV A,@R0 ;读显示字段码 次循环完否? MOVX @DPTR,A ;输出显示字段码 CLR A ;10次循环完毕,显示暗

MOVX @DPTR,A ; LCALL DY2ms ;调用延时2ms子程序

(参阅例4.13) RET ;子程序返回 INC R0 ;指向下一位字段码

2复位电路简答题

4 pc,sc-----干什么的,pc,p0,p1,T0,T1,DPTR都是16位,其他都是8位 MOV MOVX MOVC 两个大题 5章 1,单片机 定时器+中断=大题 9 如何设定定时值

九 5---0809 6----必考

7----- 已有图,直接写程序

----ADC0809-----分时手用两个通道,直接写驱动 实验题:定时器/中断实验---电子钟

编写一个时钟程序,使用单片机定时器1产生一个10ms的定时中断,对定时中断计数,将时,分,秒显示在数码管上

LJMP STAR ; 电子时钟(显示时分秒)

ms50 DATA 31H ;存放多少个50ms

sec DATA 32H ;秒 ORG 000BH ;定时器T0中断处理入min DATA 33H ;分 口地址

LJMP INT_Timer0 hour DATA 34H ;时

ORG 0100H buffer DATA 35H ;显示缓冲区

STAR: MOV SP,#60H ;堆栈 EXTRN CODE(Display8) MOV ms50,A ;清零ms50 MOV hour,#12 ;设定初值: 12:59:50 ORG 0000H MOV min,#59

单片机期末考试试题1

MOV sec,#50 MOV TH0,#60 ;定时中断计数器初值 MOV TL0,#176 ;定时250ns MOV TMOD,#1 ;定时器0:方式一 MOV @R1,#0 INC R1 INC @R1 ;时加1 CJNE @R1,#24,ExitInt1 MOV IE,#82H ;中断初始化,EA=1,ET0=1 SETB TR0 ;开定时器T0 STAR1: LCALL Display ;调用显示 JNB F0,STAR1;$ CLR F0 SJMP STAR1 ;需要重新显示时间 ;中断服务程序

INT_Timer0: MOV TL0,#176+5 MOV TH0,#60 PUSH 01H MOV R1,#ms50 INC @R1 ;50ms单元加1 CJNE @R1,#20,ExitInt MOV @R1,#0 ;恢复初值 INC R1 INC @R1 ;秒加1 CJNE @R1,#60,ExitInt1 MOV @R1,#0 INC R1 INC @R1 ;分加1 CJNE @R1,#60,ExitInt1 MOV A,hour ACALL HexToBCD MOV R0,#buffer LCALL Display8 RET END

MOV @R1,#0 ExitInt1: SETB F0 ExitInt: POP 01H RETI

HexToBCD: MOV B,#10 DIV AB MOV @R0,B INC R0 MOV @R0,A INC R0 RET

Display: MOV R0,#buffer MOV A,sec ACALL HexToBCD MOV @R0,#10H INC R0 MOV A,min ACALL HexToBCD MOV @R0,#10H INC R0

;第三位不显示 ;第六位不显示

本文来源:https://www.bwwdw.com/article/hqtq.html

Top