收藏 分享(赏)

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

上传人:hyngb9260 文档编号:6780705 上传时间:2019-04-22 格式:DOC 页数:63 大小:986KB
下载 相关 举报
单片机原理与应用-基于汇编、C51及混合编程1-11章习题解答.doc_第1页
第1页 / 共63页
单片机原理与应用-基于汇编、C51及混合编程1-11章习题解答.doc_第2页
第2页 / 共63页
单片机原理与应用-基于汇编、C51及混合编程1-11章习题解答.doc_第3页
第3页 / 共63页
单片机原理与应用-基于汇编、C51及混合编程1-11章习题解答.doc_第4页
第4页 / 共63页
单片机原理与应用-基于汇编、C51及混合编程1-11章习题解答.doc_第5页
第5页 / 共63页
点击查看更多>>
资源描述

1、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 口作为地址

4、总线的高 8位。22-3.简述 PSW 寄存器各位的作用。若寄存器 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

5、:寄存器组选择位,用来选择当前的工作寄存器组。F0、F1:用户标志位。若寄存器 A中的内容为 63H(01100011B) ,A 中“1”的个数为 4,所以P0。2-4.STC12C5A60S2 单片机内部有哪几类存储器?中断服务程序的入口地址分布在哪个区域?STC12C5A60S2单片机内部有程序存储器、数据存储器 RAM、特殊功能寄存器、扩展 RAM。中断服务程序的入口地址位于程序存储器的首部。2-5.STC 系列单片机系统复位后,程序存储器指针 PC 的值是多少?当单片机正在执行某一条指令时,PC 指向哪里?STC系列单片机系统复位后,程序存储器指针 PC的值是 0000H。当单片机正在

6、执行某一条指令时,PC 指向下一条指令的地址。2-6.片内 RAM 中,数据存储器的低 128 字节、高 128 字节和特殊功能寄存器可以使用什么寻址方式?哪些单元可作为工作寄存器区,那些单元可以位寻址?访问低 128字节 RAM时,既能采用寄存器直接寻址,又可寄存器间接寻址。访问高 128字节 RAM时,只能采用寄存器间接寻址,但可以作为堆栈区。访问特殊功能寄存器,只能直接寻址。00H-1FH为工作寄存器组区;片内 RAM中 20H-2FH单元为位寻址区。2-7.在片内 RAM 中,位地址为 30H 的位属于字节地址为多少的单元?字节地址为 26H。32-8.STC 系列单片机复位后,使用了

7、哪一工作寄存器组?当 CPU 使用的工作寄存器组为 2 组时,R2 对应的 RAM 地址是多少?STC系列单片机复位后,所使用的工作寄存器组为 0组;当 CPU使用的工作寄存器组为 2组时,R2 对应的 RAM地址是 12H。2-9.什么是堆栈?简述 STC12C5A60S2 单片机的堆栈处理过程。堆栈是在 RAM 中开辟的一片数据缓冲区,常用于保护 CPU 现场及临时数据,其操作遵循先进后出、后进先出的原则。STC12C5A60S2单片机的堆栈处理过程:数据入栈时,SP 指针内容先自动加1,然后再将数据推入到 SP指针指向的单元;出栈时,先将 SP指针所指向单元的数据弹出,然后 SP指针的内

8、容自动减 1.2-10.以下关于数据指针 DPTR 和程序指针 PC 的概述是否正确?(1)DPTR 是可以访问的,而 PC不能访问; (2)它们都是 16位的寄存器; (3)它们都具有临时存储数据的功能; (4)DPTR 可以分成 2个 8位的寄存器使用,而 PC不能。 2-11.单片机与外部存储器连接时,P0 口用作地址/ 数据复用,需要添加什么芯片才能锁存 8 位地址信息?单片机与外部存储器连接时,P0 口用作地址/数据复用,需要添加地址锁存器,如 74LS373。2-12.如何设置 STC12C5A60S2 单片机 I/O 口工作模式?若设置P1.7 为强推挽输出,P1.6 为开漏,P

9、1.5 为弱上拉,P1.4,P1.3,P1.2,P1.1,和 P1.0 为高阻输入,应如何设置相关寄存器?STC12C5A60S2 单片机上电复位后所有引脚都默认为准双向(弱上拉)方式。根据具体应用可由软件配置成:准双向、强推挽、仅为输入或开漏输出 4 种工作方式。Px( x=0,1,2, 3,4,5)口引脚的工作方式由特殊功能寄存器 PxM1和 PxM0 相应位的配置决定I/O口工作模式设定PxM17:0 PxM07:0 I/O 口模式0 0 准双向口 (传统 8051I/O 口模式 ),灌电流可达 20mA, 拉电流为 230uA0 1 强推挽输出 ,输入输出电流都能可达20mA。1 0

10、仅为输入 (高阻)41 1 开漏 ,内部上拉电阻断开若设置 P1.7为强推挽输出,P1.6 为开漏,P1.5 为弱上拉(准双向) ,P1.4,P1.3,P1.2,P1.1,和 P1.0为高阻输入,可通过以下的两条指令来完成:MOV P1M1,#01011111B;MOV P1M0,#11000000B;2-13.I/O 口作为输入引脚,应工作在何种方式?读外部引脚状态时,为何要先向相应引脚对应的锁存器写入“1”?I/O口作为输入引脚,应工作在准双向或仅为输入状态;在准双向口配置情况下,先输出高电平,使 d管截止,才可读到正确的外部输入状态。2-14.STC12C5A60S2 单片机复位方式有哪

11、些?复位后单片机的初始状态如何?STC12C5A60S2单片机复位方式有上电复位、看门狗复位、外部低压检测复位、软件复位。复位后,单片机从用户程序区 0000H处开始正常工作;堆栈指针 SP指向07H,P0P3 为 FFH。习题三31 使用 Proteus 对电路进行仿真,有哪些步骤?使用 Proteus进行单片机系统设计、仿真主要有七个步骤,依次是新建设计文件,选取元件并加入列表区,将元件摆放到图形编辑窗口,放置电源、地线、布线、加载目标程序代码,运行仿真。32 在 Keil 中,源程序文件从编辑到生成 *.hex 文件,经过哪些过程?在 Keil中,源程序文件从编辑到生成*.hex 文件要

12、经过建立工程,建立源程序文件,建立文件和程序的连接,工作环境和参数的设置,再进行编译、连接可以生成目标文件。33 在 Keil 中,如何对源程序文件进行软件模拟调试?Keil软件中有一个仿真 CPU用来模拟程序的执行,可以在没有硬件和仿真器的情况下进行程序的调试,这就是软件模拟调试的方法。对源文件进行软件模拟调试,首先要启动调试。对工程编译、连接成功以后,使用菜单“Debug”“Start/StopDebug Session”进入调试状态,按“Ctrl+F5”组合键或者使用按钮也能进入调试状态。这时,源程序窗口的左侧出现一个黄色箭头,指向main( )函数的第一行,该箭头总是指向即将要运行的语

13、句行。退出调试状态和5启动调试状态方法一致。调试过程中使用最多的是“Debug”菜单,而该菜单上的大部分命令可以在“debug”工具栏中找到对应的快捷按钮。常用按钮有:运行,单步,过程单步,单步跳出,执行到当前,反汇编窗口,观察窗口,存储器窗口。其中单步调试方式特别常用。单步执行后,可以通过各个窗口观察执行结果,从而判断该条语句是否出现问题。如果程序较长,可以采用下面的方法来调试。首先,在合适的位置设置断点,方法为:在某一行上右击,弹出的快捷菜单中选择“Insert/Remove Breakpoint”。设置成功后,该行的前面会有红色方块指示。这时如果单击“运行”按钮,程序运行到断点处会自动停

14、止。删除断点也需使用同样的方法。如果程序的运行要依赖于外围接口,例如并行口、串行口、中断、定时/计数器等,Keil 的“Peripherals”菜单中提供了一些选项,通过这些选项打开对应外围接口的对话选框,可以观察外围接口的状态,或者更改外围接口的运行情况。习题四41 51 内核单片机有哪几种寻址方式?片内 RAM 低 128 字节及高 128 字节分别支持哪些寻址方式?片内扩展 RAM、片外 RAM 及特殊功能寄存器分别支持哪些寻址方式?51内核单片机的寻址方式有:立即(数)寻址、寄存器寻址、直接寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址。片内 RAM低 128字节支持直接寻址、寄存器

15、间接寻址。片内 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 和 MOV A,R1MOV A,R1 ;把 R1的内容送入 A寄存器中,第二操作数为寄存器寻址。MOV A,R1 ;将寄存器 R0的内容作为 RAM某单元的地址,将该单元的内容传送给

16、A寄存器,第二操作数为寄存器间接寻址。(3)MOV A,R1 和 MOVX A,R1MOV A,R1 ;将寄存器 R1的内容作为片内 RAM某单元的地址,将该单元的内容传送给 A寄存器MOVX A,R1 ;将寄存器 R1的内容作为片内扩展或外部 RAM某单元的地址,将该单元的内容传送给 A寄存器两者的区别是:MOV 访问的是内部 RAM,MOVX 访问的是片内扩展或外部 RAM。6(4)MOVX A,R1 和 MOVX A,DPTR主要的区别在于对外输出地址的方式上。如果是访问片外扩展 RAM,MOVX A,R1只是占用 P0口,输出 R1中的 8位地址。而 MOVX A,DPTR要占用 P0

17、、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 写出完成下列各项任务的指令。(1)片内 RAM 30H 单元的内容送到片内 RAM 50H单元

18、中。MOV 50H,30H(2)片内 RAM 40H单元的内容送到片内扩展 RAM 50H单元中。ANL AUXR,#11111101BMOV A,40HMOV DPTR,#50HMOVX DPTR ,A(3)片内 RAM 50H单元的内容送到片外 RAM 2000H单元中。ORL AUXR,#00000010BMOV A , 50HMOV DPTR , #2000HMOVX DPTR , A(4)片外 RAM 2000H单元的内容送到片外 RAM 4000H单元中。ORL AUXR , #00000010BMOV DPTR,#2000HMOVX A,DPTRMOV DPTR,#4000HMO

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

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

21、令DBUF DATA 40HBDATA DATA60H(1) 请指出如下指令中源操作数的寻址方式。MOV R0,#DBUF ;立即(数)寻址MOV R0,DBUF ;直接寻址(2) 执行如下程序段后,片内 RAM 40H4FH单元的内容是什么?60H 单元的内容又是什么?MOVBDATA,#10HMOVR0,#DBUFCLRALOOP: MOV R0,AINC AINC R0DJNZ BDATA,LOOP执行以上程序段后,片内 RAM 40H4FH单元的内容是:0-0FH;60H单元的内容为 0。46 编写一个延时 10ms 的子程序。选择 STC12C5A60S2单片机,系统时钟频率为 12

22、MHz,程序如下:DELAY_10ms:MOV R7,#120 ;2TDL: MOV R6,#250 ;2TDJNZ R6,$ ;4T8DJNR R7,DL ;4TRET ;4T 47 编程实现 的逻辑运算。MOV C,P1.1ORL C,P1.2CPL CMOV PSW.5,CMOV C,P1.4ANL C,/P1.3ORL C,PSW.5MOV P1.0,C 48 将存放在片内 RAM 51H、52H 和片外 RAM 2000H、2001H的四位 BCD 码相加,结果存放在片内 RAM 50H、51H、52H 单元中(假设低位字节存放在高地址中,高位字节存放在低地址中) 。ORL AUXR

23、,00000010BMOV DPTR,#2001HMOVX A,DPTRADD A,52HDA AMOV 52H,AMOV DPTR ,#2000HMOVX A,DPTRADDC A,51HDA AMOV 51H,AMOV A,#00HADDC A,#00HMOV 50H,A49 编程实现将片内扩展 RAM 0200H0220H 单元的内容,全部移到片内 RAM 30H 单元开始的位置,并将原位置清零。MOV R0,#30HMOV DPTR,#0200HMOV R1,#21HANL AUXR , #11111101BLOOP:MOVX A,DPTRMOV R0,AMOV A,#0MOVX DP

24、TR,A9INC R0INC DPTRDJNZ R1,LOOP410 将存放在 R3、R2 中的三位压缩 BCD 码转换为二进制形式。W_BCD_BI:LCALL B_BCD_BI;调用将 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 ;

25、加进位位MOV R3, A ;保存转换结果的高 8位. .B_BCD_BI:MOV A, R2 ;取 BCD码ANL A, #0F0H ;保留高 4位(即十位)SWAP AMOV B, #10MUL AB ;十位*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:CLR AMOVR4,AMOVR5,AMOVR6,AMOVR7,

26、AMUL1:MOVA, R1MOVB, R3MULABMOVR7,A10MOVR6,BMUL2:MOVA, R0MOVB, R3MULABADDA, R6MOVR6,ACLR AADDC A, BMOVR5,AMUL3:MOVA, R1MOVB, R2MULABADDA, R6MOVR6,AMOVA, R5ADDC A, BMOVR5,ACLR AADDC A, 0MOVR4,AMUL4:MOVA, R0MOVB, R2MULABADDA, R5MOVR5,AMOVA, R4ADDC A, BMOVR4,ARET习题五51 在 C51 语言中支持哪些数据类型?C51 特有的数据类型有哪些?在

27、C51语言中支持的数据类型有:char(字符型) 、int(整型) 、long(长整形) 、float(浮点型) 、特殊功能寄存器类型和位类型。C51特有的数据类型有:特殊功能寄存器类型和位类型。1152 C51 中的存储器类型有几种,它们分别表示的存储器区域是什么?C51中的存储器类型有:data、bdata、idata、pdata、xdata、code存储器类型 与硬件存储器空间的对应关系data 直接寻址的片内 RAM低 128B,访问速度快bdata 片内 RAM可位寻址区(20H-2FH) ,允许字节和位混合访问idata 用 Ri间接寻址的片内 RAM全部地址空间pdata 用 R

28、i间接访问的片内扩展 RAM或片外扩展 RAM低 256Bxdata 用 DPTR间接访问的片内扩展 RAM或片外扩展 RAM(64K)code 程序存储器 ROM空间(64KB)53 在 C51 中,bit 位与 sbit 位有什么区别?两种位变量的区别在于,用 bit定义的位变量,其地址由 C51编译时予以安排,而用 sbit定义位变量时必须同时定义其位地址,在 C51编译器编译时,其位地址不可变化 。54 在 C51 中,中断函数与一般函数有什么不同?(1)中断函数不能进行参数传递(2)中断函数没有返回值(3)在任何情况下都不能直接调用中断函数(4)如果在中断函数中调用了其他函数,则被调

29、用函数使用的工作寄存器必须与中断函数相同。否则会产生不正确的结果。(5)在中断函数中调用其他函数,被调函数最好设置为可重入的,因为中断是随机的,有可能中断函数所调用的函数出现嵌套调用。(6)C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容。(7)中断函数最好写在文件的尾部,并且禁止使用 extern存储类型说明。55 请分别定义下列变量:(1)片内 RAM中无符号字符型变量 x;unsigned char idata x;(2)片内 RAM中位寻址区无符号字符型变量 y,将 y.0y.2 再分别定义为位变量 key_in、key_up、key_down;片内 RAM中位寻址区

30、无符号字符型变量 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_ 0x4000;(4)特殊功能寄存器变量 PCON;12sfr PCON=0X8756 用 C51 语言写出整型变量 a 左移 4 位的语句。int a; a= a#includevoid swap()char

31、 data c,d;AUXRc=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=x+y;return z;59 试用 C51 语言编写程序实现将片内 RAM 21H 单元存放的两位BCD 码数转换为十六进制数存入 30H 单元。data unsigned char y1 _at_ 0x21;data unsigned char y2 _at_ 0x30;void trans()uns

32、igned char temp;temp=y1;y1=(y1y2=y1*10+(temp13510 试用 C51 语言编写程序实现将片内 RAM 30H、31H 单元存放的 2 字节十六进制数转换为十进制数存于 21H 为首的单元中。(设低地址存放高位字节)#include#include #define 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+

33、digit_l;for(p=0x25;p=0x21;P-)*p=buf%10;buf=buf/10;511 试用 C51 语言编写程序实现将 09,AF 十六进制数转换成相应的 ASCII 码。#includevoid H_A(unsigned char X)if(X14#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;l/sbit P1_0=P10;unsigned char i=0;void main( )TMO

34、D=0x01;/T0 工作在方式 1TL0=0xB0;/给 T0 装入初值TH0=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;1878 由 P1 口驱动 8 个指示灯,利用定时/计数器 T1 的定时功能分别用汇编语言和 C51 编程实现 8 个指示灯依次循环点亮(输出高电平) ,点亮间隔为 1s,反复循环。分析:仿照上题,T1 需定时 50ms,

35、R7 计数 20 次,达到定时 1s 的目的,每隔 1s,循环一次,实现轮流点亮。(1)汇编程序ORG 0000HLJMP MAINORG 001BH ;T1 的中断向量入口地址LJMP T1_INTORG 0100HMAIN:MOV SP,#0BFH ;初始化堆栈指针MOV TMOD,# 10H ;T1 工作在方式 1MOV TL1,#0B0H ;给 T1 写入初值MOV TH1,#03CH MOV R7,#20 ;利用寄存器 R7 计数 20 次MOV A,#01HSETB EA ;开放总中断SETB ET1 ;T1 溢出中断允许SETB TR1 ;启动 T1 开始工作SJMP $T1_I

36、NT:MOV TL1,#0B0H ;重新赋初值MOV TH1,#03CHDJNZ R7,NEXT ; R7 减 1 不为 0,说明中断次数未到 20 次,跳转到 NEXT;处返回 MOV P1,A; RL A ;为下一次做准备MOV R7,#20 ;重新赋给 R7 值 50NEXT:RETIEND(2) C51 程序:#includeunsigned char i=0;unsigned char j;void main( )TMOD=0x10;/T1 工作在方式 1TL1=0xB0;/给 T1 装入初值TH1=0x3C; j=0x01;19EA=1;/开放总中断ET1=1;/T1 溢出中断允许

37、TR1=1;/启动 T1 开始工作while(1);void T1_INT( ) interrupt 3/T1 中断服务程序TH1=0x3C;TL1=0xB0;/重新置入初值i+;if(i= =20)P1=j;/已定时中断 20 次i=0;j=_crol_(j,1);79 假设 STC12C5A60S2 单片机的系统时钟频率为 12MHz,利用定时/计数器 T1 在方式 1 下的功能,分别用汇编语言和 C51 编程实现测量 P3.3( )引脚上的正脉冲的宽度(单位 s) 。INT汇编程序:;计时数据存放到 60H(高位字节)、61H、62H 单元。ORG 0LJMP STARTORG 001B

38、HLJMP T1_INTSTART: MOV TMOD,#90HMOV TL1,#00HMOV TH1,#00HMOV R0,#60HMOV A,#0SETB EA;SETB ET1;JB P3.3,$SETB TR1JNB P3.3,$JB P3.3,$CLR TR1MOV R0,AINC R0MOV R0,TH120INC R0MOV R0,TL1SJMP $T1_INT: INC ARETIENDC51语言:#include#include/声明本征函数库#define uchar unsigned charsbit P3_3=P33;uchar nvar0=0,nvar1,nvar2;

39、/ 存放计时数据void main()TMOD=0x90;TH1=0x00;TL1=0x00;EA=1;ET1=1;while(P3_3=1); /等待 P3.3变低TR1=1;/P3_3为低电平时,启动 T1工作while(P3_3=0);/等待 P3.3变高while(P3_3=1); /等待 P3.3再变低TR1=0; /T1停止计数nvar1=TH0;nvar2=TL0;while(1); void T1_INT interrupt 3nvar0+;710 在 STC89/90xx 系列单片机中利用定时 /计数器 T2 的时钟输出功能,分别用汇编语言和 C51 编程实现在 P1.0 引

40、脚上输出频率为 50Hz 的方波。分析:设系统时钟频率为 12MHz,工作在 12T模式,n=2,已知需要输出频率为 50Hz的方波,由公式(RCAP2H,RCAP2L )=65536- ,计算出重装初f2nosc值为 RCAP2H=15H,RCAP2L=A0H.汇编程序:21TH2 DATA 0CDH;特殊功能寄存器地址声明TL2 DATA 0CCHRCAP2L DATA 0CAHRCAP2H DATA 0CBHT2MOD DATA 0C9HT2CON DATA 0C8HTR2BIT0CAHTF2 BIT 0CFHORG 0000HLJMP MAINORG 0100HMAIN: MOVT2C

41、ON,#00H;T2工作在时钟输出方式MOVT2MOD,#02H;T2输出时钟使能MOVTL2,#0A0H;输出 50Hz频率方波MOVTH2,#15HMOV RCAP2L,#0A0HMOV RCAP2H,#15HSETB TR2;T2开始工作SJMP $ENDC51程序:#includesfr T2MOD=0xC9;void main()T2CON=0x00;T2MOD=0x02;TL2=0xA0;/输出 50Hz频率方波TH2=0x15;RCAP2L=0xA0;RCAP2H=0x15;TR2=1;while(1); 711 简述 STC12C5A60S2单片机的 PCA模块的功能。PCA每

42、个模块都有自己的工作方式寄存器,通过对工作方式寄存器的设置,可以使各模块工作在定时方式(相当于定时、计数器) 、捕获方式(相对应模块计数器所计数据进行捕获的方式,用于测量外部信号产生的时间间隔) 、方波输出方式、输出信号脉宽调制(PWM)方式。712 假设系统时钟频率为 12MHz,利用 PCA模块的功能,分别用汇22编语言和 C51编程实现在 P1.3引脚上间断重复输出频率为 450Hz的方波,持续和停止时间均为 4s。分析:将 PCA 模块的工作方式寄存器 CCAPM0 寄存器写为 4DH,即 PCA0 设为时钟输出方式,从而可以在 P1.3 引脚自动翻转,输出方波,并允许 PCA 中断。

43、要求方波频率为 450hz,即周期为 1/450,定时时间应设定为 1/900s,选择计数器时钟来源为系统时钟频率的 12 分频,即工作方式寄存器 CMOD 设为 00H,需要计数(1/900)/(12/12000000 )=10000/91111=0457H 个时钟脉冲,可将CL、 CH 初始值设为零,CCAP0H 设为 04H,CCAP0L 设为 57H,在每次 PCA 中断里:将计数值加到比较匹配寄存器里CCAP0H、CCAP0L=CCAP0H、CCAP0L+0457H启动 PCA 计数持续 4 秒(CR=1 ) ,停止(CR=0)持续 4 秒;4 秒钟定时:定时器 T1,工作在方式 1

44、,计数时钟 fosc/12,定时 50 毫秒,用 R7 计数 T1 中断 80 次产生 4 秒钟定时。初值为 N:由(65536-N ) *1=50000 得 N=15536=3cb0H(1)汇编程序:CCON EQU 0D8H;PCA 控制寄存器CMOD EQU 0D9H;PCA 模式寄存器CL EQU 0E9H;PCA 定时器的低 8 位CH EQU 0F9H;PCA 定时器的高 8 位CCAPM0 EQU 0DAH; PCA 模块 0 的模式寄存器CCAP0L EQU 0EAH;PCA 模块 0 的捕获寄存器的低 8 位CCAP0H EQU 0FAH;PCA 模块 0 的捕获寄存器的高

45、8 位AUXR EQU 8EHCR BIT CCON.6;PCA 定时控制位CF BIT CCON.7;PCA 溢出标志位ORG 0000HLJMP MAINORG 001BHLJMP T1_INTORG 003BHLJMP PCA_INTORG 0100HMAIN:CLR AMOV CCON,A;/(P197)MOV CL,A;MOV CH,A;MOV SP,#0BFH;初始化堆栈指针MOV TMOD,#10H;T1 工作在方式 1MOV TL1,#0B0H;给 T1 写入初值MOV TH1,#3CH;ANL AUXR,#101111111H;/T1X12=023MOV CCAPM0,#4D

46、H;/ 允许中断,输出方波MOV CCAP0L,#57H;MOV CCAP0H,#04H;MOV CMOD,#0H;/FOSC/12 时钟计数MOV R7,#80;利用寄存器 R7 计数 80 次SETB EA;SETB ET1;SETB TR1;SETB CRSJMP $T1_INT: MOV TL1,#0B0H;给 T1 写入初值MOV TH1,#3CH;DJNZ R7,NEXT;MOV C,CRCPL CMOV CR,CMOV R7,#80;NEXT:RETIPCA_INT:PUSH PSWPUSH ACCCLR CCF0MOV A,CCAP0LADD A,#57HMOV CCAP0L,

47、AMOV A,CCAP0HADDC A,#04HMOV CCAP0H,APOP ACCPOP PSWRETIENDC51 程序:#includeunsigned char i=0;unsigned int j=0;void main()TMOD=0x10;TL1=0x0B0;TH1=0x3C;CMOD=0x00;AUXR24CCAPM0=0x4D;CCAP0L=0x57;CCAP0H=0x04;EA=1;ET1=1;TR1=1;CR=1;while(1);void T1_INT() interrupt 3TH1=0x0B0;TH1=0x3C;i+;if(i=80)CR=CR;i=0;void

48、pca_INT() interrupt 7CCAP0L+=0x57;If(CCAP0L void main( )CCON=0x00; /PCA 控制寄存器清 0CL=0x00; /16 位 PCA 计数器清 0CH=0x00;TMOD=0x02; /T0 工作在方式 2TL0=0x94;/给 T0 赋初值TH0=0x94;CMOD=0x04; / 利用 T0 的溢出作 PCA 时钟源AUXR=0x80; / T0 工作在 1T 模式CCAPM0=0x42;/允许比较且作为 PWM 脉宽调节输出CCAP0L=0x66;/控制模块 0 的输出占空比为 40%26CCAP0H=0x66;TR0=1;/T0 开始工作CR=1;/16 位计数器开始工作while(1 ) ;习题 881 简述 STC12C5A60S2 单片机异步串行通信的工作过程。异步通信是一种将数据以字符为单位进行传送的通信方式。传送一个字符又称为一帧信息,每一个字符前先加一个低电平的起始位,然后是数据位,数据位后可以带第 9 位数据,常用于一个奇偶校验位,最后是停止位,这样就完成了一个字符帧的传送。发送与接收之间无时钟信号控制,发送和接收的速率要求相同。82 简述串行口 1 中数据缓冲器 SBUF 的特点。数据缓冲器 SBUF 是由 2 个互

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报