




已阅读5页,还剩58页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
习题一 1.什么是单片机? 单片机全称单片微型计算机。它是把计算机中的微处理器、只读存储器 (ROM)、随机访问存储器(RAM) 、I/O 接口、串行接口、中断系统、定时/计数 器等基本功能部件微型化并集成到一块芯片上构成的小而完善的计算机。 2.单片机的主要用途是什么? 单片机有体积小、功耗低、面向控制、抗干扰能力强、性价比高等优点, 被广泛应用于家用电器、办公自动化、工业控制、智能仪器仪表与集成智能传 感器、汽车电子与航空航天电子系统等各种控制系统中。 习题二 2-1.STC12C5A60S2 单片机的内部集成了哪些功能部件?各个功能 部件的具体功能是什么? 在 STC12C5A60S2单片机内部,其基本结构主要有中央处理器 CPU、程序存 储器、数据存储器、定时/计数器、UART 串行口、I/O 接口、高速 A/D转换、同 步串行外围接口、PCA、看门狗 WDT及片内 RC振荡器和外部晶体震荡电路等模 块组成。 各部件功能: 中央处理器 CPU:负责运算控制和调度,使整个系统协调工作。 程序存储器:用于存放用户程序、数据和表格等信息。 数据存储器:用于存放单片机运行过程中的运算数据及运算地址等。 定时/计数器:常用定时器时钟来实现定时检测、定时控制;还可以用定时 器产生毫秒宽的脉冲,来驱动步进电机一类的电器机械。计数器主要用于外部 事件的计数。 看门狗 WDT:在单片机出现运行紊乱时,可以使单片机重新启动,恢复正 常运行。 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.简述 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:寄存器组选择位,用来选择当前的工作寄存器组。 F0、F1:用户标志位。 若寄存器 A中的内容为 63H(01100011B) ,A 中“1”的个数为 4,所以 P0。 2-4.STC12C5A60S2 单片机内部有哪几类存储器?中断服务程序的 入口地址分布在哪个区域? STC12C5A60S2单片机内部有程序存储器、数据存储器 RAM、特殊功能寄存 器、扩展 RAM。 中断服务程序的入口地址位于程序存储器的首部。 2-5.STC 系列单片机系统复位后,程序存储器指针 PC 的值是多少? 当单片机正在执行某一条指令时,PC 指向哪里? STC系列单片机系统复位后,程序存储器指针 PC的值是 0000H。 当单片机正在执行某一条指令时,PC 指向下一条指令的地址。 2-6.片内 RAM 中,数据存储器的低 128 字节、高 128 字节和特殊 功能寄存器可以使用什么寻址方式?哪些单元可作为工作寄存器区, 那些单元可以位寻址? 访问低 128字节 RAM时,既能采用寄存器直接寻址,又可寄存器间接寻址。 访问高 128字节 RAM时,只能采用寄存器间接寻址,但可以作为堆栈区。访问 特殊功能寄存器,只能直接寻址。 00H-1FH为工作寄存器组区;片内 RAM中 20H-2FH单元为位寻址区。 2-7.在片内 RAM 中,位地址为 30H 的位属于字节地址为多少的单 元? 字节地址为 26H。 3 2-8.STC 系列单片机复位后,使用了哪一工作寄存器组?当 CPU 使 用的工作寄存器组为 2 组时,R2 对应的 RAM 地址是多少? STC系列单片机复位后,所使用的工作寄存器组为 0组;当 CPU使用的工作 寄存器组为 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)DPTR 可以分成 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 种工 作方式。Px( x=0,1,2, 3,4,5)口引脚的工作方式由特殊功能寄存器 PxM1 和 PxM0 相应位的配置决定 I/O口工作模式设定 PxM17:0 PxM07:0 I/O 口模式 0 0 准双向口 (传统 8051I/O 口模式 ),灌电 流可达 20mA, 拉电流为 230uA 0 1 强推挽输出 ,输入输出电流都能可达 20mA。 1 0 仅为输入 (高阻) 1 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 单片机复位方式有哪些?复位后单片机的初始 状态如何? STC12C5A60S2单片机复位方式有上电复位、看门狗复位、外部低压检测复 位、软件复位。 复位后,单片机从用户程序区 0000H处开始正常工作;堆栈指针 SP指向 07H,P0P3 为 FFH。 习题三 31 使用 Proteus 对电路进行仿真,有哪些步骤? 使用 Proteus进行单片机系统设计、仿真主要有七个步骤,依次是新建设 计文件,选取元件并加入列表区,将元件摆放到图形编辑窗口,放置电源、地 线、布线、加载目标程序代码,运行仿真。 32 在 Keil 中,源程序文件从编辑到生成 *.hex 文件,经过哪些过 程? 在 Keil中,源程序文件从编辑到生成*.hex 文件要经过建立工程,建立源 程序文件,建立文件和程序的连接,工作环境和参数的设置,再进行编译、连 接可以生成目标文件。 33 在 Keil 中,如何对源程序文件进行软件模拟调试? Keil软件中有一个仿真 CPU用来模拟程序的执行,可以在没有硬件和仿真 器的情况下进行程序的调试,这就是软件模拟调试的方法。对源文件进行软件 模拟调试,首先要启动调试。对工程编译、连接成功以后,使用菜单“Debug” “Start/StopDebug Session”进入调试状态,按“Ctrl+F5”组合键或者使用 按钮也能进入调试状态。这时,源程序窗口的左侧出现一个黄色箭头,指向 main( )函数的第一行,该箭头总是指向即将要运行的语句行。退出调试状态和 5 启动调试状态方法一致。 调试过程中使用最多的是“Debug”菜单,而该菜单上的大部分命令可以在 “debug”工具栏中找到对应的快捷按钮。常用按钮有:运行,单步,过程单步, 单步跳出,执行到当前,反汇编窗口,观察窗口,存储器窗口。其中单步调试 方式特别常用。单步执行后,可以通过各个窗口观察执行结果,从而判断该条 语句是否出现问题。如果程序较长,可以采用下面的方法来调试。首先,在合 适的位置设置断点,方法为:在某一行上右击,弹出的快捷菜单中选择 “Insert/Remove Breakpoint”。设置成功后,该行的前面会有红色方块指示。 这时如果单击“运行”按钮,程序运行到断点处会自动停止。删除断点也需使 用同样的方法。 如果程序的运行要依赖于外围接口,例如并行口、串行口、中断、定时/计 数器等,Keil 的“Peripherals”菜单中提供了一些选项,通过这些选项打开 对应外围接口的对话选框,可以观察外围接口的状态,或者更改外围接口的运 行情况。 习题四 41 51 内核单片机有哪几种寻址方式?片内 RAM 低 128 字节及 高 128 字节分别支持哪些寻址方式?片内扩展 RAM、片外 RAM 及 特殊功能寄存器分别支持哪些寻址方式? 51内核单片机的寻址方式有:立即(数)寻址、寄存器寻址、直接寻址、 寄存器间接寻址、变址寻址、相对寻址、位寻址。 片内 RAM低 128字节支持直接寻址、寄存器间接寻址。 片内 RAM高 128字节支持寄存器间接寻址。 片内扩展 RAM及片外 RAM支持间接寻址。 特殊功能寄存器支持直接寻址。 42 区分下列指令有什么不同? (1)MOV A,#22H 和 MOV A,22H MOV A,#22H ;将立即数 22H送入 A寄存器中,第二操作数为立即寻址。 MOV A,22H ;把片内 RAM字节地址为 22H单元的内容送入 A寄存器中,第二操 作数为直接寻址。 (2)MOV A,R1 和 MOV A,R1 MOV A,R1 ;把 R1的内容送入 A寄存器中,第二操作数为寄存器寻址。 MOV A,R1 ;将寄存器 R0的内容作为 RAM某单元的地址,将该单元的内容传 送给 A寄存器,第二操作数为寄存器间接寻址。 (3)MOV A,R1 和 MOVX A,R1 MOV A,R1 ;将寄存器 R1的内容作为片内 RAM某单元的地址,将该单元的内 容传送给 A寄存器 MOVX A,R1 ;将寄存器 R1的内容作为片内扩展或外部 RAM某单元的地址,将 该单元的内容传送给 A寄存器 两者的区别是:MOV 访问的是内部 RAM,MOVX 访问的是片内扩展或外部 RAM。 (4)MOVX A,R1 和 MOVX A,DPTR 主要的区别在于对外输出地址的方式上。 如果是访问片外扩展 RAM, MOVX A,R1 只是占用 P0口,输出 R1中的 8位地址。 而 MOVX A,DPTR要占用 P0、P2 口,输出 DPTR中的 16位地址。 (5)MOVC A,A+DPTR 和 MOVX A,DPTR MOVC 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单元中。 MOV 50H,30H (2)片内 RAM 40H单元的内容送到片内扩展 RAM 50H单元中。 ANL AUXR,#11111101B MOV A,40H MOV DPTR,#50H MOVX DPTR ,A (3)片内 RAM 50H单元的内容送到片外 RAM 2000H单元中。 ORL AUXR,#00000010B MOV A , 50H MOV DPTR , #2000H MOVX DPTR , A (4)片外 RAM 2000H单元的内容送到片外 RAM 4000H单元中。 ORL AUXR , #00000010B MOV DPTR,#2000H MOVX A,DPTR MOV DPTR,#4000H MOVX DPTR,A (5)ROM 1000H单元的内容送到片外 RAM 8000H单元中。 MOV DPTR,#1000H MOV A , #0 MOVC A , A+DPTR MOV DPTR,#8000H ORL AUXR,#00000010B MOVX DPTR , A (6)将程序状态字寄存器 PSW内容传送到片内扩展 RAM 0D0H单元中。 ANL AUXR , #11111101B MOV A,PSW MOV DPTR , #0D0H 7 MOVX DPTR , A (7) 将片内 RAM 01HFFH单元内容清零。 ANL PSW , #11100111B MOV R0,#0FFH MOV A,#0 LOOP:MOV R0,A DJNZ R0,LOOP (8) 使片内 RAM 20H 单元的 b7、b6 位清零,b5、b4 位置 1,b3、b2 位取反, 其余各位保持不变。 ANL 20H,#00111111B ORL 20H,#00110000B XRL 20H,#00001100B 44 下列各条伪指令前的标号各代表的地址是多少? ORG 0100H TABLE:DS 4 ;TABLE 代表的的地址是 0100H WORD:DB 15,0FFH,30 ;WORD 代表的地址是 0104H BIN EQU 0200H TAB1: DW 07H ;TAB1代表的地址是 0107H 45 假设程序头文件中含有如下变量定义伪指令 DBUF DATA 40H BDATA DATA60H (1) 请指出如下指令中源操作数的寻址方式。 MOV R0,#DBUF ;立即(数)寻址 MOV R0,DBUF ;直接寻址 (2) 执行如下程序段后,片内 RAM 40H4FH单元的内容是什么?60H 单元的内 容又是什么? MOVBDATA,#10H MOVR0,#DBUF CLRA LOOP: MOV R0,A INC A INC R0 DJNZ BDATA,LOOP 执行以上程序段后,片内 RAM 40H4FH单元的内容是:0-0FH; 60H单元的内容为 0。 46 编写一个延时 10ms 的子程序。 选择 STC12C5A60S2单片机,系统时钟频率为 12MHz,程序如下: DELAY_10ms: MOV R7,#120 ;2T DL: MOV R6,#250 ;2T DJNZ 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.3 ORL C,PSW.5 MOV P1.0,C 48 将存放在片内 RAM 51H、52H 和片外 RAM 2000H、2001H 的四位 BCD 码相加,结果存放在片内 RAM 50H、51H、52H 单元 中(假设低位字节存放在高地址中,高位字节存放在低地址中) 。 ORL AUXR,00000010B MOV DPTR,#2001H MOVX A,DPTR ADD A,52H DA A MOV 52H,A MOV DPTR ,#2000H MOVX A,DPTR ADDC A,51H DA A MOV 51H,A MOV A,#00H ADDC A,#00H MOV 50H,A 49 编程实现将片内扩展 RAM 0200H0220H 单元的内容,全部 移到片内 RAM 30H 单元开始的位置,并将原位置清零。 MOV R0,#30H MOV DPTR,#0200H MOV R1,#21H ANL AUXR , #11111101B LOOP:MOVX A,DPTR MOV R0,A MOV A,#0 MOVX DPTR,A 9 INC R0 INC DPTR DJNZ R1,LOOP 410 将存放在 R3、R2 中的三位压缩 BCD 码转换为二进制形式。 W_BCD_BI: LCALL B_BCD_BI;调用将 R2中单字节 BCD码转换为二进制数的子程序, ;转换的结果存放于 A寄存器中 MOV R4, A ;把转换结果暂时保存到 R4 MOV A, R3 ;取 BCD码的高 1位 MOV B, #100 MUL AB ;计算(a3*10+a2)*100 ADD 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 A MOV B, #10 MUL AB ;十位*10,最大为 90(即 5AH) ,因此高 8位为 0 MOV B, A ;乘积暂存到 B寄存器 MOV A, R2 ;取 BCD码 ANL A, #0FH ;保留个位 ADD A, B ;个位加“十位*10” ,结果在 A寄存器中 RET 411 编写程序完成运算 R0R1R2R3,乘积存 R4、R5、R6 和 R7 中。 MUL: CLR A MOVR4,A MOVR5,A MOVR6,A MOVR7,A MUL1: MOVA, R1 MOVB, R3 MULAB MOVR7,A MOVR6,B MUL2: MOVA, R0 MOVB, R3 MULAB ADDA, R6 MOVR6,A CLR A ADDC A, B MOVR5,A MUL3: MOVA, R1 MOVB, R2 MULAB ADDA, R6 MOVR6,A MOVA, R5 ADDC A, B MOVR5,A CLR A ADDC A, 0 MOVR4,A MUL4: MOVA, R0 MOVB, R2 MULAB ADDA, R5 MOVR5,A MOVA, R4 ADDC A, B MOVR4,A RET 习题五 51 在 C51 语言中支持哪些数据类型?C51 特有的数据类型有哪 些? 在 C51语言中支持的数据类型有:char(字符型) 、int(整型) 、long(长整 形) 、float(浮点型) 、特殊功能寄存器类型和位类型。 C51特有的数据类型有:特殊功能寄存器类型和位类型。 11 52 C51 中的存储器类型有几种,它们分别表示的存储器区域是什 么? C51中的存储器类型有:data、bdata、idata、pdata、xdata、code 存储器类型 与硬件存储器空间的对应关系 data 直接寻址的片内 RAM低 128B,访问速度快 bdata 片内 RAM可位寻址区(20H-2FH) ,允许字节和位混合访问 idata 用 Ri间接寻址的片内 RAM全部地址空间 pdata 用 Ri间接访问的片内扩展 RAM或片外扩展 RAM低 256B xdata 用 DPTR间接访问的片内扩展 RAM或片外扩展 RAM(64K) code 程序存储器 ROM空间(64KB) 53 在 C51 中,bit 位与 sbit 位有什么区别? 两种位变量的区别在于,用 bit定义的位变量,其地址由 C51编译时予以 安排,而用 sbit定义位变量时必须同时定义其位地址,在 C51编译器编译时, 其位地址不可变化 。 54 在 C51 中,中断函数与一般函数有什么不同? (1)中断函数不能进行参数传递 (2)中断函数没有返回值 (3)在任何情况下都不能直接调用中断函数 (4)如果在中断函数中调用了其他函数,则被调用函数使用的工作寄存器必须 与中断函数相同。否则会产生不正确的结果。 (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中位寻址区无符号字符型变量 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; sfr PCON=0X87 56 用 C51 语言写出整型变量 a 左移 4 位的语句。 int a; a= a #include void swap() char data c,d; AUXR 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=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 y2=y1*10+(temp 13 510 试用 C51 语言编写程序实现将片内 RAM 30H、31H 单元存 放的 2 字节十六进制数转换为十进制数存于 21H 为首的单元中。 (设低地址存放高位字节) #include #include #define uint unsigned int #define uchar unsigned char uchar 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 #incldue unsigned 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( ) TMOD=0x01;/T0 工作在方式 1 TL0=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; 78 由 P1 口驱动 8 个指示灯,利用定时/计数器 T1 的定时功能分 别用汇编语言和 C51 编程实现 8 个指示灯依次循环点亮(输出高电 平) ,点亮间隔为 1s,反复循环。 分析:仿照上题,T1 需定时 50ms,R7 计数 20 次,达到定时 1s 的目的, 每隔 1s,循环一次,实现轮流点亮。 (1)汇编程序 ORG 0000H LJMP MAIN ORG 001BH ;T1 的中断向量入口地址 LJMP T1_INT ORG 0100H MAIN: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 TL1,#0B0H ;重新赋初值 MOV TH1,#03CH DJNZ R7,NEXT ; R7 减 1 不为 0,说明中断次数未到 20 次,跳转到 NEXT ;处返回 MOV P1,A; RL A ;为下一次做准备 MOV R7,#20 ;重新赋给 R7 值 50 NEXT:RETI END (2) C51 程序: #include unsigned char i=0; unsigned char j; void main( ) TMOD=0x10;/T1 工作在方式 1 TL1=0xB0;/给 T1 装入初值 TH1=0x3C; j=0x01; 19 EA=1;/开放总中断 ET1=1;/T1 溢出中断允许 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 0 LJMP START ORG 001BH LJMP T1_INT START: MOV TMOD,#90H MOV TL1,#00H MOV TH1,#00H MOV R0,#60H MOV A,#0 SETB EA; SETB ET1; JB P3.3,$ SETB TR1 JNB P3.3,$ JB P3.3,$ CLR TR1 MOV R0,A INC R0 MOV R0,TH1 INC R0 MOV R0,TL1 SJMP $ T1_INT: INC A RETI END C51语言: #include #include/声明本征函数库 #define uchar unsigned char sbit P3_3=P33; uchar nvar0=0,nvar1,nvar2;/ 存放计时数据 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 3 nvar0+; 710 在 STC89/90xx 系列单片机中利用定时 /计数器 T2 的时钟输 出功能,分别用汇编语言和 C51 编程实现在 P1.0 引脚上输出频率 为 50Hz 的方波。 分析:设系统时钟频率为 12MHz,工作在 12T模式,n=2,已知需要输出频 率为 50Hz的方波,由公式(RCAP2H,RCAP2L )=65536- ,计算出重装初f2nosc 值为 RCAP2H=15H,RCAP2L=A0H. 汇编程序: 21 TH2 DATA 0CDH;特殊功能寄存器地址声明 TL2 DATA 0CCH RCAP2L DATA 0CAH RCAP2H DATA 0CBH T2MOD DATA 0C9H T2CON DATA 0C8H TR2BIT0CAH TF2 BIT 0CFH ORG 0000H LJMP MAIN ORG 0100H MAIN: MOVT2CON,#00H;T2工作在时钟输出方式 MOVT2MOD,#02H;T2输出时钟使能 MOVTL2,#0A0H;输出 50Hz频率方波 MOVTH2,#15H MOV RCAP2L,#0A0H MOV RCAP2H,#15H SETB TR2;T2开始工作 SJMP $ END C51程序: #include sfr 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每个模块都有自己的工作方式寄存器,通过对工作方式寄存器的设置,可以使各 模块工作在定时方式(相当于定时、计数器) 、捕获方式(相对应模块计数器所计数据进行 捕获的方式,用于测量外部信号产生的时间间隔) 、方波输出方式、输出信号脉宽调制 (PWM)方式。 712 假设系统时钟频率为 12MHz,利用 PCA模块的功能,分别用汇 编语言和 C51编程实现在 P1.3引脚上间断重复输出频率为 450Hz的 方波,持续和停止时间均为 4s。 分析:将 PCA 模块的工作方式寄存器 CCAPM0 寄存器写为 4DH,即 PCA0 设 为时钟输出方式,从而可以在 P1.3 引脚自动翻转,输出方波,并允许 PCA 中断。 要求方波频率为 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,计数时钟 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 的捕获寄存器的高 8 位 AUXR EQU 8EH CR BIT CCON.6;PCA 定时控制位 CF BIT CCON.7;PCA 溢出标志位 ORG 0000H LJMP MAIN ORG 001BH LJMP T1_INT ORG 003BH LJMP PCA_INT ORG 0100H MAIN: CLR A MOV CCON,A;/(P197) MOV CL,A; MOV CH,A; MOV SP,#0BFH;初始化堆栈指针 MOV TMOD,#10H;T1 工作在方式 1 MOV TL1,#0B0H;给 T1 写入初值 MOV TH1,#3CH; ANL AUXR,#101111111H;/T1X12=0 23 MOV CCAPM0,#4DH;/ 允许中断,输出方波 MOV CCAP0L,#57H; MOV CCAP0H,#04H; MOV CMOD,#0H;/FOSC/12 时钟计数 MOV R7,#80;利用寄存器 R7 计数 80 次 SETB EA; SETB ET1; SETB TR1; SETB CR SJMP $ T1_INT: MOV TL1,#0B0H;给 T1 写入初值 MOV TH1,#3CH; DJNZ R7,NEXT; MOV C,CR CPL C MOV CR,C MOV R7,#80; NEXT:RETI PCA_INT: PUSH PSW PUSH ACC CLR CCF0 MOV A,CCAP0L ADD A,#57H MOV CCAP0L,A MOV A,CCAP0H ADDC A,#04H MOV CCAP0H,A POP ACC POP PSW RETI END C51 程序: #include unsigned char i=0; unsigned int j=0; void main() TMOD=0x10; TL1=0x0B0; TH1=0x3C; CMOD=0x00; AUXR CCAPM0=0x4D; CCAP0L=0x57; CCAP0H=0x04; EA=1; ET1=1; TR1=1; CR=1; while(1); void T1_INT() interrupt 3 TH1=0x0B0; TH1=0x3C; i+; if(i=80) CR=CR; i=0; void pca_INT() interrupt 7 CCAP0L+=0x57; If(CCAP0L void main( ) CCON=0x00; /PCA 控制寄存器清 0 CL=0x00; /16 位 PCA 计数器清 0 CH=0x00; TMOD=0x02; /T0 工作在方式 2 TL0=0x94;/给 T0 赋初值 TH0=0x94; CMOD=0x04; / 利用 T0 的溢出作 PCA 时钟源 AUXR=0x80; / T0 工作在 1T 模式 CCAPM0=0x42;/允许比较且作为 PWM 脉宽调节输出 CCAP0L=0x66;/控制模块 0 的输出占空比为 40% CCAP0H=0x66; TR0=1;/T0 开始工作 CR=1;/16 位计数器开始工作 while(1 ) ; 习题 8 81 简述 STC12C5A60S2 单片机异步串行通信的工作过程。 异步通信是一种将数据以字符为单位进行传送的通信方式。传送一个字符 又称为一帧信息,每一个字符前先加一个低电平的起始位,然后是数据位,数 据位后可以带第 9 位数据,常用于一个奇偶校验位,最后是停止位,这样就完 成了一个字符帧的传送。发送与接收之间无时钟信号控制,发送和接收的速率 要求相同。 82 简述串行口 1 中数据缓冲器 SBUF 的特点。 数据缓冲器 SBUF 是由 2 个互相独立的接收、发送缓冲器构成的,可同时 发送和接收数据。发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不 能写入,因而两个缓冲器可以共用一个地址。使用时通过读、写指令加以区分。 在发送时,低位在前,高位在后;接收时,先接收到的作为低位,后接收到的 作为高位。 83 STC12C5A60S2 单片机的串行口 1 有几种工作方式?简述各工作 方式的特点。 STC12C5A60S2 单片机的串行口 1 有 4 种工作方式。 串行口 1 工作方式 SM0 SM1 工作方式 功能说明 波特率 0 0 方式 0 同步串行移位 寄存器方式 当 AUXR 寄存器中的位 UART_M0x6=0 时,波特率等于 fosc/12;UART_M0x6=1 时,波特率等 于 fosc/2 0 1 方式 1 8 位异步通信 (2 SMOD/32) *(定时/ 计数器 T1 的 溢出率或独立波特率发生器的溢出 率) 1 0 方式 2 9 位异步通信 (2 SMOD/32) *fosc 1 1 方式 3 9 位异步通信 与方式 1 相同 84 在异步串行通信的各种工作方式中,如何设置波特率发生器? STC12C5A60S2 单片机串行口 1 通信的波特率与工作方式有关。 (1) 对于方式 0,当 AUXR 寄存器中的位 UART_M0x6=0 时,波特率是 fosc/12;当 UART_M0x6=1 时,波特率是 fosc/2。选定 fosc 且设置好 UART_M0x6 27 位后,方式 0 的波特率固定不变。 (2) 对于方式 2,波特率=(2 SMOD/64)* fosc,当 SMOD=1 时,波特率=2* fosc/64= fosc/32;当 SMOD=0 时,波特率= f osc/64。方式 2 仅有两种固定的波特率。 (3) 对于方式 1 和方式 3,波特率=2 SMOD*(定时/ 计数器 T1 的溢出率或独立 波特率发生器的溢出率)/32。定时/计数器 T1 用作波特率发生器时,一般工作 在方式 2。 85 串行口 1、2 的控制寄存器 SCON、S2CON 中的 TB8、RB8 和 T2B8、R2B8 位在哪些方式中使用?有何作用? 串行口 1 的控制寄存器 SCON 中的 TB8 位在方式 2 和方式 3 发送数据时, 第 9 位存放在 SCON 寄存器中的 TB8 中,接收数据时,第 9 位装入 RB8 位中。 串行口 2 的控制寄存器 S2CON 中的 T2B8、R2B8 位含义和功能与串行口 1 串行 口 1 的控制寄存器 SCON 相同。 作用:通过程序对 SCON 中的 SM2、TB8 的设置,可为多机通信的协议约 定提供方便。也可以作为奇偶校验位。 86 为什么定时/计数器 T1 作串行口 1 波特率发生器时,常采用方 式 2?假设已知系统时钟频率、通信的波特率,如何计算 T1 的初值? 波特率发生器需要在计数值溢出后自动重新赋值,再次开始计数,所以选 模式 2。否则溢出后要程序响应中断重新赋值。 计算 T1 的初值: T1 的初值=256- (f osc/12)*2 SMOD/(波特率*32 ) 87 简述利用串行口进行多机通信的工作进程。 多机通信可以采用以下工作进程: (1) 主机向从机发送某一从机的地址,发送前将 TB8 位置 1,然后进入接收 状态,等待接收从机的应答信号,即相应从机的地址信息。 (2) 所有从机首先都将 SCON 寄存器中的 SM2 位置 1,当各从机接收到主机 送出的地址信息后,与本机地址比较,如果接收到的地址信息与本机地 址相符时,表示被选中,此时将本机地址信息再发回给主机(TB8 位为 0) ,表示从机已正确的接收到信息,可以与主机通信,然后执行 CLR SM2 指令,使多机选择位 SM2 为 0,以便接收主机随后送出的指令或数 据信息。对于其他未被选中的从机,SM2 位依然为 1,因此接收不到主 机送出的数据信息(TB8 位为 0) 。 (3) 主机收到从机回发的地址后,检验是否与主机先前发送的地址一致,若 不同,说明发送过程出现错误,再回到第(1)步,重发从机地址,若相 同,可以发送指令或数据信息(TB8 位为 0) 。 (4) 从机正确地接收到主机所发送到的指令或数据信息后,回发先前约定好 的应答信号给主机,同时将 SM2 位重新置 1,以便从机能够接收主机再 次发送地址信息,本次主机与从机通信过程结束。 88 画出利用串行口 1 方式 0 和两片串入并出 74HC164 芯片扩展 16 位输出口的硬件电路,并写出相应的驱动程序。 设 STC12C5A60S2 单片机的系统时钟频率为 12MHz,串行口 1 工作在方式 0。输出的数据存在 30H、 31H 中。对 SCON 寄存器赋初值为 00H,具体程序如 下。 汇编程序: NUM1 EQU 30H NUM2 EQU 31H ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV SP,#0BFH MOV SCON,#00H MOV A,30H /要发送的数据 MOV SBUF,A LOOP:JNB TI, LOOP /等待发送完成 CLR TI MOV A,31H MOV S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 揭阳市榕城区2026届化学九年级第一学期期中调研试题含解析
- 广东省茂名市高州市2024-2025学年八年级下学期期末物理试题
- 2026届福建省厦门市湖里实验中学英语九年级第一学期期末复习检测模拟试题含解析
- 2025年工伤人员安全培训多选试题及答案
- 2026届山东省青岛42中英语九上期末统考模拟试题含解析
- 供应链上下游企业生产技术信息保密及资源共享协议
- 专业健身教练劳动合同模板(含服务条款)
- 体育产业劳动合同模板(含运动员权益保护)
- 离婚协议书模板:解除婚姻关系后的赡养协议
- 科技园区物业租赁与创新创业支持服务合同
- 集输工应急处置考核试卷及答案
- 珠江医院护理面试题库及答案
- 流程管理某省市场营销MPR+LTC流程规划方案
- 2025年江苏省农垦集团有限公司招聘笔试备考及答案详解(新)
- 2025年济南市中考英语试题卷(含答案及解析)
- 2025年人教版一年级下册数学口算题卡(1000题)
- 化工厂实习安全培训课件
- 生物安全培训试题(答案)
- 陪玩团基本知识培训课件
- 2025年司法考试真题及答案
- 2025四川蜀道建筑科技有限公司招聘16人考试参考试题及答案解析
评论
0/150
提交评论