单片机原理与应用-基于汇编、C51及混合编程1-11章习题解答(共63页).doc

上传人:飞****2 文档编号:12221969 上传时间:2022-04-24 格式:DOC 页数:63 大小:965.50KB
返回 下载 相关 举报
单片机原理与应用-基于汇编、C51及混合编程1-11章习题解答(共63页).doc_第1页
第1页 / 共63页
单片机原理与应用-基于汇编、C51及混合编程1-11章习题解答(共63页).doc_第2页
第2页 / 共63页
点击查看更多>>
资源描述

《单片机原理与应用-基于汇编、C51及混合编程1-11章习题解答(共63页).doc》由会员分享,可在线阅读,更多相关《单片机原理与应用-基于汇编、C51及混合编程1-11章习题解答(共63页).doc(63页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精选优质文档-倾情为你奉上习题一1.什么是单片机?单片机全称单片微型计算机。它是把计算机中的微处理器、只读存储器(ROM)、随机访问存储器(RAM)、I/O接口、串行接口、中断系统、定时/计数器等基本功能部件微型化并集成到一块芯片上构成的小而完善的计算机。2.单片机的主要用途是什么?单片机有体积小、功耗低、面向控制、抗干扰能力强、性价比高等优点,被广泛应用于家用电器、办公自动化、工业控制、智能仪器仪表与集成智能传感器、汽车电子与航空航天电子系统等各种控制系统中。习题二2-1.STC12C5A60S2单片机的内部集成了哪些功能部件?各个功能部件的具体功能是什么?在STC12C5A60S2单片机内

2、部,其基本结构主要有中央处理器CPU、程序存储器、数据存储器、定时/计数器、UART串行口、I/O接口、高速A/D转换、同步串行外围接口、PCA、看门狗WDT及片内RC振荡器和外部晶体震荡电路等模块组成。各部件功能: 中央处理器CPU:负责运算控制和调度,使整个系统协调工作。 程序存储器:用于存放用户程序、数据和表格等信息。 数据存储器:用于存放单片机运行过程中的运算数据及运算地址等。 定时/计数器:常用定时器时钟来实现定时检测、定时控制;还可以用定时器产生毫秒宽的脉冲,来驱动步进电机一类的电器机械。计数器主要用于外部事件的计数。 看门狗WDT:在单片机出现运行紊乱时,可以使单片机重新启动,恢

3、复正常运行。 I/O接口:单片机通过I/O引脚进行输入,输出操作。 振荡器:产生单片机运行所需要的时钟信号。2-2.封装模式为LQFP-48、PDIP-40的STC12C5A60S2单片机的I/O引脚各有多少?P0、P2口各有什么功能?封装模式为LQFP-48的STC12C5A60S2单片机有48个引脚,44个I/O引脚。封装模式为PDIP-40的STC12C5A60S2单片机有40个引脚,36个I/O引脚。P0口和P2口都可以作为通用的I/O口使用;当单片机访问外部扩展电路或设备时,P0口可以作为地址总线的低8位及数据总线接口,地址/数据分时复用,P2口作为地址总线的高8位。2-3.简述PS

4、W寄存器各位的作用。若寄存器A中的内容为63H,P标志位为何值?CY:进位或借位标志位,简称C。在执行8位的加、减法指令时,用于记录最高位的进位或借位。有进位或借位时则置位,否则清零。AC:辅助进位标志位,在执行加减法时,若D3向D4有进位或借位时,AC置位,否则AC清零。OV:溢出标志位。在执行加减法运算时,若运算的结果超出8位有符号数表示的范围-128-+127,表示溢出,OV置1,否则OV清零。P:奇偶校验标志位。用于记录A寄存器中的1的个数的奇偶性。若A寄存器中1的个数为奇数,则P置位,为偶数则清零。RS1、RS0:寄存器组选择位,用来选择当前的工作寄存器组。F0、F1:用户标志位。若

5、寄存器A中的内容为63H(B),A中“1”的个数为4,所以P0。2-4.STC12C5A60S2单片机内部有哪几类存储器?中断服务程序的入口地址分布在哪个区域?STC12C5A60S2单片机内部有程序存储器、数据存储器RAM、特殊功能寄存器、扩展RAM。中断服务程序的入口地址位于程序存储器的首部。2-5.STC系列单片机系统复位后,程序存储器指针PC的值是多少?当单片机正在执行某一条指令时,PC指向哪里?STC系列单片机系统复位后,程序存储器指针PC的值是 0000H。当单片机正在执行某一条指令时,PC指向下一条指令的地址。2-6.片内RAM中,数据存储器的低128字节、高128字节和特殊功能

6、寄存器可以使用什么寻址方式?哪些单元可作为工作寄存器区,那些单元可以位寻址?访问低128字节RAM时,既能采用寄存器直接寻址,又可寄存器间接寻址。访问高128字节RAM时,只能采用寄存器间接寻址,但可以作为堆栈区。访问特殊功能寄存器,只能直接寻址。00H-1FH为工作寄存器组区;片内RAM中20H-2FH单元为位寻址区。2-7.在片内RAM中,位地址为30H的位属于字节地址为多少的单元?字节地址为26H。2-8.STC系列单片机复位后,使用了哪一工作寄存器组?当CPU使用的工作寄存器组为2组时,R2对应的RAM地址是多少?STC系列单片机复位后,所使用的工作寄存器组为0组;当CPU使用的工作寄

7、存器组为2组时,R2对应的RAM地址是12H。2-9.什么是堆栈?简述STC12C5A60S2单片机的堆栈处理过程。堆栈是在RAM中开辟的一片数据缓冲区,常用于保护CPU现场及临时数据,其操作遵循先进后出、后进先出的原则。STC12C5A60S2单片机的堆栈处理过程:数据入栈时,SP指针内容先自动加1,然后再将数据推入到SP指针指向的单元;出栈时,先将SP指针所指向单元的数据弹出,然后SP指针的内容自动减1.2-10.以下关于数据指针DPTR和程序指针PC的概述是否正确?(1)DPTR是可以访问的,而PC不能访问; (2)它们都是16位的寄存器; (3)它们都具有临时存储数据的功能; (4)D

8、PTR可以分成2个8位的寄存器使用,而PC不能。 2-11.单片机与外部存储器连接时,P0口用作地址/数据复用,需要添加什么芯片才能锁存8位地址信息?单片机与外部存储器连接时,P0口用作地址/数据复用,需要添加地址锁存器,如74LS373。2-12.如何设置 STC12C5A60S2单片机I/O口工作模式?若设置P1.7为强推挽输出,P1.6为开漏,P1.5为弱上拉,P1.4,P1.3,P1.2,P1.1,和P1.0为高阻输入,应如何设置相关寄存器?STC12C5A60S2单片机上电复位后所有引脚都默认为准双向(弱上拉)方式。根据具体应用可由软件配置成:准双向、强推挽、仅为输入或开漏输出4种工

9、作方式。Px(x=0,1,2,3,4,5)口引脚的工作方式由特殊功能寄存器PxM1和PxM0相应位的配置决定 I/O口工作模式设定PxM17:0PxM07:0I/O 口模式00准双向口 (传统 8051I/O口模式 ),灌电流可达20mA, 拉电流为230uA01强推挽输出 ,输入输出电流都能可达20mA。10仅为输入 (高阻)11开漏 ,内部上拉电阻断开若设置P1.7为强推挽输出,P1.6为开漏,P1.5为弱上拉(准双向),P1.4,P1.3,P1.2,P1.1,和P1.0为高阻输入,可通过以下的两条指令来完成:MOV P1M1,#B;MOV P1M0,#B;2-13.I/O口作为输入引脚,

10、应工作在何种方式?读外部引脚状态时,为何要先向相应引脚对应的锁存器写入“1”?I/O口作为输入引脚,应工作在准双向或仅为输入状态;在准双向口配置情况下,先输出高电平,使d管截止,才可读到正确的外部输入状态。2-14.STC12C5A60S2单片机复位方式有哪些?复位后单片机的初始状态如何?STC12C5A60S2单片机复位方式有上电复位、看门狗复位、外部低压检测复位、软件复位。复位后,单片机从用户程序区0000H处开始正常工作;堆栈指针SP指向07H,P0P3为FFH。习题三31 使用Proteus对电路进行仿真,有哪些步骤?使用Proteus进行单片机系统设计、仿真主要有七个步骤,依次是新建

11、设计文件,选取元件并加入列表区,将元件摆放到图形编辑窗口,放置电源、地线、布线、加载目标程序代码,运行仿真。32 在Keil中,源程序文件从编辑到生成*.hex文件,经过哪些过程?在Keil中,源程序文件从编辑到生成*.hex文件要经过建立工程,建立源程序文件,建立文件和程序的连接,工作环境和参数的设置,再进行编译、连接可以生成目标文件。33 在Keil中,如何对源程序文件进行软件模拟调试?Keil软件中有一个仿真CPU用来模拟程序的执行,可以在没有硬件和仿真器的情况下进行程序的调试,这就是软件模拟调试的方法。对源文件进行软件模拟调试,首先要启动调试。对工程编译、连接成功以后,使用菜单“Deb

12、ug”“Start/StopDebug Session”进入调试状态,按“Ctrl+F5”组合键或者使用按钮也能进入调试状态。这时,源程序窗口的左侧出现一个黄色箭头,指向main( )函数的第一行,该箭头总是指向即将要运行的语句行。退出调试状态和启动调试状态方法一致。调试过程中使用最多的是“Debug”菜单,而该菜单上的大部分命令可以在“debug”工具栏中找到对应的快捷按钮。常用按钮有:运行,单步,过程单步,单步跳出,执行到当前,反汇编窗口,观察窗口,存储器窗口。其中单步调试方式特别常用。单步执行后,可以通过各个窗口观察执行结果,从而判断该条语句是否出现问题。如果程序较长,可以采用下面的方法

13、来调试。首先,在合适的位置设置断点,方法为:在某一行上右击,弹出的快捷菜单中选择“Insert/Remove Breakpoint”。设置成功后,该行的前面会有红色方块指示。这时如果单击“运行”按钮,程序运行到断点处会自动停止。删除断点也需使用同样的方法。如果程序的运行要依赖于外围接口,例如并行口、串行口、中断、定时/计数器等,Keil的“Peripherals”菜单中提供了一些选项,通过这些选项打开对应外围接口的对话选框,可以观察外围接口的状态,或者更改外围接口的运行情况。习题四41 51内核单片机有哪几种寻址方式?片内RAM低128字节及高128字节分别支持哪些寻址方式?片内扩展RAM、片

14、外RAM及特殊功能寄存器分别支持哪些寻址方式?51内核单片机的寻址方式有:立即(数)寻址、寄存器寻址、直接寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址。片内RAM低128字节支持直接寻址、寄存器间接寻址。片内RAM高128字节支持寄存器间接寻址。片内扩展RAM及片外RAM支持间接寻址。特殊功能寄存器支持直接寻址。42 区分下列指令有什么不同?(1) MOV A,#22H和MOV A,22HMOV A,#22H ;将立即数22H送入A寄存器中,第二操作数为立即寻址。MOV A,22H ;把片内RAM字节地址为22H单元的内容送入A寄存器中,第二操作数为直接寻址。(2) MOV A,R1和MO

15、V A,R1MOV A,R1 ;把R1的内容送入A寄存器中,第二操作数为寄存器寻址。MOV A,R1 ;将寄存器R0的内容作为RAM某单元的地址,将该单元的内容传送给A寄存器,第二操作数为寄存器间接寻址。(3) MOV A,R1和MOVX A,R1MOV A,R1 ;将寄存器R1的内容作为片内RAM某单元的地址,将该单元的内容传送给A寄存器MOVX A,R1 ;将寄存器R1的内容作为片内扩展或外部RAM某单元的地址,将该单元的内容传送给A寄存器两者的区别是:MOV访问的是内部RAM,MOVX访问的是片内扩展或外部RAM。(4) MOVX A,R1和MOVX A,DPTR主要的区别在于对外输出地

16、址的方式上。如果是访问片外扩展RAM,MOVX A,R1只是占用P0口,输出R1中的8位地址。而MOVX A,DPTR要占用P0、P2口,输出DPTR中的16位地址。(5) MOVC A,A+DPTR和MOVX A,DPTRMOVC A, A+DPTR ;功能是A寄存器的内容作为无符号数和DPTR内容相加后得到一个16位的地址,将程序存储器中该地址的内容传送给A。MOVX A,DPTR ;以DPTR寄存器的值作为片内扩展RAM或者片外RAM的地址,将该地址单元的内容送入A 。两者的区别是MOVC访问的是整个ROM的64KB空间;MOVX访问的是整个片内扩展RAM或片外扩展RAM。43 写出完成

17、下列各项任务的指令。(1) 片内RAM 30H 单元的内容送到片内RAM 50H单元中。MOV 50H,30H(2) 片内RAM 40H单元的内容送到片内扩展RAM 50H单元中。ANL AUXR,#BMOV A,40HMOV DPTR,#50HMOVX DPTR ,A(3) 片内RAM 50H单元的内容送到片外RAM 2000H单元中。ORL AUXR,#BMOV A , 50HMOV DPTR , #2000HMOVX DPTR , A(4) 片外RAM 2000H单元的内容送到片外RAM 4000H单元中。ORL AUXR , #BMOV DPTR,#2000HMOVX A,DPTRMO

18、V DPTR,#4000HMOVX DPTR,A(5) ROM 1000H单元的内容送到片外RAM 8000H单元中。MOV DPTR,#1000HMOV A , #0MOVC A , A+DPTRMOV DPTR,#8000HORL AUXR,#BMOVX DPTR , A(6) 将程序状态字寄存器PSW内容传送到片内扩展RAM 0D0H单元中。ANL AUXR , #BMOV A,PSWMOV DPTR , #0D0HMOVX DPTR , A(7) 将片内RAM 01HFFH单元内容清零。ANL PSW , #BMOV R0,#0FFHMOV A,#0LOOP:MOV R0,ADJNZ

19、R0,LOOP(8) 使片内RAM 20H 单元的b7、b6位清零,b5、b4位置1,b3、b2位取反,其余各位保持不变。ANL 20H,#BORL 20H,#BXRL 20H,#B44下列各条伪指令前的标号各代表的地址是多少?ORG 0100H TABLE:DS 4 ;TABLE代表的的地址是0100HWORD:DB 15,0FFH,30 ;WORD代表的地址是0104HBIN EQU 0200H TAB1: DW 07H ;TAB1代表的地址是0107H45 假设程序头文件中含有如下变量定义伪指令DBUF DATA40HBDATA DATA60H(1) 请指出如下指令中源操作数的寻址方式。

20、MOV R0,#DBUF ;立即(数)寻址MOV R0,DBUF ;直接寻址(2) 执行如下程序段后,片内RAM 40H4FH单元的内容是什么?60H单元的内容又是什么?MOVBDATA,#10HMOVR0,#DBUFCLRALOOP: MOVR0,AINCAINCR0DJNZBDATA,LOOP执行以上程序段后,片内RAM 40H4FH单元的内容是:0-0FH;60H单元的内容为0。46 编写一个延时10ms的子程序。选择STC12C5A60S2单片机,系统时钟频率为12MHz,程序如下:DELAY_10ms: MOV R7,#120 ;2TDL: MOV R6,#250 ;2T DJNZ

21、R6,$ ;4T DJNR R7,DL ;4T RET ;4T 47编程实现的逻辑运算。 MOV C,P1.1 ORL C,P1.2 CPL C MOV PSW.5,C MOV C,P1.4 ANL C,/P1.3ORL C,PSW.5 MOV P1.0,C 48 将存放在片内RAM 51H、52H和片外RAM 2000H、2001H的四位BCD码相加,结果存放在片内RAM 50H、51H、52H单元中(假设低位字节存放在高地址中,高位字节存放在低地址中)。 ORL AUXR,B MOV DPTR,#2001HMOVX A,DPTRADD A,52HDA AMOV 52H,AMOV DPTR

22、,#2000HMOVX A,DPTRADDC A,51HDA AMOV 51H,AMOV A,#00HADDC A,#00HMOV 50H,A49编程实现将片内扩展RAM 0200H0220H单元的内容,全部移到片内RAM 30H单元开始的位置,并将原位置清零。 MOVR0,#30HMOVDPTR,#0200HMOVR1,#21HANL AUXR , #BLOOP:MOVXA,DPTRMOVR0,AMOVA,#0MOVX DPTR,AINCR0INCDPTRDJNZR1,LOOP410 将存放在R3、R2中的三位压缩BCD码转换为二进制形式。W_BCD_BI:LCALL B_BCD_BI;调用

23、将R2中单字节BCD码转换为二进制数的子程序, ;转换的结果存放于A寄存器中MOV R4, A ;把转换结果暂时保存到R4MOV A, R3 ;取BCD码的高1位MOV B, #100 MUL AB ;计算(a3*10+a2)*100ADD A, R4 ;加低2位转换结果MOV R2, A ;保存转换结果的低8位MOV A, B ;取(a3*10+a2)*100的高8位ADDC A, #0 ;加进位位MOV R3, A ;保存转换结果的高8位. .B_BCD_BI:MOV A, R2 ;取BCD码ANL A, #0F0H ;保留高4位(即十位)SWAP AMOV B, #10MUL AB ;十

24、位*10,最大为90(即5AH),因此高8位为0MOV B, A ;乘积暂存到B寄存器MOV A, R2 ;取BCD码ANL A, #0FH ;保留个位ADD A, B ;个位加“十位*10”,结果在A寄存器中RET411 编写程序完成运算R0R1R2R3,乘积存R4、R5、R6和R7中。 MUL:CLRAMOVR4,AMOVR5,AMOVR6,AMOVR7,AMUL1:MOVA,R1MOVB,R3MULABMOVR7,AMOVR6,BMUL2:MOVA,R0MOVB,R3MULABADDA,R6MOVR6,ACLRAADDCA,BMOVR5,AMUL3:MOVA,R1MOVB,R2MULAB

25、ADDA,R6MOVR6,AMOVA,R5ADDCA,BMOVR5,ACLRAADDCA,0MOVR4,AMUL4:MOVA,R0MOVB,R2MULABADDA,R5MOVR5,AMOVA,R4ADDCA,BMOVR4,ARET习题五51 在C51语言中支持哪些数据类型?C51特有的数据类型有哪些?在C51语言中支持的数据类型有:char(字符型)、int(整型)、long(长整形)、float(浮点型)、特殊功能寄存器类型和位类型。C51特有的数据类型有:特殊功能寄存器类型和位类型。52 C51中的存储器类型有几种,它们分别表示的存储器区域是什么?C51中的存储器类型有:data、bdat

26、a、idata、pdata、xdata、code存储器类型与硬件存储器空间的对应关系data直接寻址的片内RAM低128B,访问速度快bdata片内RAM可位寻址区(20H-2FH),允许字节和位混合访问idata用Ri间接寻址的片内RAM全部地址空间pdata用Ri间接访问的片内扩展RAM或片外扩展RAM低256Bxdata用DPTR间接访问的片内扩展RAM或片外扩展RAM(64K)code程序存储器ROM空间(64KB)53 在C51中,bit位与sbit位有什么区别?两种位变量的区别在于,用bit定义的位变量,其地址由C51编译时予以安排,而用sbit定义位变量时必须同时定义其位地址,在

27、C51编译器编译时,其位地址不可变化。54 在C51中,中断函数与一般函数有什么不同?(1) 中断函数不能进行参数传递(2) 中断函数没有返回值(3) 在任何情况下都不能直接调用中断函数(4) 如果在中断函数中调用了其他函数,则被调用函数使用的工作寄存器必须与中断函数相同。否则会产生不正确的结果。(5) 在中断函数中调用其他函数,被调函数最好设置为可重入的,因为中断是随机的,有可能中断函数所调用的函数出现嵌套调用。(6) C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容。(7) 中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。55 请分别定义下列变量:(1)

28、片内RAM中无符号字符型变量x; unsigned char idata x;(2)片内RAM中位寻址区无符号字符型变量y,将y.0y.2再分别定义为位变量key_in、key_up、key_down; 片内RAM中位寻址区无符号字符型变量y :unsigned char bdata y;定义y.0y.2为位变量key_in、key_up、key_down: sbit key_in=y0;sbit key_up=y1;sbit key_down=y2;(3)片外RAM中整型变量x,并指定变量x的绝对地址为4000H; #define x XWORD0X2000或:xdata int x _at

29、_ 0x4000;(4)特殊功能寄存器变量PCON; sfr PCON=0X8756用C51语言写出整型变量a左移4位的语句。 int a; a= a4;57用C51语言编程实现,片内扩展RAM的000EH单元和000FH单元的内容交换。#include #includevoid swap()char data c,d;AUXR&=0xFD;c=XBYTE0x000E;d=XBYTE0x000F;XBYTE0x000E=d;XBYTE0x000F=c;58已知 x=375,y=589,用C51语言编写程序,计算z=x+y的结果。int add()int x,y,z;x=375;y=589;z=

30、x+y;return z;59 试用C51语言编写程序实现将片内RAM 21H单元存放的两位BCD码数转换为十六进制数存入30H单元。data unsigned char y1 _at_ 0x21;data unsigned char y2 _at_ 0x30;void trans()unsigned char temp;temp=y1;y1=(y1&0xf0)4;y2=y1*10+(temp&0x0f);510 试用C51语言编写程序实现将片内RAM 30H、31H单元存放的2字节十六进制数转换为十进制数存于21H为首的单元中。(设低地址存放高位字节)#include#include #de

31、fine uint unsigned int#define uchar unsigned charuchar digit_h _at_ 0x30;uchar digit_l _at_ 0x31;uchar *p;int buf;void H_D()buf= digit_h *256;buf=buf+ digit_l;for(p=0x25;p=0x21;P-)*p=buf%10;buf=buf/10;511试用C51语言编写程序实现将09,AF十六进制数转换成相应的ASCII码。#include void H_A(unsigned char X)if(X=9)X=X+0x30;elseX=X+0

32、x37;return X512参见图53,通过单片机的并行口P1,控制8路LED灯轮流且循环点亮。引脚为0时灯亮,为1时灯熄灭。#include#incldueunsigned char i=0x7f;void main() while(1) P1=i; delay(); i=_cror_(i,1); void delay()unsigned char l,m,n;for(l=0;l254;l+) for(m=0;m254;m+) for(n=0;n254;n+); 习题661 如何在C51程序中嵌入汇编?第一步:通过预编译命令“#pragma asm”和“#pragma endasm”在C语

33、言代码中插入汇编语言代码。第二步:在KeilC51环境下,在Project窗口中包含汇编代码的C文件上单击右键,在弹出的快捷菜单中选择“Options for”命令,再次点击选中右边的“Generate Assembler SRC File”和“Assembler SRC file”复选框,使检查框由灰色变成黑色状态。第三步:根据选择的编译模式,把相应的库文件(如Small模式时,是KeilC51LibC51S.Lib)加入到工程中,该文件必须作为工程的最后文件。库文件与编译模式的关系如下: C51S.LIB_没有浮点运算的 Small 模式C51C.LIB_没有浮点运算的 Compact 模

34、式C51L.LIB_没有浮点运算的 Large 模式C51FPS.LIB_带浮点运算的 Small 模式C51FPC.LIB_带浮点运算的 Compact 模式C51FPL.LIB_带浮点运算的 Large 模式第四步:编译,生成目标代码。62 简述在C51中调用汇编程序的实现方法。在C51中调用汇编程序,要把用C语言编写的程序保存为扩展名为.C的C语言文件,把用汇编语言编写的程序保存为扩展名为.asm、.SRC或者.A51的汇编语言文件,然后把这些文件导入到同一个工程下进行编译连接。在C语言中调用汇编程序时,对被调用函数(汇编语言函数)要在主调函数(C语言函数)所在文件中作出声明,并且对汇编

35、语言程序有一下要求:(1) 要使用SEGMENT伪指令定义可再定位的CODE段。(2) 要根据不同的情况对函数名进行转换,见表6-1。(3) 要使用PUBLIC伪指令将被调用函数说明为外部可用函数。(4) 若有参数传递,按照表6-3所列的规则使用参数。(5) 若有返回值,按照表6-4所列规则存入寄存器。习题771 什么是中断?CPU为什么要采用中断结构?中断是指CPU正在执行某程序时,外部或者内部发生了随机的事件,请求CPU迅速去处理,CPU暂时停止现行的程序的执行,而自动转去执行预先安排好的处理该事件的服务子程序。处理完成后返回到断点处继续执行。中断结构使CPU具有随机应变的能力,提高了CP

36、U效率,增强了实时性。72 STC12C5A60S2单片机有哪几个中断源?单片机响应各中断后,应如何清除相应中断标志位?其中断服务程序的入口地址各是多少?STC12C5A60S2单片机有10个中断源:外部中断0(INT0)、定时/计数器T0、外部中断1(INT1)、定时计数器T1、串行口1(UART1)、A/D转换、串行口2(UART2)、低压检测(LVD)中断、PCA中断和SPI中断。单片机响应各中断后,相应中断标志位的清除:IE0、IE1:外部中断0、外部中断1设置为下降沿触发方式时,CPU响应该中断时由硬件自动将IE0、IE1位清0,如果设置为低电平触发方式,必须在程序中通过指令清0。T

37、F0、TF1中断响应后由内部硬件电路自动清0。其余各中断标志位都要通过用户程序清0。中断服务程序的入口地址:INT0:0003H T0:000BH INT1:0013H T1:001BHUART1:0023H ADC:002BH LVD:0033H PCA:003BHUATR2:0043H SPI:004BH73 STC12C5A60S2单片机的中断系统中有几个优先级?如何设定?当中断优先级相同时,其自然优先权顺序是怎样的?STC12C5A60S2单片机的中断系统中有4个优先级。STC系列单片机中,设置特殊功能寄存器IP、IP2、IPH、IP2H可以实现4个中断优先级选择。当中断优先级相同时,

38、如果其中的几个中断源同时产生中断请求,中断源响应中断的次序取决于内部的查询次序。各中断源中断优先查询次序由高到低依次是:INT0、T0、INT1、T1、UART1、ADC、LVD、PCA、UATR2、SPI74 简述STC12C5A60S2单片机的中断嵌套原则。 1. 在运行低优先级中断源的中断服务程序中,能被高优先级的中断源中断,反之不能。2. 任何中断,一旦得到CPU响应,就不会被同一中断优先级别的中断源中断。75 中断响应过程中,为什么要保护现场?如何保护?因为中断服务程序会用到一些寄存器和存储器,如果不保护现场,这些寄存器和存储器中的数据就会覆盖,当中断返回继续运行原来的程序时,就会得

39、到错误的结果。所以通常要保护现场。保护现场的方法是把中断程序中用到的寄存器、存储器等要保护的内容压入到堆栈。76 STC系列单片机中如何选择和设置外部中断的边沿触发和电平触发方式 ? TCON寄存器中的IT0/TCON.0和IT1/TCON.2决定了外部中断0和1是下降沿触发还是低电平触发。当ITx=1(x=0,1),系统在INTx(x=0,1)引脚检测到下降沿后产生外部中断。当ITx=0(x=0,1),系统在INTx(x=0,1)引脚检测到低电平后产生外部中断。77 在STC12C5A60S2单片机中,假设系统的时钟频率为12MHz,利用定时/计数器T0,分别用汇编语言和C51编程实现在P1

40、.0引脚输出周期为2s的方波。用寄存器R2作为定时器T0中断次数计数器。分析:要产生周期2s的方波,需定时1s。选择12T模式,T0x12=0,f=12MHz,机器周期T= ,T0工作在方式1,最大定时时间为,所以一个定时器完成不了定时1s的任务。可以利用R2计数20次,每次定时50ms,则,计数初值C=15536=3CB0H,(1)汇编程序:ORG 0000HLJMP MAINORG 000BH ;T0的中断向量入口地址LJMP T0_INTORG 0100HMAIN:MOV SP,#0BFH ;初始化堆栈指针 MOV TMOD,# 01H ;T0工作在方式1 MOV TL0,#0B0H ;

41、给T0写入初值 MOV TH0,#03CH MOV R2,#20 ;利用寄存器R2计数20次SETB EA ;开放总中断SETB ET0 ;T0溢出中断允许 SETB TR0 ;启动T0开始工作 SJMP $T0_INT:MOV TL0,#0B0H ;重新赋初值MOV TH0,#03CH DJNZ R2,NEXT CPL P1.0 MOV R2,#20 ;重新赋给R2值20NEXT:RETIEND(1) C51程序:#include/sbit P1_0=P10;unsigned char i=0;void main( )TMOD=0x01;/T0工作在方式1TL0=0xB0;/给T0装入初值T

42、H0=0x3C; EA=1;/开放总中断ET0=1;/T0溢出中断允许TR0=1;/启动T0开始工作while(1);void T0_INT( ) interrupt 1/T0中断服务程序TH0=0x3C;TL0=0xB0;/重新置入初值 i+; if(i= =20) P1_0=P1_0;i=0; 78由P1口驱动8个指示灯,利用定时/计数器T1的定时功能分别用汇编语言和C51编程实现8个指示灯依次循环点亮(输出高电平),点亮间隔为1s,反复循环。分析:仿照上题,T1需定时50ms,R7计数20次,达到定时1s的目的,每隔1s,循环一次,实现轮流点亮。(1)汇编程序ORG 0000HLJMP MAINORG 001BH ;T1的中断向量入口地址LJMP T1_INTORG 0100HMAIN:MOV SP,#0BFH ;初始化堆栈指针 MOV TMOD,# 10H ;T1工作在方式1 MOV TL1,#0B0H ;给T1写入初值 MOV TH1,#03CH MOV R7,#20 ;利用寄存器R7计数20次MOV A,#01H SETB EA ;开放总中断 SETB ET1 ;T1溢出中断允许 SETB TR1 ;启动T1开始工作 SJMP $T1_INT:MOV

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com