• 单片机基础知识回顾整理

     今天蓝桥杯成绩出来了,我这个打酱油的居然还获得了一个三等奖,这实在是让我受宠若惊,在参加蓝桥杯之前。我其实已经差不多放弃了,我一个刚接触算法的人,突然接触一个算法类的竞赛,我算是从算法入门到放弃了,各种算法题目看的头疼脑涨,最后基本上能每天看一题就不错了。这次竟然能获奖真的是让我意外啊。 不说算法,我这个硬件生还是老老实实复习我的硬件吧,今天也是整理了几道单片机的题目,发现我虽然会用单片机,但是对单片机的基础概念还真的是有些模糊之处啊。 第2部分 51单片机硬件结构、存储系统及I/O接口 一、填空题 1、AT89S51单片机共有 4 个8位的并行I/O口,其中既可用作地址/数据口,又可用作一般的I/O口的是 P0 。 2、 若采用12MHz的晶振,则MCS-51单片机的振荡周期为_1/12us___ ,机器周期为__ 1us_。 3、AT89S51单片机字长是__8____位,有_40__根引脚。 4.89S51单片机是 8 位单片机,其PC计数器是 16 位。 5.若单片机使用的晶振频率是6MHz,那么一个振荡周期是 1/6 µS,一个机器周期是 2 µS。 6.89S51单片机是 +5 V供电的。 7.堆栈是内部数据RAM区中,数据按 后进先出 的原则出入栈的。 8.MSC-51系列单片机具有 4 个并行输入/输出端口,其中_P0_口是一个两用接口,它可分时输出外部存储器的低八位地址和传送数据,而_P1__口是一个专供用户使用的I/O口,常用于第二功能的是 P3 口。 9.当单片机系统进行存储器扩展时,用P2口的作为地址总线的 高8 位,用P0作为地址总线的 低8 位。 10.半导体存储器分为_ROM_和__RAM__两大类,其中前者具有非易失性(即掉电后仍能保存信息),因而一般用来存放系统程序,而后者具有易失性,因而一般用来存放经常变动的用户程序.中间结果等。 二、判断题 ( X ) 1、MCS-51单片机的程序存储器只能用来存放程序。 ( X ) 2、MCS-51若希望程序从片内存储器开始执行,EA脚应接低电平。 ( X ) 3、89S51单片机中,外部RAM与I/O接口是统一编址的。 ( X ) 4、89S51单片机复位后,特殊功能寄存器SP的内容都是00H。 ( X ) 5、51单片机内部寄存器都是8位的。 //T0 T1 16位 ( P )6、对于8位机,如果正数+正数等于负数,则会产生溢出。 ( X )7.在MCS-51系统中,一个机器周期等于1μs。 ( X )8.复位之后,P0-P3的内容为0FFH,栈指针SP指向00H单元。 ( P )9.当AT89C51的EA引脚接低电平时,CPU只能访问片外ROM,而不管片内是否有程序存储器。 ( X) 10.扩展I/O口占用片外数据存储器的地址资源。 ( X )11.MCS-51系统可以没有复位电路。 三、简答题 1、请说明为什么使用LED需要接限流电阻,当高电平为+5V时,正常点亮一个LED需要多大阻值的限流电阻(设LED的正常工作电流为10mA,导通压降为0.6V),为什么? 440Ω, R = (U-U导通)/ I导通 = (5-0.6)/(10x10^-3) = 440Ω 2、MCS-51单片机的存储器从物理结构上可划分几个空间? 4个,片内RAM,片外RAM,片内ROM,片外ROW 3、MCS-51单片机的P0~P3四个I/O端口在结构上有何异同?使用时应注意的事项? 80C51单片机的4个I/O端口在结构上时基本相同的,但又各具特点。在无片外扩展存储器的系统中,这4个端口的每1位都可以作为I/O端口使用。在作为一般的通用I/O输入时,都必须先向锁存器写入“1”,使输出驱动场效应管FET截止,以免误读数据。在系统扩展片外存储器时, P2口作为高8位地址,P0口分时作为低8位地址和双向数据总线。 它们的主要不同点如下: (1)P0口的每一位可驱动8个LSTTL负载。P0口即可作I/O端口使用,也可作地址/数据总线使用。当它作通用口输出时,只有外接上拉电阻,才有高电平输出,作地址/数据总线时,无需外接电阻,此时不能再作I/O端口使用。 (2)P1-P3口输出级接有内部上拉电阻,每位可驱动4个LSTTL负载,能向外提供上拉电流负载,所以不必再外接上拉电阻。

    时间:2018-05-07 关键词: 单片机

  • 单片机==日常复习题整理

     今天蓝桥杯成绩出来了,我这个打酱油的居然还获得了一个三等奖,这实在是让我受宠若惊,在参加蓝桥杯之前。我其实已经差不多放弃了,我一个刚接触算法的人,突然接触一个算法类的竞赛,我算是从算法入门到放弃了,各种算法题目看的头疼脑涨,最后基本上能每天看一题就不错了。这次竟然能获奖真的是让我意外啊。 不说算法,我这个硬件生还是老老实实复习我的硬件吧,今天也是整理了几道单片机的题目,发现我虽然会用单片机,但是对单片机的基础概念还真的是有些模糊之处啊。 第2部分 51单片机硬件结构、存储系统及I/O接口 一、填空题 1、AT89S51单片机共有 4 个8位的并行I/O口,其中既可用作地址/数据口,又可用作一般的I/O口的是 P0 。 2、 若采用12MHz的晶振,则MCS-51单片机的振荡周期为_1/12us___ ,机器周期为__ 1us_。 3、AT89S51单片机字长是__8____位,有_40__根引脚。 4.89S51单片机是 8 位单片机,其PC计数器是 16 位。 5.若单片机使用的晶振频率是6MHz,那么一个振荡周期是 1/6 µS,一个机器周期是 2 µS。 6.89S51单片机是 +5 V供电的。 7.堆栈是内部数据RAM区中,数据按 后进先出 的原则出入栈的。 8.MSC-51系列单片机具有 4 个并行输入/输出端口,其中_P0_口是一个两用接口,它可分时输出外部存储器的低八位地址和传送数据,而_P1__口是一个专供用户使用的I/O口,常用于第二功能的是 P3 口。 9.当单片机系统进行存储器扩展时,用P2口的作为地址总线的 高8 位,用P0作为地址总线的 低8 位。 10.半导体存储器分为_ROM_和__RAM__两大类,其中前者具有非易失性(即掉电后仍能保存信息),因而一般用来存放系统程序,而后者具有易失性,因而一般用来存放经常变动的用户程序.中间结果等。 二、判断题 ( X ) 1、MCS-51单片机的程序存储器只能用来存放程序。 ( X ) 2、MCS-51若希望程序从片内存储器开始执行,EA脚应接低电平。 ( X ) 3、89S51单片机中,外部RAM与I/O接口是统一编址的。 ( X ) 4、89S51单片机复位后,特殊功能寄存器SP的内容都是00H。 ( X ) 5、51单片机内部寄存器都是8位的。 //T0 T1 16位 ( P )6、对于8位机,如果正数+正数等于负数,则会产生溢出。 ( X )7.在MCS-51系统中,一个机器周期等于1μs。 ( X )8.复位之后,P0-P3的内容为0FFH,栈指针SP指向00H单元。 ( P )9.当AT89C51的EA引脚接低电平时,CPU只能访问片外ROM,而不管片内是否有程序存储器。 ( X) 10.扩展I/O口占用片外数据存储器的地址资源。 ( X )11.MCS-51系统可以没有复位电路。 三、简答题 1、请说明为什么使用LED需要接限流电阻,当高电平为+5V时,正常点亮一个LED需要多大阻值的限流电阻(设LED的正常工作电流为10mA,导通压降为0.6V),为什么? 440Ω, R = (U-U导通)/ I导通 = (5-0.6)/(10x10^-3) = 440Ω 2、MCS-51单片机的存储器从物理结构上可划分几个空间? 4个,片内RAM,片外RAM,片内ROM,片外ROW 3、MCS-51单片机的P0~P3四个I/O端口在结构上有何异同?使用时应注意的事项? 80C51单片机的4个I/O端口在结构上时基本相同的,但又各具特点。在无片外扩展存储器的系统中,这4个端口的每1位都可以作为I/O端口使用。在作为一般的通用I/O输入时,都必须先向锁存器写入“1”,使输出驱动场效应管FET截止,以免误读数据。在系统扩展片外存储器时, P2口作为高8位地址,P0口分时作为低8位地址和双向数据总线。 它们的主要不同点如下: (1)P0口的每一位可驱动8个LSTTL负载。P0口即可作I/O端口使用,也可作地址/数据总线使用。当它作通用口输出时,只有外接上拉电阻,才有高电平输出,作地址/数据总线时,无需外接电阻,此时不能再作I/O端口使用。 (2)P1-P3口输出级接有内部上拉电阻,每位可驱动4个LSTTL负载,能向外提供上拉电流负载,所以不必再外接上拉电阻。

    时间:2018-05-07 关键词: 单片机

  • 复习题!单片机中断

     外部中断作业 一、填空题 1、MCS-51的外部中断有两种触发方式,分别是电平触发方式和 边沿 触发方式。在电平触发方式下,当采集到INT0、INT1的有效信号为 低电平 时,激活外部中断。 2.一个89C51系统,要求允许外部中断和允许定时器T0中断,其他中断禁止,则IE寄存器可设定为 IE = 0x83___。IE寄存器的格式为: EA - - ES ET1 EX1 ET0 EX0 3.8051在响应中断后,CPU能自动撤除中断请求的中断源有_T0、T1、以及下降沿触发的外部中断 。 4. MSC-51引脚中,与串行通信有关的引脚是_P3.0_和_P3.1_。 5.AT89S51单片机有 5 个用户中断源,其中定时器T1的中断入口地址为 001B ,外部中断0的中断入口地址为 0003 。 6.AT89S51单片机定时器的四种工作方式中,可自动装载初始值的是方式 2 ,该工作方式是 8 位计数器。 7.已知51单片机的中断优先级寄存器IP的格式为: - - - PS PT1 PX1 PT0 PX0 当IP=15H时, 外部中断0 中断的优先级最高。 8.已知51单片机的中断优先级寄存器IP的格式为: - - - PS PT1 PX1 PT0 PX0 默认情况下,各中断寄存器有一个优先权顺序,此时优先权最高的是__外部中断0__ ,最低的是 串行口通信____。 9、MCS-51单片机外部中断请求信号有电平方式和 边沿方式__,在电平方式下,当采集到INT0、INT1的有效信号为 低电平 时,激活外部中断。 10. MCS-51单片机中,在IP=0x00时,优先级最高的中断是__外部中断0____,最低的是__串行口通信___。 二、选择题 1、51单片机在同一优先级的中断源同时申请中断时,首先响应( A )。 A. 外部中断0 B. 定时器0中断 C.外部中断1 D. 定时器1中断 2.下列说法错误的是:( B ) A.同一级别的中断请求按时间的先后顺序响应。 B.同一时间同一级别的多中断请求,将形成阻塞,系统无法响应。 C.低优先级中断请求不能中断高优先级中断请求,但是高优先级中断请求能中断低优先级中断请求。 D.同级中断不能嵌套。 3.在MCS-51中,需要外加电路实现中断撤除的是:( D ) A.定时中断 B.脉冲方式的外部中断 C.外部串行中断 D.电平方式的外部中断 4. 当外部中断请求的信号方式为脉冲方式时,要求中断请求信号的高电平状态和低电平状态都应至少维持( A )。 A.1个机器周期 B.2个机器周期 C.4个机器周期 D.10个晶振周期 5. 边沿触发方式的外部中断信号是( A )有效。 A.下降沿 B.上升沿 C.高电平 D.低电平 6.外部中断请求标志位是 D 。 A.IT0和IT1 B.TR0和TR1 C.TI和RI D.IE0和IE1 7. 如果将中断优先级寄存器IP中,将IP设置为0x0A,则优先级最高的是( D ) A、外部中断1 B、外部中断0 C、定时/计数器1 D、定时/计数器0 8. 计算机在使用中断方式与外界交换信息时,保护现场的工作方式应该是( C ) A.由CPU自动完成 B.在中断响应中完成 C.应由中断服务程序完成 D.在主程序中完成 9、MCS-51中断源有( A ) A、 5个 B、 2个 C、 3个 D、 6个 10、MCS-51单片机可分为两个中断优先级别,各中断源的优先级别设定是利用寄存器( B )。 A、 IE B、 IP C、 TCON D、 SCON 11、各中断源发出的中断请求信号,都会标记在MCS-51系统中的( B )。 A、 TMOD B、 TCON/SCON C、 IE D、 IP 12. MCS—51单片机在同一级别里除串行口外,级别最低的中断源是( C )。 A、 外部中断1 B、定时器T0 C、定时器T1 D、串行口 三、简答题 1、请画出航标灯控制程序流程图。要求航标灯在白天熄灭,在夜晚断续点亮,时间间隔2秒,即亮2秒,灭2秒,周期循环进行。硬件电路图如右,由P3.2控制P1.7所接LED(航标灯)的工作,图中VT1为光敏三极管,白天导通,晚上截止。VT2的状态与VT1相反。 #include sbit KEY=P3^2; sbit LED=P1^7; void delay() { } void main() { P1=0X00; while(1) { if(KEY==0) { LED=1; delay(2000); LED=0; delay(2000); } } } 2、什么叫中断嵌套?中断嵌套有什么限制?中断嵌套与子程序嵌套有什 么区别? 答:高优先级中断“中断”正在执行的低优先级中断,这就是中断嵌套。 中断嵌套只能高优先级“中断”低优先级,低优先级不能“中断“高优先级,同一优先级之间也不能相互“中断”。 中断嵌套与子程序嵌套的区别: ①子程序嵌套是在程序中事先安排好的;中断嵌套是随机发生的。 ②子程序嵌套无次序限制,中断嵌套只允许高优先级“中断”低优先级。

    时间:2018-05-07 关键词: 单片机 中断

  • 复习!51单片机基础知识题和答案

     一、填空题 1、51单片机的定时器T1工作在工作方式0计数模式下,定时器T0工作在工作方式1定时模式下。则TMOD的值应为 0x41 。 2、AT89S51单片机定时器的四种工作方式中,可自动装载初始值的是方式 2 ,该工作方式是 8 位计数器。 3、假设已经设置好定时器T1的计数初始值,则要启动定时器T1,需要设置 TR1= 1。 4.AT89C51单片机有 2 个定时/计数器。 5.AT89S51单片机定时器的四种工作方式中,其中方式 3 是只有定时器T0才有的方式。 6.假设定时器T0已经正常工作,现要停止定时器T0,则需要设置 TR0= 0 。 7.假设已经设置好定时器T1的计数初始值,则要启动定时器T1,需要设置 TR1= 1 。 8.AT89S51单片机定时器的四种工作方式中,方式0为 13 位计数器,方式1为_ 16 位计数器。 二、简答题 1、51系列单片机具有几个中断源?其中哪些中断源可以被定义为高优先级中断,如何定义? 51基本型共有5个中断:两个定时器中断(T0 T1),两个个外部中断(p3.2的INT0和P3.3的INT1),一个串行口中断。优先级设定在寄存器8BH,置一的位对应的中断优先。当寄存器位相同时,CPU的查询优先顺序是:INT0——T0——INT1——T1——串行口 2、单片机定时/计数器有几种工作方式?它们的定时/计数范围是多少? 工作方式0 13位计数模式 最大范围0-8191 工作方式1 16位计数模式 最大范围0-65535 工作方式2 8位自动重装计数模式0-255 工作模式3(只有T0) TL0和TH0将被分割成2个0-255的独立计数器会触发TF0 TF1中断 三、编程题 1、已知51单片机晶振频率是12MHz,使用定时器T1,产生周期为200ms的等宽正方波连续脉冲由P1.2输出, 要求以中断方式完成。 #include sbit P12=P1^2; int count=0; void main() { TMOD=0X10; TH1=(65536-10000)/256; TL1=(65536-10000)%256; IE=0X88; TR1=1; while(1) ; } void tt1(void) interrupt 3 using 1 { if(count<10) { count++; TH1=(65536-10000)/256; TL1=(65536-10000)%256; } else { count=0; TH1=(65536-10000)/256; TL1=(65536-10000)%256; P12=~P12; } } 串口通信 一、填空题 1. MSC-51引脚中,与串行通信有关的引脚是_P3^0_和_P3^1_。 二、判断题 ( X )1.51单片机的串口设置了1个SBUF即可实现全双工通信。 ( X )2.AT89S51单片机的串口只有2种工作方式。 ( √ )3.AT89S51单片机共有4个8位的并行I/O口,其中P2口既可用作地址/数据口,又可用作一般的I/O口。 ( √ )4.假设传输的数据一帧有11位,每秒钟传输30帧,则此时的比特率应为330bps。 ( X )5.MCS-51的串行接口是全双工的。 三、选择题 1、下列英文缩写代表“串口控制寄存器”的是( A )。 A.SCON B.TCON C.SMOD D.TMOD 2、串行通信中,发送和接收寄存器是( B ) A、TMOD B、SBUF C、SCON D、DPTR 3、控制串行口工作方式的寄存器是( C ) A、TMOD B、PCON C、SCON D、TCON 4. 串行口每一次传送( C )字符。 A.1个 B.1串 C.1帧 D.1波特 5. 当MCS-51进行多机通讯时,串行接口的工作方式应选为( C )。 A.方式0 B.方式1 C.方式2 D.方式0或方式2 6. MCS—51单片机串行口发送/接收中断源的工作过程是:当串行口接收或发送完一帧数据时,将SCON中的( A ),向CPU申请中断。 A、RI或TI置1 B、RI或TI置 0 C、RI置1或TI置0 D、RI置0或TI置1

    时间:2018-05-07 关键词: 基础知识 51单片机

  • 串口UART学习笔记

     一、谈谈对串口UART的理解 1.交代计算机中常见的几种硬件(CPU和外设)通信方式:GPIO/UART/IIC/SPI/1-WIRE。 2.UART的定义:通用串行异步收发器。 串行和并行的对比:距离 速度 抗干扰性 2.1 异步:CPU的速度要远远快于外设,势必要考虑数据同步(发玩还要确保接收正确) 数据同步方法:异步和同步 同步:“低放高取”。不仅仅需要数据线,还需要一根时钟控制信号线。利用时钟控制信号线来实现双方的数据同步。 IIC总线和SPI总线就是采用同步方式。 3.UART串口的三种工作方式:单工、半双工、全双工。 二、如何利用异步实现UART的数据同步 答案在UART的数据传输协议中。 UART数据传输协议:空闲位、起始位、数据位、奇偶校验位、停止位。 空闲位:CPU和外设不再进行数据传输时,数据线上一直发送空闲位,“1” 有效。 起始位:CPU和外设进行数据传输时,首先在数据线上要发送一个起始位信号,有效位数:1bit。 数据位:指定有效的数据位数,5/6/7/8,一般为8。

    时间:2018-05-07 关键词: uart 串口

  • uboot是什么?uboot有什么用?

     —U-Boot(Universal Boot Loader),即通用Bootloader,是德国DENX小组开发的用于多种嵌入式CPU的bootloader程序,是遵循GPL条款的开放源代码项目。 —Bootloader不属于操作系统内核,这一部分代码不具有可移植性。 —在移植操作系统时,这部分代码必须加以改写。 —Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。 “通用”有两层含义: (1)支持多架构CPU:PowerPC,MIPC,X86,ARM等。 (2)支持多种OS:Linux、VxWorks、QNX、LynxOScar等操作系统。

    时间:2018-05-07 关键词: uboot

  • 单片机面试题

     1.MCS51的中断系统有几个中断源?几个中断优先级?中断优先级是如何控制的?在出现同级中断申请时,CPU按什么顺序响应(按由高级到低级的顺序写出各个中断源)?各个中断源的入口地址是多少? 答:MCS51单片机有5个中断源,2个中断优先级,中断优先级由特殊功能寄存器IP控制,在出现同级中断申请时,CPU按如下顺序响应各个中断源的请求:INT0、T0、INT1、T1、串口,各个中断源的入口地址分别是0003H、000BH、0013H、001BH、0023H。 1、单片机是将微处理器、一定容量的 RAM 和ROM以及 I/O 口、定时器等电路集成在一块芯片上而构成的微型计算机。 8、当CPU访问片外的存储器时,其低八位地址由 P0口提供,高八位地址由 P2口提供,8位数据由 P0口提供。 9、在I/O口中,P0口在接LED时,必须提供上拉电阻,P3口具有第二功能。 19、是非题:工作寄存器区不允许做普通的RAM单元来使用。F 20、是非题:工作寄存器组是通过置位PSW中的RS0和RS1来切换的。T 21、是非题:特殊功能寄存器可以当作普通的RAM单元来使用。F 22、是非题:访问128个位地址用位寻址方式,访问低128字节单元用直接或间接寻址方式。T 23、是非题:堆栈指针SP的内容可指向片内00H~7FH的任何RAM单元,系统复位后,SP初始化为00H。F 24、数据指针DPTR是一个16位的 特殊功能寄存器 寄存器。 25、是非题:DPTR只能当作一个16位的特殊功能寄存器来使用。F 26、是非题:程序计数器PC是一个可以寻址的特殊功能寄存器。F 28、当系统处于正常工作状态且振荡稳定后,在RST引脚上加一个 高 电平并维持 2 个机器周期,可将系统复位。 29、是非题:单片机89C51复位后,其PC指针初始化为0000H,使单片机从该地址单元开始执行程序。T 31、是非题:单片机系统上电后,其内部RAM的值是不确定的。T 36、以下哪一条指令的写法是错误的(C)。 A、MOV DPTR,#3F98H B、MOV R0,#0FEH C、MOV 50H,#0FC3DH D、INC R0 37、以下哪一条指令的写法是错误的(D)。 A、INC DPTR B、MOV R0,#0FEH C、DEC A D、PUSH A 38、以下哪一条指令的写法是错误的(B)。 A、MOVC A,@A+DPTR B、MOV R0,#FEH C、CPL A D、PUSH ACC 39、是非题:在51系列单片机的指令系统中,其加法、减法、乘法和除法必须有累加器A的参与才能完成。T 46、单片机89C51的5个中断源分别为 INT0 、INT1 、T0 、T1以及TXD/RXD 。 47、单片机89C51的中断要用到4个特殊功能寄存器,它们是TCON、SCON、 IE 以及IP。 48、在89C51中,外部中断由IT0(1)位来控制其两种触发方式,分别是 电平 触发方式和 边沿 触发方式。 50、是非题:在89C51中,当产生中断响应时,所有中断请求标志位都由硬件自动清零。F 51、中断处理过程分为3个阶段,即中断响应、中断处理以及中断返回。 52、简述51系列单片机中断响应的条件。 ●有中断源发出中断请求; ●中断总允许位EA=1,即CPU开中断; ●申请中断的中断源的中断允许位为1,即中断没有屏蔽; ●无同级或更高级中断正在被服务; ●当前的指令周期已经结束; ●若现在指令为RETI或者是访问IE或IP指令,则该指令以及紧接着的另一条指令已执行完。 53、是非题:在51系列单片机中,中断服务程序从矢量地址开始执行,一直到返回指令RETI为止。T 56、是非题:在执行子程序调用或执行中断服务程序时都将产生压栈的动作。T 65、是非题:在51系列单片机的指令中,既有带借位的减法指令,又有不带借位的减法指令。F 69、单片机89C51具有并行 通信和串行 通信两种通信方式。 79、单片机89C51中的串行通信共有4种方式,其中方式 0 是用作同步移位寄存器来扩展I/O口的。 99、MCS-51 单片机的RS1,RS0=01 时,当前寄存器R0—R7 占用内部RAM(B)单元。 A、 00H—07H B、 08H—0FH C、 10H—17H D、 18H—1FH 101、MCS-51 单片机有片内RAM 容量( A )。 A. 128B B、 4KB C、 8KB D、 256B 104、在执行下列指令后,A=___60H___,R0=__45H____,(60H)=___45H___。 MOV A,# 45H MOV R0,# 60H MOV @R0,A XCH A, R0 106、设RAM 中(2456H)=66H,(2457H)=34H,ROM 中(2456H)=55H,(2457H)=64H。请分析下面程序执行后各寄存器的内容。 (A)=___64H___,(DPTR)=__2356H____。 MOV A,#1 MOV DPTR,#2456H MOVC A,@A+DPTR 107、MCS-51 单片机的定时器/计数器工作方式0 是( C )。 A、8 位计数器结构 B、16 位计数器结构 C、13 位计数器结构 D、2 个8 位计数器结构 108、执行下列程序后,(A)=__35H____,(B)=__16H____。 MOV A,#9FH MOV B,#36H ANL B,A SETB C ADDC A,B 109、MCS-51 单片机的外部中断0 中断入口地址为( C )。 A、 000BH B、 001BH C、0003H D、 0013H 寻址方式 寻址空间 立即数寻址 程序存储器ROM 直接寻址 片内RAM低128B、特殊功能寄存器 寄存器寻址 工作寄存器R0-R7、A、B、C、DPTR 寄存器间接寻址 片内RAM低128B、片外RAM 变址寻址 程序存储器(@A+PC,@A+DPTR) 相对寻址 程序存储器256B范围(PC+偏移量) 位寻址 片内RAM的20H-2FH字节地址、部分SFR 1.MOV A,40H ;直接寻址 (40H)→A MOV R0,A ;寄存器寻址 (A)→R0 MOV P1,#0F0H ;立即数寻址 0F0→P1 MOV @R0,30H ;直接寻址 (30H) →(R0) MOV DPTR,#3848H ;立即数寻址 3848H→DPTR MOV 40H,38H ;直接寻址 (38H) →40H MOV R0,30H ;直接寻址 (30H) →R0 MOV P0,R0 ;寄存器寻址 ( R0 )→P0 MOV 18H,#30H ;立即数寻址 30H→18H MOV A,@R0 ;寄存器间接寻址 ((R0)) →A MOV P2,P1 ;直接寻址 (P1)→P2 最后结果:(R0)=38H,(A)=40H,(P0)=38H, (P1)=(P2)=0F0H,(DPTR)=3848H,(18H)=30H, (30H)=38H,(38H)=40H,(40H)=40H,(48H)=38H 2. MOV A,DATA ;直接寻址 2字节1周期 MOV A,#DATA ;立即数寻址 2字节1周期 MOV DATA1,DATA2 ;直接寻址 3字节2周期 MOV 74H,#78H ;立即数寻址 3字节2周期 2-1 MCS-51单片机内部包含哪些主要功能部件?它们的作用是什么? 答:MCS-51单片机在一块芯片中集成了CPU、RAM、ROM、定时/计数器、多功能I/O口 和中断控制等基本功能部件。 单片机的核心部分是CPU,CPU是单片机的大脑和心脏。 程序存储器用于存放编好的程序或表格常数。数据存储器用于存放中间运算结果、数据 暂存和缓冲、标志位等。 定时/计数器实质上是加法计数器,当它对具有固定时间间隔的内部机器周期进行计数时 ,它是定时器;当它对外部事件进行计数时,它是计数器。 I/O 接口的主要功能包括:缓冲与锁存数据、地址译码、信息格式转换、传递状态(外 设状态)和发布命令等。 中断控制可以解决 CPU 与外设之间速度匹配的问题,使单片机可以及时处理系统中许 多随机的参数和信息,同时,它也提高了其处理故障与应变能力的能力。 2-5 简述MCS-51单片机片内RAM区地址空间的分配特点。 答:片内数据存储器分为工作寄存器区、位寻址区和数据缓冲器区等3个区域。 工作寄存器使用内部RAM中地址为00H~1FH的32个单元, 并分成4个工作寄存器组,每个组有8个工作寄存器,名称为R0~R7。 对于内部 RAM 中地址为 20H~2FH 的 16 个单元,CPU 不仅具有字节寻址功能,而且还具有位寻址功能。这 16 个单元共 128 位,每一位都赋予 1个位地址,位地址范围是00H~7FH。 30H~7FH是数据缓冲区,即用户RAM区,共80个单元。 2-7 单片机复位后,各特殊功能寄存器中的初始化状态是什么? 答: 特殊功能寄存器 初始状态 特殊功能寄存器 初始状态 ACC 00H TMOD 00H PC 0000H TCON 00H PSW 00H TL0 00H SP 07H TH0 00H DPTR 0000H TL1 00H P0~P3 0FFH TH1 00H IP xx000000B B 00H IE 0x000000B SCON 00H PCON 0xxx0000B SBUF 不定 2-8 MCS-51单片机的21个特殊功能寄存器中,哪些具有位寻址能力? 答:MCS-51 单片机中的程序状态字寄存器(PSW),B 寄存器,累加器(ACC) ,端口 P0 ~P3,控制寄存器中用于中断控制的中断优先级控制寄存器(IP)和中断允许控制寄存 器(IE) ,用于设置定时/计数器和串行口工作方式的定时/计数器控制寄存器(TCON) 、串行口控制寄存器(SCON)具有位寻址能力。 2-15 什么时候需要复位操作?对复位信号有何要求? 答:复位是单片机的初始化操作。单片机系统在上电启动运行时,都需要先复位。 上电复位利用电容器的充电实现。在时钟电路工作后,在 RST 端连续给出 2 个机器周 期的高电平就可完成复位操作。MCS-51 单片机的上电加按键复位电路当复位按键按下 3-1 什么是寻址方式?MCS-51指令系统有哪些寻址方式?相应的寻址空间在何处? 答:在指令系统中,操作数是一个重要的组成部分,它指定了参与运算的数据或数据所在的 地址单元。如何找到参与运算的这个数据或数据所在的地址就称为寻址方式。 MCS-51 指令系统的寻址方式主要有立即寻址、直接寻址、寄存器寻址、寄存器间接寻 址、基址加变址寻址、相对寻址和位寻址等七种。 对程序存储器只能采用立即寻址和基址加变址寻址方式;对特殊功能寄存器只能采用直 接寻址方式,不能采用寄存器间接寻址,对 8032/8052 等单片机内部 RAM 的高 128 个 字节(80H~FFH),只能采用寄存器间接寻址,不能使用直接寻址方式;对位操作指令 只能对位寻址区操作;外部扩展的数据存储器只能用MOVX指令访问, 而内部RAM的 低128个字节(00H~7FH)既能用直接寻址,也能用间接寻址。 3-2 访问内部RAM单元可以采用哪些寻址方式?访问外部RAM单元可以采用哪些寻址方 式?访问特殊功能寄存器(SFR)可以采用哪些寻址方式? 答:对特殊功能寄存器只能采用直接寻址方式,单片机内部RAM的高128个字节 (80H~FFH ) ,只能采用寄存器间接寻址,外部扩展的数据存储器只能用MOVX指令访问,而内部 RAM的低128个字节(00H~7FH)既能用直接寻址,也能用间接寻址。 3-3 访问外部数据存储器和程序存储器可以用哪些指令来实现?举例说明。 答:访问外部数据存储器可以用以下指令实现: MOVX A, @Ri ;((Ri))→A,寄存器Ri指向的片外RAM地址中的内容送到累加器A中 MOVX @Ri, A ;A→((Ri)),累加器中内容送到寄存器Ri指向的片外RAM地址中 MOVX A, @DPTR;((DPTR))→A,数据指针指向的片外RAM地址中的内容送到累加器A中 MOVX @DPTR, A ; A→((DPTR)),累加器中内容送到数据指针指向的片外RAM地址中 访问程序存储器可以用以下指令实现: MOVC A, @A+DPTR ;((A+DPTR))→A,表格地址单元中的内容送到累加器A中 MOVC A, @A+PC ;PC+1→PC,((A+PC))→A,表格地址单元中的内容送到累加器A中 3-4 试用下列3种寻址方式编程,将立即数0FH送入内部RAM的30H单元中。 (1) 立即寻址方式;(2) 寄存器寻址方式;(3) 寄存器间接寻址方式 答: (1)立即寻址方式: MOV 30H, #0FH (2)寄存器寻址方式: MOV R5, #0FH MOV 30H, R5 (3)寄存器间接寻址方式:MOV @R1, #0FH MOV 30H, @R1 3-6 加法和减法指令影响哪些标志位?怎么影响的? 答:在带进位的加法运算中,会影响进位位Cy,最终要将A中的值和其后面的值以及进位 位Cy中的值相加,最终结果存在A。 在带进位减法指令中,要将累加器A的内容与第二操作数及进位标志相减,结果送回到 累加器A中。在执行减法过程中,如果位7(D7)有借位,则进位标志Cy置“1”,否则 清“0”;如果位3(D3)有借位,则辅助进位标志AC置“1”,否则清“0”;如位6有借位 而位 7 没有借位,或位 7 有借位而位 6 没有借位,则溢出标志 OV 置“1”,否则清“0”。 若要进行不带借位的减法操作,则必须先将Cy清“0”。 3-8 试编写一段程序,将内部数据存储器30H、 3lH单元内容传送到外部数据存储器1000H、1001H单元中。 答: MOV A, 30H MOV DPTR, #1000H MOV @DPTR, A MOV A, 31H MOV DPTR, #1000H MOV @DPTR, A 3-9 试编写一段程序,将外部数据存储器40H单元中的内容传送到0l00H单元中。 答: MOV DPTR, #0040H MOV A, @DPTR MOV 0100H, A 6-2 MCS-51 单片机提供了几个中断源?有几级中断优先级别?各中断标志是如何产生的 又如何清除这些中断标志?各中断源所对应的中断矢量地址是多少? 答:MCS-51单片机提供了5个中断源,有2级中断优先级别。中断标志由特殊功能寄存器 TCON和SCON的相应位锁存。 中断标志的撤消分为: 1)定时/计数器中断请求的撤消 中断请求被响应后,硬件会自动清TF0或TF1。 2)外部中断请求的撤消 (1)跳沿方式外部中断请求的撤消是自动撤消的。 (2)电平方式外部中断请求的撤消,除了标志位清“0”之外,还需在中断响应后把中断 请求信号引脚从低电平强制改变为高电平。 3)串行口中断请求的撤消 响应串行口的中断后,CPU无法知道是接收中断还是发送中断,还需测试这两个中断标 志位的状态,以判定是接收操作还是发送操作,然后才能清除。所以串行口中断请求的 撤消只能使用软件的方法。 CLR TI ;清TI标志位 CLR RI ;清RI标志位 各中断源对应的中断矢量地址分别为: 中断源 中断矢量 外部中断0 0003H 定时器T0中断 000BH 外部中断1 0013H 定时器T1中断 001BH 串行口中断 0023H 定时器中断T2(仅52系列有) 002BH 6-4 试分析以下几种中断优先级的排列顺序(级别由高到低)是否可能?若可能,则应如何 设置中断源的中断级别?否则,请简述不可能的理由。 (1) 定时器T0中断,定时T1中断,外中断1NT0,外中断INT1,串行口中断; (2) 串行口中断,外中断1NT0,定时器T0中断,外中断INT1,定时器T1中断; (3) 外中断INT0、定时器T1中断,外中断INT1,定时器T0中断,串行口中断。 (1)可以,将定时器T0中断,定时T1设置为高优先级中断,将外中断1NT0,外中断 INT1,串行口中断 (2)可以,将串行口中断设置为高优先级中断,将外中断 1NT0,定时器 T0 中断,外 中断INT1,定时器T1中断设置为低优先级中断; (3)不行,因为 MCS-51 单片机有 2 级中断优先级别,同级中断还存在按次序决定的 第二优先级结构,由高到低依次为外中断 1NT0、定时器 T0 中断、外中断 INT1、定时 器T1中断、串行口中断。 7-2 如果采用晶振的频率为 3MHz,定时/计数器工作方式 0、1、2 下,其最大的定时时间为多少? 答:内部定时脉冲周期=机器周期=12/3Mhz=4us 工作方式0:Tmax=8192*4us=32.768ms 工作方式1:Tmax=65536*4us=262.144ms 工作方式2:Tmax=256*4us=1.024ms 7-10 定时/计数器测量某正单脉冲的宽度,采用何种方式可得到最大量程?若时钟频率为 6MHz,求允许测量的最大脉冲宽度是多少? 答:采用定时器工作方式1可得到最大量程,最大脉冲宽度:65536*12/6M=131.072ms 【2—9】什么是堆栈?堆栈有哪些功能? 设计时,为什么还要对SP重新赋值? 堆栈指针SP的作用是什么? 【答】堆栈是在片内数据RAM区中,数据按照“先进后出”或“后进先出”原则进行管理的区域。堆栈功能有两个:保护断点和保护数据。在子程序调用和中断操作时这两个功能特别有用。在80C51单片机中,堆栈在子程序调用和中断时会把断点地址自动进栈和出栈。进栈和出栈的指令(PUSH、POP)操作可用于保护现场和恢复现场。由于子程序调用和中断都允许嵌套,并可以多级嵌套,而现场的保护也往往使用堆栈,所以一定要注意给堆栈以一定的深度,以免造成堆栈内容的破坏而引起程序执行的“跑飞”。 堆栈指针SP在80C51中存放当前的堆栈栈顶所指存储单元地址的一个8位寄存器。80C51单片机的堆栈是向上生成的,即进栈时SP的内容是增加的;出栈时SP的内容是减少的。 系统复位后。80C51的SP内容为07H。若不重新定义,则以07H为栈底,压栈的内容从08H单元开始存放。但工作寄存器R0~R7有4组,占有内部RAM地址为00H~1FH,位寻址区占有内部RAM地址为20H~2FH。若程序中使用了工作寄存器1~3组或位寻址区,则必须通过软件对SP的内容重新定义,使堆栈区设定在片内数据RAM区中的某一区域内(如30H),堆栈深度不能超过片内RAM空间。 【2一13】程序存储器指令地址、堆栈地址和外接数据存储器地址各使用什么指针?为什么? 【答】程序存储器指令地址使用程序计数器PC指针,PC中存放的是下一条将要从程序存储器中取出的指令的地址。程序计数器PC变化的轨迹决定程序的流程。PC最基本的工作方式是自动加1。在执行条件转移或无条件转移指令时,将转移的目的地址送入程序计数器,程序流向发生变化。在执行调用指令或响应中断时,将子程序的入口地址或者中断矢量地址送人PC,程序流向发生变化。 堆栈地址使用堆栈指针.SP。SP在80C51中存放当前的堆栈栈顶所指存储单元地址,是一个8位寄存器,对数据按照“先进后出”原则进行管理。外接数据存储器地址使用数据指针DPTR。DPTR是一个16位特殊功能寄存器,主要功能是作为片外数据存储器或I/0寻址用的地址寄存器,这时会产生RD或wR控制信号,用于单片机对外扩的数据存储器或I/0的控制。数据指针DPTR也可以作为访问程序存储器时的基址寄存器,此时是寻址程序存储器中的表格、常数等单元,而不是寻址指令。 【2一19】80C51单片机的4个I/O口在使用上有哪些分工和特点? 【答】4个I/O口的分工和特点如下: ① P0口是一个多功能的8位口,可按字节访问也可按位访问。 l 用作I/0口。相当于一个真正的双向口:输出锁存,输入缓冲,但输入时须先将口置l;每根口线可以独立定义为输入或输出。 l 用作地址/数据复用总线。作数据总线使用时,输入/输出8位数据D0~D7;作地址总 线用时,输出低8位地址AO~A7。 ② P1口是一个8位口,可按字节访问也可按位访问,因此,P1口不仅可以8位一组进行 输入、输出操作,还可以逐位分别定义各口线为输入线或输出线。输入时有条件,即需要先输出1,将该口设为输入状态。一般作I/o口用。 ③ P2口是一个多功能的8位口,可按字节访问也可按位访问。在单片机采用并行扩展方式时,P2口作为地址总线的高8位D8~D15。 ④ P3口是一个多功能的8位口,可按字节访问,也按可位访问。可作为I/0口使用,为准双向口。既可以字节操作,也可以位操作;既可以8位口操作,也可以逐位定义口线为输入线或输出线。 P3可替代输入、输出功能。 替代输入功能: P3.0一一RXD,串行输入口。 P3.2一一IN'I、0,外部中断O的请求。 P3.3一一INTl,外部中断1的请求。 P3.4一TO,定时器/计数器O外部计数脉冲输入。 P3.5一一T1,定时器/计数器1外部计数脉冲输入。 替代输出功能: P3.1一一TXD,串行输出口。 P3.6一一wR,外部数据存储器写选通,输出,低电平有效。 P3.7~RD,外部数据存储器读选通,输出,低电平有效。 【3—4】简述80C51的指令寻址方式,并举例说明。 【答】执行任何一条指令都需要使用操作数,寻址方式就是在指令中给出的寻找操作数或操作数所在地址的方法。 80C5l系列单片机的指令系统中共有以下7种寻址方式。 ①立即寻址。在指令中直接给出操作数。出现在指令中的操作数称为“立即数”,为了与直接寻址指令中的直接地址相区别,在立即数前面必须加上前缀“#”。 例如:MOV DPTR,#1234H ;1234H为立即数,直接送DPTR ②直接寻址。在指令中直接给出操作数单元的地址。 例如: MOV A,55H ;55H是操作数单元的地址,55H单元内的数据才是操作数,取出后送累加器A ③寄存器寻址。在指令中将指定寄存器的内容作为操作数。因此,指定了寄存器就能得 到操作数。寄存器寻址方式中,用符号名称来表示寄存器。 例如: INC R7 ;R7的内容为操作数,加1后再送回R7 ④寄存器间接寻址。在指令中给出的寄存器内容是操作数的地址,从该地址中取出的才 是操作数。可以看出,在寄存器寻址方式中,寄存器中存放的是操作数;而在寄存器间接寻址 方式中,寄存器中存放的则是操作数的地址。 寄存器间接寻址须以寄存器符号名称的形式表示。为了区别寄存器寻址和寄存器间接寻 址,在寄存器间接寻址中,应在寄存器的名称前面加前缀“@”。 例如: ORL A.@Ro; 当R0寄存器的内容是60H时,该指令功能是以RO寄存器的内容60H为地址,将60H地址单元的内容与累加器A中的数相“或”,其结果仍存放在A中。 ⑤相对寻址。在指令中给出的操作数为程序转移的偏移量。相对寻址方式是为实现程序的相对转移而设立的,为相对转移指令所采用。 在相对转移指令中,给出地址偏移量(在80C51系列单片机的指令系统中,以“rel”表示,为8位带符号数),把PC的当前值加上偏移量就构成了程序转移的目的地址。而PC的当前值是指执行完转移指令后的PC值,即转移指令的PC值加上转移指令的字节数。转移的目的地址可用如下公式表示: 目的地址=(转移指令所在地址+转移指令字节数)+rel 例如:SJMP 80H ;80H为程序转移的偏移量,即一128。当前PC值减去128后即为转移地址 ⑥变址寻址。以DPTR或PC作基址寄存器,累加器A作变址寄存器,以两者内容相加形成的16位程序存储器地址作为操作数地址。又称“基址寄存器+变址寄存器间接寻址”。变址寻址方式只能对程序存储器进行寻址。 例如: MOVC A,@A+DPTR ;功能是把DPTR和A的内容相加,所得到的程序存储器地址单元的内容送A ⑦位寻址。80C51系列单片机有位处理功能,可以对数据位进行操作,因此,就有相应的位寻址方式。位寻址的寻址范围: ●片内RAM中的位寻址区。 ·可位寻址的特殊功能寄存器位。 例如:MOV c,80H ;功能是把位寻址区的80H位(即P0.0)状态送累加位C 【3—14】已知(30H)=40H,(40H)=10 H,(10H)=00H,(P1)=CAH,请写出执行以下程序段后有关单元的内容。 【答】有关单元的内容如下: MOV R0,#30H ;(RO)=30H MOV A,@R0 ;(A)=40H MOV Rl,A ;(R1)=40H MOV B,@R1 ;(B)=1OH MOV @R1,P1 ;(40H)=CAH MOV A,@RO ;(A)=40H MOV 10H,#20H ;(10H)=20H MOV 30H,10H ;(30H)=20H 执行以上程序段后,有关单元的内容分别为:(30H)=20H,(40H)=CAH,(10H)=20H,(P1)=CAH。 【3-1】已知(A)=7AH,(RO)=30H,(30H)=A5 H,(PSW)=80H。请填写各条指令单独执行后的结果。 【答】结果如下: (1) XCH A,R0 ;(A)=30H,(R0):7AH (2) XCH A,30H ;(A)=A5H,(30H)=7AH,(PSW)=81H (3) XCH A,@R0 ;(A)=R5H,(30H)=7AH,(PSW)=81H (4) XCHD A,@R0 ;(A)=75H,(30H)=AAH,(PSW)=81H (5) SWAP A ;(A)=A7H (6) ADD A,R0 ;(A)=AAH,(PSW)=04H (7) ADD A,30H ;(A)=1FH,(PSW)=81H (8) ADD A,#30H ;(A)=AAH,(PSW)=04H (9) ADDC A,30H ;(A)=20H,(PSW)=01H (10) SUBB A,30H ;(A)=D4H,(PSW)=84H (11) SUBB A,#30H ;(A)=49H,(PSW)=01H 【3-15】已知(R1)=20 H,(20 H)=AAH,请写出执行完下列程序段后A的内容。 【答】各指令的执行结果如下: MOV A,#55H ;(A)=55H ANL A,#0FFH ;(A)=55H ORL 20H,A ;(20H)=FFH XRL A,@R1 ;(A)=AAH CPL A ;(A)=55H 执行完程序段后,A的内容为5 5 H。 【3—17】已知两个十进制数分别在内部RAM中的40 H单元和50H单元开始存放(低位在前),其字节长度存放在内部RAM的30 H单元中。编程实现两个十进制数求和,求和结果存放在40 H开始的单元中。 ORG 0000H SJMP MAIN ORG 0030H MAIN: MOV R0,#40H ;被加数首址.又作两个十进制数和的首址 MOV R1,#50H ;加数首址 MOV R2,30H ;字节长度 CLR C PP: MOV A,@R1 ;取加数 ADDC A,@R0 ;带进位加 DA A ;二一十进制数调整 MOV @R0,A ;存和 INC R0 ;修正地址 INC R1 DJNZ R2,PP ;多字节循环加 AJMP $ END 【4-17】根据8100 H单元中的值X,决定P1口引脚输出为: 加上必要的伪指令,并对源程序加以注释。 . 【答】程序如下: ORG 0000H SJMP BEGIN ORG 0030H BEGIN: MOV DPTR,#8100H MOVX A,@DPTR MOV R2,A JB ACC.7,SMALLER;有符号数<0 SJMP UNSIGNED ;无符号数≥0 SMALLER:DEC A ;X<0,输出-X(先减1,再取反) CPL A MOV P1,A SJMP OK UNSIGNED:CJNE A,#00H,BIGGER ;不等于0即大于0 MOV P1,#80H ;X等于0,输出80H SJMP OK BIGGER: CLR C ;X大于0,输出A×2 RLC A ;A×2 MOV P1,A OK: SJMP $ END 例如:输入55 H,P1口引脚输出AAH;输入00 H,P1口引脚输出80 H;输入F1(一1 5的补码),P1口引脚输出0FH。 【5-4】什么是单片机的中断优先级?中断优先级处理的原则是什么? 【答】在一个单片机系统中往往允许有多个中断源,通常给每个中断源规定了优先级别,称为“优先权"或“中断优先级’’。 当单片机同时接收到两个或多个不同优先级的中断请求时,先响应高优先级的中断。如果同时接收到的是几个同一优先级的中断请求,则由内部的硬件查询序列确定它们的优先服务次序,当服务结束后,再响应级别较低的中断源。 在80C51单片机中有高、低两个中断优先级,通过中断优先级寄存器IP来设定。 在80C51单片机中存在同一优先级内由内部硬件查询序列确定的第二个优先级结构。 其排列如下: 中断源 中断优先级 外部中断0 最高 定时器T0中断 外部中断1 定时器T1中断 串行口中断 定时器T2中断 最低 【5—7】80C51单片机在什么情况下可响应中断? 【答】中断响应是有条件的,即: ·中断源申请中断; ·该中断源已被允许中断,且CPU也已允许中断; ·没有同级或高优先级中断在执行中断服务程序。 在接受中断申请时,如遇下列情况之一,硬件生成的长调用指令LCALL将被封锁: ①CPU正在执行同级或高一级的中断服务程序。因为当一个中断被响应时,其对应的中断优先级触发器被置1,封锁了同级和低级中断。 ②查询中断请求的机器周期不是执行当前指令的最后一个周期。目的在于使当前指令执行完毕后,才能进行中断响应,以确保当前指令的完整执行。 ③当前正在执行RETI指令或执行对IE、IP的读/写操作指令。80C51.中断系统的特性规定,在执行完这些指令之后,必须再继续执行一条指令,然后才能响应中断。 【6-1】80C51单片机内部设有几个定时器/计数器?简述各种工作方式的特点。 【答】80C51单片机内部设有2个16位定时器/计数器TO和T1。定时器/计数器有4种工作方式,其特点如下: . ①方式O是13位定时器/计数器。由THx高8位(作计数器)和TLx的低5位(32分频的定标器)构成,TLx的低5位溢出时,向THx进位;THx溢出时,硬件置位TFx(可用于软件查询),并可以申请定时器中断。 ②方式1是16位定时器/计数器。TLx的低8位溢出时向THx进位,THx溢出时,硬 件置位TFx(可用于软件查询),并可以申请定时器中断。 ③方式2是定时常数自动重装载的8位定时器/计数器。TLx作为8位计数寄存器, THx作为8位计数常数寄存器。当TLx计数溢出时,一方面将TFx置位,并申请中断;另一方面将THx的内容自动重新装入TLx中,继续计数。由于重新装入不影响THx的内容,所以可以多次连续再装入。方式2对定时控制特别有用。 . ④方式3只适用于TO,T0被拆成两个独立的8位计数器TLO和TH0。TLO做8位计 数器,它占用了T0的GATE、INTO、启动/停止控制位TRO、TO引脚(P3.4)以及计数溢出标志位TF0和TO的中断矢量(地址为000BH)等TH0只能做8位定时器用,因为此时的外部引脚T0已为定时器/计数器TLO所占用。这时它占用了定时器/计数器T1的启动/停止控制位TRl、计数溢出标志位TFl.及T1中断矢量(地址为001BH)。 T0设为方式3后,定时器/计数器T1只可选方式O、1或2。由于此时计数溢出标志位TFI.及T1中断矢量(地址为001BH)已被TH0所占用,所以T1仅能作为波特率发生器或其他不用中断的地方。 3.访问片内RAM低128字节使用哪些寻址方式?访问片内RAM高128字节使用什么寻址方式?访问SFR使用什么寻址方式? 答: 访问片内RAM低128字节使用直接寻址,寄存器间接寻址,位寻址;访问片内RAM高128字节使用寄存器间接寻址;访问SFR使用直接寻址,位寻址。 4.访问片外RAM使用什么寻址方式? 答: 访问片外RAM使用寄存器间接寻址 5.访问程序存储器使用什么寻址方式?指令跳转使用什么寻址方式? 答: 访问程序存储器使用指令绝对寻址,指令相对寻址。指令跳转使用指令绝对寻址,指令相对寻址。 6.分析下面指令是否正确,并说明理由。 MOV R3,R7 错,两个操作数不能同时为工作寄存器 MOV B,@R2 对 DEC DPTR 错,不存在 MOV 20H.8,F0 错,位传送指令必须用C PUSH DPTR CPL 36H 错,不存在 MOV PC,#0800H 错,PC不能访问 7.分析下面各组指令,区分它们的不同之处。 MOV A,30H 与 MOV A,#30H 前者表示:(30H)→A 后者表示:30H→A MOV A,R0 与 MOV A,@R0 前者表示:(R0)→A 后者表示:((R0))→A MOV A,@R1 与 MOVX A,@R1 前者表示:在片内数据存储器((R1))→A 后者表示:在片外数据存储器((R1))→A MOVX A,@R0 与 MOVX A,@DPTR 前者R0表示8位地址 后者DPTR表示16位地址 MOVX A,@DPTR 与 MOVC A,@A+DPTR 前者表示:((DPTR))→A 后者表示:((DPTR)+(A))→A 8.在MCS-51单片机的片内RAM中,已知(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H。请说明下面各是什么指令和寻址方式,以及每条指令执行后目的操作数的结果。 MOV A,40H ;数据传送,直接寻址,(A)=48H MOV R0,A ;数据传送,寄存器寻址,(R0)=48H MOV P1,#0FH ;数据传送,立即数寻址,(P1)=0FH MOV @R0,30H ;数据传送,直接寻址,(48H)=38H MOV DPTR,#1234H ;数据传送,立即数寻址,(DPTR)=1234H MOV 40H,30H ;数据传送,直接寻址,(40H)=38H MOV R0,38H ;数据传送,直接寻址,(R0)=40H MOV P0,R0 ;数据传送,直接寻址,(P0)=40H MOV 28H,#30H ;数据传送,立即数寻址,(28H)=30H MOV A,@R0 ;数据传送,寄存器间接寻址,(A)=38H 9.已知(A)=23H,(R1)=65H,(DPTR)=1FECH,片内RAM(65H)=70H, ROM(205CH)=64H。试分析下列各条指令执行后目标操作数的内容。 MOV A,@R1 ;(A)=70H MOVX @DPTR,A ;(1FECH)=70H MOVC A,@A+DPTR ;(A)=64H XCHD A,@R1 ;(A)=65H 10.已知(A)=76H,(R1)=76H,(B)=4,CY=1,片内RAM(76H)=0D0H,(80H)=6CH。试分析下列各条指令执行后目标操作数的内容和相应标志位的值。 ADD A,@R1 ;(A)=46H,CY=1 SUBB A,#75H ;(A)=0D0H,CY=1 MUL AB ;(A)=40H,(B)=03H DIV AB ;(A)=15H,(B)=01H ANL 76H,#76H ;(76H)=50H ORL A,#0FH ;(A)=1FH XRL 80H,A ;(80H)=73H 11.已知(A)=83H,(R0)=17H,(17H)=34H,试分析当执行完下面程序段后累加器A、R0、17H单元的内容。 ANL A,#17H ;(A)=03H ORL 17H,A ;(17H)=37H XRL A,@R0 ;(A)=34H CPL A ;(A)=0CBH 12.阅读下面程序段,说明该段程序的功能。 MOV R0,#40H MOV R7,#10 CLR A LOOP: MOV @R0,A INC A INC R0 DJNZ R7,LOOP SJMP $ 答:把0,1,2,3……数列送到40H开始的10个单元中。 13.阅读下面程序段,说明该段程序的功能。 MOV R0,#40H MOV A,R0 INC R0 ADD A,@R0 MOV 43H,A CLR A ADDC A,#0 MOV 42H,A SJMP $ 答:40H加41H单元的数,结果送42H:43H 14.阅读下面程序段,说明该段程序的功能。 MOV A,30H MOV B,#5 MUL AB ADD A,31H MOV 33H,A CLR A ADDC A,B MOV 32H,A SJMP $ 答:(30H)×5+(31H)→(32H:33H) 22.编写程序,把片外RAM从2000H开始存放的16字节数据,传送到片内从30H开始的单元中。 MOV DPTR,#2000H MOV R0,#30H MOV R1,#0 NEXT: MOVX A,@DPTR MOV @R0,A INC DPTR INC R0 INC R1 CINE R1,#16H,NEXT

    时间:2018-05-07 关键词: 单片机 单片机面试

  • 电路设计的一些误区

     一:这板子的PCB设计要求不高,就用细一点的线,自动布吧 点评:自动布线必然要占用更大的PCB面积,同时产生比手动布线多好多倍的过孔,在批量很大的产品中,PCB厂家降价所考虑的因素除了商务因素外,就是线宽和过孔数量,它们分别影响到PCB的成品率和钻头的消耗数量,节约了供应商的成本,也就给降价找到了理由。 二:这些总线信号都用电阻拉一下,感觉放心些。 点评:信号需要上下拉的原因很多,但也不是个个都要拉。上下拉电阻拉一个单纯的输入信号,电流也就几十微安以下,但拉一个被驱动了的信号,其电流将达毫安级,现在的系统常常是地址数据各32位,可能还有244/245隔离后的总线及其它信号,都上拉的话,几瓦的功耗就耗在这些电阻上了。 三:CPU和FPGA的这些不用的I/O口怎么处理呢?先让它空着吧,以后再说。 点评:不用的I/O口如果悬空的话,受外界的一点点干扰就可能成为反复振荡的输入信号了,而MOS器件的功耗基本取决于门电路的翻转次数。如果把它上拉的话,每个引脚也会有微安级的电流,所以最好的办法是设成输出(当然外面不能接其它有驱动的信号) 四:这款FPGA还剩这么多门用不完,可尽情发挥吧 点评:FGPA的功耗与被使用的触发器数量及其翻转次数成正比,所以同一型号的FPGA在不同电路不同时刻的功耗可能相差100倍。尽量减少高速翻转的触发器数量是降低FPGA功耗的根本方法。 五:这些小芯片的功耗都很低,不用考虑 点评:对于内部不太复杂的芯片功耗是很难确定的,它主要由引脚上的电流确定,一个ABT16244,没有负载的话耗电大概不到1毫安,但它的指标是每个脚可驱动60毫安的负载(如匹配几十欧姆的电阻),即满负荷的功耗最大可达60*16=960mA,当然只是电源电流这么大,热量都落到负载身上了。 六:存储器有这么多控制信号,我这块板子只需要用OE和WE信号就可以了,片选就接地吧,这样读操作时数据出来得快多了。 点评:大部分存储器的功耗在片选有效时(不论OE和WE如何)将比片选无效时大100倍以上,所以应尽可能使用CS来控制芯片,并且在满足其它要求的情况下尽可能缩短片选脉冲的宽度。 七:这些信号怎么都有过冲啊?只要匹配得好,就可消除了 点评:除了少数特定信号外(如100BASE-T、CML),都是有过冲的,只要不是很大,并不一定都需要匹配,即使匹配也并非要匹配得最好。象TTL的输出阻抗不到50欧姆,有的甚至20欧姆,如果也用这么大的匹配电阻的话,那电流就非常大了,功耗是无法接受的,另外信号幅度也将小得不能用,再说一般信号在输出高电平和输出低电平时的输出阻抗并不相同,也没办法做到完全匹配。所以对TTL、LVDS、422等信号的匹配只要做到过冲可以接受即可。 八:降低功耗都是硬件人员的事,与软件没关系. 点评:硬件只是搭个舞台,唱戏的却是软件,总线上几乎每一个芯片的访问、每一个信号的翻转差不多都由软件控制的,如果软件能减少外存的访问次数(多使用寄存器变量、多使用内部CACHE等)、及时响应中断(中断往往是低电平有效并带有上拉电阻)及其它争对具体单板的特定措施都将对降低功耗作出很大的贡献。 九:CPU用大一点的CACHE,就应该快了 点评:CACHE的增大,并不一定就导致系统性能的提高,在某些情况下关闭CACHE反而比使用CACHE还快。原因是搬到CACHE中的数据必须得到多次重复使用才会提高系统效率。所以在通信系统中一般只打开指令CACHE,数据CACHE即使打开也只局限在部分存储空间,如堆栈部分。同时也要求程序设计要兼顾CACHE的容量及块大小,这涉及到关键代码循环体的长度及跳转范围,如果一个循环刚好比CACHE大那么一点点,又在反复循环的话,那就惨了。 十:存储器接口的时序都是厂家默认的配置,不用修改的 点评:BSP对存储器接口设置的默认值都是按最保守的参数设置的,在实际应用中应结合总线工作频率和等待周期等参数进行合理调配。有时把频率降低反而可提高效率,如RAM的存取周期是70ns,总线频率为40M时,设3个周期的存取时间,即75ns即可;若总线频率为50M时,必须设为4个周期,实际存取时间却放慢到了80ns。 十一:这个CPU带有DMA模块,用它来搬数据肯定快 点评:真正的DMA是由硬件抢占总线后同时启动两端设备,在一个周期内这边读,那边写。但很多嵌入CPU内的DMA只是模拟而已,启动每一次DMA之前要做不少准备工作(设起始地址和长度等),在传输时往往是先读到芯片内暂存,然后再写出去,即搬一次数据需两个时钟周期,比软件来搬要快一些(不需要取指令,没有循环跳转等额外工作),但如果一次只搬几个字节,还要做一堆准备工作,一般还涉及函数调用,效率并不高。所以这种DMA只对大数据块才适用。 十二:100M的数据总线应该算高频信号,至于这个时钟信号频率才8K,问题不大。 点评:数据总线的值一般是由控制信号或时钟信号的某个边沿来采样的,只要针对这个边沿保持足够的建立时间和保持时间即可,此范围之外有干扰也罢过冲也罢都不会有多大影响(当然过冲最好不要超过芯片所能承受的最大电压值),但时钟信号不管频率多低(其实频谱范围是很宽的),它的边沿才是关键的,必须保证其单调性,并且跳变时间需在一定范围内。 十三:既然是数字信号,边沿当然是越陡越好 点评:边沿越陡,其频谱范围就越宽,高频部分的能量就越大;频率越高的信号就越容易辐射(如微波电台可做成手机,而长波电台很多国家都做不出来),也就越容易干扰别的信号,而自身在导线上的传输质量却变得越差,因此能用低速芯片的尽量使用低速芯片。 十四:信号匹配真麻烦,如何才能匹配好呢? 点评:总的原则是当信号在导线上的传输时间超过其跳变时间时,信号的反射问题才显得重要。信号产生反射的原因是线路阻抗的不均匀造成的,匹配的目的就是为了使驱动端、负载端及传输线的阻抗变得接近,但能否匹配得好,与信号线在PCB上的拓扑结构也有很大关系,传输线上的一条分支、一个过孔、一个拐角、一个接插件、不同位置与地线距离的改变等都将使阻抗产生变化,而且这些因素将使反射波形变得异常复杂,很难匹配,因此高速信号仅使用点到点的方式,尽可能地减少过孔、拐角等问题。

    时间:2018-05-03 关键词: 电路设计

  • 一些硬件设计基础知识总结

     1:什么是二极管的正偏?在p节加正电压,而n节加负电压。即为正偏。 正偏是扩散电流大大增加,反偏使漂移电流增加。但是漂移电流是由于少子移动形成的,所以有反向饱和电流! 2:一般低频信号,电阻线的粗细是为了流多少电流,而粗细带来的电阻大小不计,因为铜线本身电阻很小,当然特殊情况例外! 3:MOS管是依靠多子电子的一种载流子导电的,与晶体三极管的多子与少子一起参与导电的情况不一样。它是一种自隔离器件,不需要设置晶体三极管中的隔离岛,节省心片面积,适合超大规模电路。它的特点是 压控!即控制端几乎不需要电流,容易集成。 4:如何判断三极管的 cbe 极?以及如何判断mos管的gds a 直接查资料, b 用万用表二极管档,p接正,n接负时有数字显示,所以有测量几次,就可以知道是pnp型还是npn型,b端由此可以断定了。然后用万用表的hef档测量放大倍数,如果接对了即能判断结果。 mos管一般情况下,和散热部分相连的是d。确定了d就简单了,在gs加个电,即用万用表二极管档点一下gs,再去量ds就有数字显示了。再如果短路ds,再去量就没有数字。可以确定gs了。 6:直流反馈是为了稳定静态工作点,交流反馈是为了改善放大器的性能。 7:电容和电阻的串并联关系相反。电感应该和电阻相同,不过还有互感的概念,所以还是有所区别的吧?需要求证! 8:示波器的很多数字显示只有在屏幕中显示多个周期才显示的,太多也不显示! 9:共基放大器是同相放大器,输出电阻大,电压增益为1,号称续流器。 共集放大器是同相放大器,输入电阻大,电流增益为1,号称电压跟随器。 共发放大器是反相放大器,输入出电阻是上两个之间,电压增益大,电流增益也大。 所以共发,共基放大器,知道共基在后,就知道输出电阻大,将输入电流不衰减的送到输出电阻大的那端。共集共发,明显是输入电阻大,将输入电阻不衰减的送到输出电阻小的那端。 10:正弦电压的输出平均电压在全桥整流电路中是0.9倍的输入电压有效值,所以输出电流的平均值(等同用万用表测量)是输入电压有效值除以负载电阻后的0.9倍。 11:示波器的两个探头是共地的,双踪的时候要注意,这两个地必须连在一起,尤其是高电压的时候!并不是所有的示波器两个探头都是共地的,有些地是独立的。 12:mos管的测量方法,一般是gds排列。用万用表的话,先在gs两端加电,即用万用表点一下gs 然后点ds,就能测量出数字来了。这些都是根据它的本身特征来判断的。注意,gs端的电容很小,u=q/c,如受外界影响,或静电感受,带上小两电荷就可以使u很大,使其烧掉。 13:u盘不能考包含很多小文件的东西,不然后驱动不了,卡住。比如ie文件,这些东西最好压缩,然后考进去。 14:用万用表测量之前必须弄明白测量什么信号,用什么档位。 15:tvs管的响应速度一般很快! 16:对三极管的各项参数以及运放的各项参数需要经常复习,了解!因为十分重要! 17:三极管的几个工作状态 需要彻底明白才行! 18:作实验的检查方法总结:首先应该看电路有几部分组成,其中每部分均可以分三部分来看,电源,输入,输出, 一一检查过来,必然不会错。另外就是看测量仪器是否设置正确。 19:波形叠加只要掌握 Uac=Uab=Ubc的道理就可以了。 20 :扼流圈的理解:电感是阻交流,通直流信号的,这点基本和电容相反的。 低频扼流圈 是抑制交流通直流的 高频俄流圈是 抑制高频通低频和直流的。 21:放大电路有直流耦合和交流耦合 ,区别自知! 22:变压器砸数的基本公式 N=V的4次方/4.44fBmS ,公式推导都在学习资料里。方波把4.44改成4。 开关电源的变压器设计,体积计算公式为 Vcore=4ueP/fBm*Bm ue为有效导磁率,P为传输功率 f为开关频率,Bm为最大磁通密度(T) Bm热轧硅钢片,1.11-1.5t 而冷的1.5-1.7t,应该现在有铁硅铝这种更加好的 东西了。 高频用的铁粉芯mpp 大概是0.3t 具体见学习资料里的东西。 23:三极管b和hef的关系,b是交流放大倍数,hef是直流放大倍数,b和频率相关的 。所以两者是有区别的哦 24:负载重轻对应与电阻的小大,但对恒流源就不一样了,电阻大的话输出功率就大。负载就重点! 25:网络线水晶头的制作。直通线的标准是586B,交叉线的标准是一头586A另一头586B。,其中1236四根线是有用的,其他线为电话线留的。 1 输出数据+,2输出数据- 3输入数据+ 6输入数据- 4578都是电话线用 26:感性负载:即和电源相比当负载电流滞后负载电压一个相位差时负载为感性(如负载为电动机、变压器)。 容性负载:即和电源相比当负载电流超前负载电压一个相位差时负载为容性(如负载为补偿电容)。 阻性负载:即和电源相比当负载电流负载电压没有相位差时负载为阻性(如负载为白帜灯、电炉)。混联电路中容抗比感抗大,电路呈容性反之为感性。 用公式的话,电容电感串联的时候X=j(wL-1/wc)若X>0 既w大于w0(谐振频率)就是感性了,反之容性。并联的时候用导纳来计算Y=j(wc-i/wL),若Y>0,w大于w0 就是X小于0,容性,反之感性。 27:空调线16a 普通10a,1平方毫米4a,一般线为2.5平方。 28:上网 猫连到路由器,(一般路由器都带交换机或者hub的功能)再可以连到交换机,或者hub。hub需要使用双网卡才可以共享上网。 29:电源滤波电容充电,根据公式u=q/c,当q满的时候表示充电完成,具体计算要用什么不定积分 首先设电容器极板在t时刻的电荷量为q,极板间的电压为u.,根据回路电压方程可得:U-u=IR(I表示电流),又因为u=q/C,I=dq/dt(这儿的d表示微分哦),代入后得到U-q/C=R*dq/dt,也就是Rdq/(U-q/C)=dt,然后两边求不定积分,并利用初始条件:t=0,q=0就得到q=CU【1-e^ -t/(RC)】这就是电容器极板上的电荷随时间t的变化关系函数。顺便指出,电工学上常把RC称为时间常数。相应地,利用u=q/C,立即得到极板电压随时间变化的函数,u=U【1-e^ -t/(RC)】。从得到的公式看,只有当时间t趋向无穷大时,极板上的电荷和电压才达到稳定,充电才算结束。但在实际问题中,由于1-e ^-t/(RC)很快趋向1,故经过很短的一段时间后,电容器极板间电荷和电压的变化已经微乎其微,即使我们用灵敏度很高的电学仪器也察觉不出来q和u在微小地变化,所以这时可以认为已达到平衡,充电结束。举个实际例子吧,假定U=10伏,C=1皮法,R=100欧,利用我们推导的公式可以算出,经过t=4.6*10^(-10)秒后,极板电压已经达到了9.9伏。 一般当t=rc时,电容放电到0.36u,或者充电到0.64u。 30:78.79系列的管脚排列是132,电压降的次序排列的,2永远是输出。 31:如果要7824稳压,前面需要28v的直流信号,28/1.2=23.3的交流电压,这些是经验。 32:对电源或者放大器的要求 ,一般输出电阻小,带载能力就好。内阻小! 33:lm3886.gif看电子图里的文件,说明:左上22u电容,是使电路的直流工作状态采用100%的负反馈。即直流增益为1,工作点十分稳定,而且可以跟踪电源电压的变化。 直流信号相当于电压跟随器一样跟过去了。 47p电容 18k,电阻,起相位调节作用(pid 比例 积分 微分控制)。这里信号的频率的改变就改变增益的大小,频率越低,47p电容阻抗就越大,增益仍为18倍,但对高频信号就要有一个计算了,对高频信号有衰减作用。 2.2欧姆,100nf是高频噪声旁路,改善输出。 220p估计为高频信号到2.2欧姆电阻那边去铺一条路。 0.7uh电感对低频信号没什么用,完全可以拿去。输入的隔直电容建议用无极性的。 分析这种运放电路,首先应该明白这是哪中电路类型,是交流同相还是直流反向。 34:课题如何做的思路: 了解背景;列出技术指标;进行系统分块,预计多少时间,同时列出所要求的仪器,提出难点;做硬件框图;进行软件设计;制作电路板调试,最后进行成品测试。 35:万用表尤其是电流档测量电流是,如果电池不足,会引起波形失真。 36:用割线法查pcb的短路问题,逐步缩小范围。 37:仪器放大器,测量浮动信号的时候,输入和输出信号之间必须有地是相联系的,如果没有电气联系,共模电压是浮动的,会产生很多干扰,比如直流信号放大会出来一个方波,当然和电源的频率一致。图仪表放大器ad620.jpg。可以看下,同时在21ic上有这个问题的详细讨论过程。如果输入出不电气联系,至少要在2,3脚对运放自己的地加1u左右的电容,来消除两个地之间的电压,也就是解决共模电压带来的影响。一般输入输出的地是相联的,ad620的资料上都是连的。 共模信号的产生是由于变压器初次级之间有分布电容,而这个电容比运放地对信号地的电容大很多,所以两个地是不等电位的,最大会产生220v的交流电压,可以用数字万用表的交流档测量出来,这个图上产生了10v的浮动共模电压。而在2,3脚对地接1uf电容,使运放地对信号输入地的电容大大增加,220v的电压就过不来了,基本上两个地是等电位的。或许仍有少许偏差吧。 38:protel的部分使用方法: 解决局域网不能使用的问题,很简单,只要让dxp不访问网络就可以了 在网络连接的属性——高级——设置——例外里面把dxp设置成不可访问网络。当然要开启防火墙。打开的时候对dxp保持阻止其访问网络 改方法可以用在很多地方,比如禁止某些软件自动升级什么的 铺铜上,为了适合99,用ad6.3的时候需要选择mode,为hatched,不可以选择solid 对齐 ega,定坐标eos,测量rm 单位变换vu,dr设计规则,tp在线drc去掉,(优先选项) pt交互线,pl普通线,dl+回车,打开层,99是dr,shift+s是每层单独看,可以用+-号,来改变层,shift+c 在群改的时候经常要用这个来取消选择。否则会不能点到任何东西的。do 设置板子,可视网络0.508 25.4mm,元件网格 最小,电气网络0.2mm就可以了,这个比较重要,布线的时候就可以定线的位置了。 PCB里由于封装的原因,SCH图的VALUE值不会自动导到PCB那里去,必须在COMMENT拦打入命令“=value” 即可导过去。挖哈哈 多么重要啊 特别对生产人员来说 。一个非常重要的东西,那就是根据pcb来生成库文件.ad6.3在设计菜单里,选择生成pcb库.在99里也可以实现的. 另外AD6.3有交叉选择模式 在工具菜单里,这样方便选择元器件. pcb画好后 应该写日期 铺铜时应该注意哪些地方不能铺,然后加上限制, 铺完后应该去掉那些限制。。。。 画pcb时候应该留出检测点。 DXP 中快捷键do(文档选项)颜色选择为214,对眼睛比较好 焊接的时候请使用如下方法,首先必须配格子很多的器具来装贴片电阻,电容等。这样方便查找。 把相同值的东西放在一起,比如104的电阻和电容。并注明封装。 其次,焊接的时候,打开pcb,点右下脚的pcb,弹出来的菜单里还有个pcb选择项,选中就出来一个窗口了 ,在那个窗口中,有下拉菜单,默认的是nets点,选择components,这里你选择里面的元件就会直接跳到 那个元件去。方便焊接查找。 再次,先焊贴片芯片,再按次序来焊接贴片电阻电容,可以根据components中的选择方式来排列, 相同的值就一起焊掉。然后焊接其他的东西。 40: protel画好之后需要注解日期,以及版本号。 41:普通的电位器,把1,2脚相连顺时针旋转的话可以使1,3脚电阻减少,逆时针电阻增加。 42:用汇编语言编写程序的话,头文件需要自己加进去的吧,如果用c编程的话,再变成的时候头文件是自己写的 比如#include ,而汇编比如加文件startup.a51 43 在线仿真器的功能就是代替目标板上的mcu,这样就不需要真完用写到真实的mcu单片机上。明白了吧 44:protel 元件清单导出方法 快捷rri 然后导出就可以成为xls文件 可以用execl打开了 哈哈。 45 液晶显示模块,比如160*128对于16*16汉字点阵来说就是10列8行。 46:万用表直流挡测量的电流是平均值,而交流档测量的是有效值。 47:自激震荡寄生振荡的区别需要弄清! 48:单片机学习经验 使用c语言要用到c编译器,将c程序编译成机器码。 keil51使用方法 new project 命名为 test.uv2 选择单片机 at89c51 新建程序,c为test.c 汇编为.a或.asm 将c程序加到项目中,点source group 编译可以点target生成 hex文件 进入调试模式,按d那个按钮,d带个圆圈的那个东西 运行程序 按停止后,再按那个d,关闭调试模式。 要用c或者汇编对硬件结构必须很了解,尤其是汇编。 89c51的最小系统应该包括,晶振电路,复位电路,led显示。 c语言是区分大小写的 将目标程序代码写到单片机要用到编程器,或者使用仿真器代替mcu使用也可以的。 在51单片机中与外部存储器ram打交道的只可以是A累加器,所以对外部ram的数据操作都通过A送去,另外,内部ram间可以直接进行数据的交换,而外部不行,如外部0100H的数据送入0200H单元,必须通过累加器A来实现。且要读或写外部的ram,当然也必须要知道ram的地址。在后两条指令中,地址是被直接放在DPTR中的,使用时应当首先将要读或者写的地址送入DPTR或Ri中,然后再用读写命令。 50: 解剖电路板的方法:一定要先把元件一个个的排列在sch图中,象画pcb那样把线路连接就可以了,然后慢慢分析电路中的各个芯片。 51:过小的信号尽量不要使用开关电源来处理,如10A恒流源通过0.001欧姆电阻。 51:50hz的工频率信号可以用带阻滤波器来解决拉。(效果未必好) 52:开关电源的几个主要指标 电流调整率:也叫电压稳定性 表示电流从零到最大时,输出电压的相对变化量。 电压调整率:负载不变下,输入电压变化,输出电压相对变化量。也称为输入电压允许变化的范围。 纹波电压 电源效率 温度特性 53.电磁感应中的磁饱和的现象:绕组中的铁芯的磁通量是有一定数量的,并不随着电流的增长而无限增长,当电流大与一定值时,磁通量就不再变化达到磁饱和,就不能产生自感电压,就失去了反抗外加电压的能力,也就是说没有了感抗,有就是没有了电感量L。基本是趋近于零。 54:三极管的饱和:当Ib增加到一定程度后,且Vce较小的情况下,如0.3v,那么继续增加Ib,Ic的就基本不变了。这就是三极管的饱和工作状态。会饱和是因为c极有内阻,或者串联了电阻,或者电源电压不够高都会引起,如果电压够高,电阻大一点也不会饱和的。 55.所谓的精度0.1及就表示0.1%,后面加个%就是了。 56:电容的储能状态是电容开路电压不变,电流为零,能量为1/2(CU*U) 电感的储能状态电感短路,电流不变,电压为零,能量公式为1/2(LI*I) 57:共模电压,差模电压的理解 比如反向比例运算电路,如果输入信号是+/-3v对地交流信号,输入信号在任何时候Up都是等于Un的且等于0(同相接地),而不是说运放两端要承受3v的差模电压。注意差模电压是指云放的+和-之间的电压。而输入信号的幅度大小只要不超过电源电压就可以了,和运放的差模电压根本没关系,这个只有在比较器的时候才体现出来,两端接不同电压,开环放大倍数很大,输出不是正电源电压就是负电源电压。 58:什么是励磁电流,可以简单的理解为次级空载,流过初级的电流,所以初级的电感量要大,这样励磁损耗才会小的。对交流来说电感越大,感抗越大,就象电阻越大一样的概念。 59:射极放大器如何不失真呢? 主要取决于RC,RB1,RB2,VCC,还有要加个Re,起负反馈作用,稳定工作点。 IB要有一定的电流值,IC才能在其控制上起明显作用 最关键的是,输入信号不能太大,太大必然要引起失真, 相反,如果信号够小,即使静态工作点不在负载线中心点,也不会失真, 如输入信号幅度很小,即使工作点较高或较低也不一定会出现失真。所以确切地说,产生波形失真是信号幅度与静态工作点设置配合不当所致。如需满足较大信号幅度的要求,静态工作点最好尽量靠近交流负载线的中点。 静态工作点是否合适,对放大器的性能和输出波形都有很大影响。如工作点偏高,放大器在加入交流信号以后易产生饱和失真,此时uO的负半周将被削底;如工作点偏低则易产生截止失真,即uO的正半周被缩顶(一般截止失真不如饱和失真明显)。这些情况都不符合不失真放大的要求。所以在选定工作点以后还必须进行动态调试,即在放大器的输入端加入一定的输入电压ui,检查输出电压uO的大小和波形是否满足要求。如不满足,则应调节静态工作点的位置。 当流过偏置电阻RB1和RB2 的电流远大于晶体管T的基极电流IB时(一般5~10倍),方可根据负载电流来计算出RB1,RB2 60:rail to rail 运放和普通运放的区别在与它们的输出口不一样 前者是c极后者d极输出,而后者是射极输出或者源极输出 61:电容对电阻的放电 或者电源E对C的充电都是直流电的概念,不要和RC振荡电路搞在一起,RC振荡电路的谐振频率就是f=1/2piRC 62:为什么要高输入阻抗 低输出阻抗呢? 可能的一个原因就是高输入阻抗,对输入的信号而言负载就很轻,不影响其波形,(相当于让输入信号成为理想的电流源)而低输出阻抗就可以带比较重的负载(相当于让运放本身成为理想的电压源)。这样就比较符合实际情况,信号要好,带载能力很强。 63:磁场中感应电动势与磁通量的变化量有关,也就是和磁场强度B和回路运动的v有关,都是矢量,有方向的。 而安培定律有云,通有电流的长直导线周围所建立的磁场强度B与导线上的电流成正比,和导线的距离的三次方成反比。 安培力公式F=Bvq=BIL=BLq/t,I=q/t 64:无论是积分电路还是微分电路,都应该满足RC< 积分电路,为了防止低频信号增益过大,都在反馈电容上并联电阻(比如30k,对5k信号来说)。 而微分电路则要在输入电容端串联100欧姆电阻限制电流,并在反馈电阻R上并联两个对k极接的稳压二极管,和一个小电容用来补偿相位,使电路不振荡,提高稳定性。 65:电感励磁就是积聚能量,电感消磁就是释放能量。 66:电感值是不会变的,但是感抗是会根据信号频率改变的 电容值是不会变的,但是容抗是会根据信号频率改变的 67:电容公式,电感公式 V=(di/dt)*L I=(du/dt)*C 68:电感断路和电容短路 由于电感有阻止电流变化的特性 那么在电感断开的时候,由于电感要保持电流不变 但是由于回路阻抗大大增加,根据欧姆定律 U=IR,或者U=IZ,可见,电感产生的电压将非常的大, 虽然电感也存在分布电容,但是分布电容很小 那么阻抗将非常的大,所以,瞬间产生的高压是很高的。 如果电感瞬间产生的能量来不及由自身的分布电容来释放 那么它将向空气释放,和空气构成回路,空气的电阻很大 那么将产生很大的高压,产生火花,甚至爆炸。 电能转化给热能和光能。 电感的断路其实和电容的短路是一样的道理 电容断路产生很大的电流,而电容有保持电压不变的特性 电流那么大 电压又不变,瞬间产生的功率非常大,那么由于 电容本身含一定的电阻,就会导致电容过热烧掉,甚至爆炸。 69:电机的电流是随着转速而变化的;当过负荷时,电机转速降低,电流就要大于额定电流,时间长了,电机过热引发绝缘击穿而烧毁。 电机不是纯电阻负载,电机对外反映出来的是阻抗既感抗;电机的感抗不是固定的,随着转速的不同,转子内感生电流不同,对外反映出来的感抗就不同。 电机就是电机,不是电阻,不在额定电压下是不能工作的,不能用简单的欧姆定率来计算它。 解释和自我理解:过负荷时就表示电机的扭矩已经不够了,无法工作在最佳效率点,扭矩不够会造成电机的感抗下降,那么电流就会比正常时大,同时扭矩不够造成电机转不动(比如用钳子钳住就转不动了),转数下降。 而根据公式 9550*P=T*n,相对降低电机的额定转速或者加大点功率(指得是输入的有功功率*效率=P,也就是负载功率,指得是电机的机械输出功率),电机的钮矩就会适合原来过负载的情况。

    时间:2018-05-02 关键词: 模拟电路

  • QQ怎么运行起来的?CPU、内存、硬盘和主板的关系

     如果你的电脑上安装了QQ,你希望和好友聊天,会双击QQ图标,打开QQ软件,输入账号和密码,然后登录就可以了。 那么,QQ是怎么运行起来的呢? 首先,有一点你要明确,你安装的QQ软件是保存在硬盘中的。 双击QQ图标,操作系统就会知道你要运行这个软件,它会在硬盘中找到你安装的QQ软件,将数据(安装的软件本质上就是很多数据的集合)复制到内存。对!就是复制到内存!QQ不是在硬盘中运行的,而是在内存中运行的。 为什么呢?因为内存的读写速度比硬盘快很多。 对于读写速度,内存 > 固态硬盘 > 机械硬盘。机械硬盘是靠电机带动盘片转动来读写数据的,而内存条通过电路来读写数据,电机的转速肯定没有电的传输速度(几乎是光速)快。虽然固态硬盘也是通过电路来读写数据,但是因为与内存的控制方式不一样,速度也不及内存。 所以,不管是运行QQ还是编辑Word文档,都是先将硬盘上的数据复制到内存,才能让CPU来处理,这个过程就叫作载入内存(Load into Memory)。完成这个过程需要一个特殊的程序(软件),这个程序就叫做加载器(Loader)。 CPU直接与内存打交道,它会读取内存中的数据进行处理,并将结果保存到内存。如果需要保存到硬盘,才会将内存中的数据复制到硬盘。 例如,打开Word文档,输入一些文字,虽然我们看到的不一样了,但是硬盘中的文档没有改变,新增的文字暂时保存到了内存,Ctrl+S才会保存到硬盘。因为内存断电后会丢失数据,所以如果你编辑完Word文档忘记保存就关机了,那么你将永远无法找回这些内容。 虚拟内存 如果我们运行的程序较多,占用的空间就会超过内存(内存条)容量。例如计算机的内存容量为2G,却运行着10个程序,这10个程序共占用3G的空间,也就意味着需要从硬盘复制 3G 的数据到内存,这显然是不可能的。 操作系统(Operating System,简称 OS)为我们解决了这个问题:当程序运行需要的空间大于内存容量时,会将内存中暂时不用的数据再写回硬盘;需要这些数据时再从硬盘中读取,并将另外一部分不用的数据写入硬盘。这样,硬盘中就会有一部分空间用来存放内存中暂时不用的数据。这一部分空间就叫做虚拟内存(Virtual Memory)。 3G - 2G = 1G,上面的情况需要在硬盘上分配 1G 的虚拟内存。 硬盘的读写速度比内存慢很多,反复交换数据会消耗很多时间,所以如果你的内存太小,会严重影响计算机的运行速度,甚至会出现”卡死“现象,即使CPU强劲,也不会有大的改观。如果经济条件允许,建议将内存升级为 4G,在 win7、win8 下运行软件就会比较流畅了。 总结:CPU直接从内存中读取数据,处理完成后将结果再写入内存。 图1:CPU、内存、硬盘和主板的关系

    时间:2018-05-02 关键词: CPU 内存 硬盘

  • MCS-51单片机的存储器组织结构

    特点:哈佛结构,程序存储器与数据存储器分开,两者各有一个相互独立的64K(0x0000 ~ 0xFFFF)的寻址空间(准确地说,内部数据存储器与外部数据存储器不是一回事)。 程序存储器: ① 用于存放程序(可执行的二进制代码映像文件,包括程序中的数据信息),还包括初始化代码等固件。 ② 为只读存储器。注意,这里的“只读”,是指单片机(CPU)在正常工作时对其的访问方式是只读的;而现在大多数单片机的程序存储器(不管是内部还是外部)都采用了FLASH ROM,来取代以前所用的ROM、E2PROM等,可方便地进行在线编程(ISP)。 ③ 标准8051的内部程序存储器大小为4KB(0x0000 ~ 0x0FFF);而具体的51核的兼容单片机的内部ROM大小需要参考其Datasheet,例如P89C51RA2xx的内部程序存储器是8K的Flash。 ④ 内部、外部存储器统一编址,在软件设计上(指令系统中)没有差别;是否使用外部程序存储器是通过引脚EA在硬件电路上控制的:不使用外部程序存储器时,EA=0(接地);如果扩展了外部程序存储器,则使EA=1,当寻址到内部存储空间以外时,会自动转向外部程序存储器空间(与扩展外部程序存储器有关的还有PSEN和ALE的时序配合,以及P0和P2口用于地址线)。 [注] 一般直接选用内部程序存储器满足代码大小要求的单片机型号,避免扩展外部存储器,造成系统软硬件设计上的复杂和额外开销。 数据存储器: 为RAM。首先必须要强调的是,不管是物理上还是逻辑上,51单片机的内部、外部数据存储器都在不同的地址空间。两者不是一回事,用途也不一样,访问的指令也不同(内部RAM为MOV指令,外部为MOVX)。 1、内部数据存储器(内部RAM) 相当于内存,为程序(进程)中的变量和常量分配存储空间,掉电后内容消失。 标准8051的内部RAM为256B(0x00 ~ 0xFF):其中可供用户自由使用的是低128B(0x00 ~ 0x7F)区域,高128B中定义了26B的特殊功能寄存器(SFR),其余没有定义,因而没有意义。 P89C51RA2xx的片内RAM是512B(片内RAM不等于内部RAM,见释疑2)。 [说明] 关于内部RAM中的SFR,其中不但定义了一些控制字段,还包括累加器(ACC)、程序状态字(PSW)、数据指针(DPTR)、堆栈指针(SP)等,值得注意的是,片上I/O口P0 ~ P3的地址也在这里定义(即有3个特殊功能寄存器的地址实际上是P口的地址)——这是因为51单片机的I/O口与存储器是统一编址的*。 2、外部数据存储器(外部RAM) 上面谈到“I/O口与存储器统一编址”的问题,因此,这里称作外部RAM空间更为合适。在这个64KB地址空间中(0x0000 ~ 0xFFFF),除了可以扩展外部RAM外,还可以扩展外部I/O设备。 外部RAM主要用于存储程序运行时产生的重要数据(如数据采集结果、数据处理结果、系统日志等),这时一般需要外加电源进行掉电保护,以在系统掉电时保存其中的数据信息;也可用于数据的暂时存储,供CPU正常读写操作使用。因此外部RAM主要是使用其“可随机访问、读写方便且高速”的特性。 * 所谓I/O口与存储器统一编址,是指I/O口与主存在同一地址空间,将处理器的可寻址存储空间中专门划出一部分地址空间分配给I/O口使用。这与PC机的x86处理器不同,x86体系结构为I/O口专门定义了独立于存储空间之外的地址空间(事实上,除X86外,其他体系结构的处理器都对I/O口与存储器统一编址,可参考《Linux Device Drivers》)。 释疑1:51只有16根地址线,为什么能同时将程序存储器和外部数据存储器都扩展到64KB呢?即外部即有ROM,又有RAM,如何知道访问的是哪个? 在体系结构上,程序存储器和数据存储器是不同的地址空间,两者的访问是不会相互干扰的,这主要是通过在硬件和指令集设计上来实现的。 在硬件上,访问外部ROM是通过EA和PSEN引脚来控制的;访问外部RAM则是通过WR和RD信号来控制的; 在指令集上,访问外部ROM不需要使用显示指令,是通过PC(指令计数器)来控制取指地址的(跳转指令也可能引起PC跳转);而访问外部RAM则需要在程序设计上使用指令MOVX来执行。另外,访问内部RAM则使用了指令MOV,以区分外部RAM的访问。 释疑2:P89C51RA2xx的片内RAM是512B,是如何组织的? P89C51RA2xx的片内RAM是512B:其中内部RAM为256B(使用MOV指令访问,定义与标准51相同);另外的256B为XRAM(片内的外部数据存储器),属于外部存储器的范畴,因此用途也同外部RAM,使用MOVX指令访问,当程序中的全局变量或单个局部变量需占较大存储空间时,可以定义为xdata型,保存到XRAM区。注意这个片内的XRAM掉电后其数据也会丢失;另外,如果要扩展外部RAM,则一般是设置XRAM为禁用态。

    时间:2018-05-02 关键词: 存储器 51单片机

  • 51单片机存储器小结

     存储器分为程序存储器(ROM)和数据存储器(RAM),两种又都可以分为片内和片外,片外即需要自己在单片机外部扩展。 8051单片机的片内程序存储器有4K,片内数据存储器有256个字节,其中又分为高128字节位特殊功能寄存器区,真正用户能用的RAM只有低128字节。 8052单片机有8K片内程序存储器,而数据存储器除了低128字节外还有扩展的高128字节,地址上跟特殊功能寄存器一样,但物理上是独立的,寻址方式不一样,扩展的高128字节只能间接寻址。 Keil中变量的存储类型: 存储类型 说明 code 程序空间(无需改变的变量) data 直接访问的内部数据存储器(速度最快) idata 间接访问的内部数据存储器(可以访问全部256字节RAM) bdata 可位寻址的内部数据存储器 xdata 外部数据寄存器(最大64K) pdata 分页的外部数据寄存器(最大256字节,少用) 【如无使用关键字,系统则按默认处理(根据存储模式)】 Keil中的存储模式: 存储模式 说明 Small 变量默认为data型,最大128字节 Compare 变量默认为pdata型,最大256字节 Large 变量默认为xdata型,最大64K Keil中设置如下图: 我们平常使用的STC单片机,有很多型号,具体存储器大小都要看型号: 【89/90系列的机器周期需要12个或6个时钟周期】 【12/15系列的机器周期只需要1个时钟周期】 51单片机上的FFT算法 最近用增强型51单片机做了一个简易的点阵音乐频谱显示器,最主要是自己刚学完信号处理课程,想自己写一个FFT算法。现将已经能够在51单片机上运行的FFT算法供需要的伙伴们参考。 在51单片机上运行FFT算法,需要注意一下几点: 由于51单片机的内存RAM很小,只有128字节,52有256字节,而16点的浮点数输入,就需要2*4*16=128字节的内存开销,所以只有256字节的做多只能做16点的FFT运算。而且必须要用idata定义才能将其定义在高128字节。所以要做16点以上的FFT运算,必须选用有内部扩展RAM的51系列单片机,然后用xdata定义,并且要将存储模式设为LARGE模式。

    时间:2018-05-02 关键词: 存储器 51单片机

  • 51单片机的仿真栈(模拟栈/可重入栈)

    51单片机的仿真栈(又叫模拟栈、或者可重入栈)。 首先来看,51的系统栈(又叫系统栈,或者硬件栈),就是SP所指向的栈,他是一个满增栈(注释1),位于片内RAM的128 bytes之中,上电之后系统堆栈指针SP的初值等于多少呢?这个要从51的启动文件来分析,启动文件中有这样的汇编代码: ?STACK SEGMENT IDATA ;定义一个片内数据段,段名:?STACK RSEG ?STACK ;选择之前定义过的一个可重定位的段?STACK,下面的汇编语句将会被放置到该段,直到遇到下一个段定位指令,例如CSEG/RSEG。 DS 1 ;预留存储区命令。声明先占用一个字节的空间,在编译时,这个预留的空间不会被其他变量所使用。在这里的意义是,给硬件栈分配1个byte(实际这样是有问题的,应该为硬件栈预留更多空间) 还有: MOV SP,#?STACK-1 由上可见,SP被初始化为#?STACK-1,在#?STACK地址处,DS指令预留了N个字节的空间,这些空间就是硬件栈的空间 但启动文件的代码中,DS 1相当于只给硬件栈预留了1个字节,这实际上会出问题,原因如下:片内RAM中会有多个数据段,只要使用XX SEGMENT IDATA指令即可在片内RAM中声明一个数据段XX,如果整个工程程序中,声明了多个数据段,?STACK数据段就只是片内RAM中众多数据段中的一个,如果只给?STACK段预留1个字节,而?STACK数据段后面又有别的数据段,那么我们的硬件栈就只有1个字节了,一旦发生中断,CPU寄存器自动入栈立即导致栈溢出,溢出后踩了别的变量的内存,程序基本崩溃;对于这个问题,keil是这样处理的:keil在链接阶段总是把?STACK数据段链接为片内RAM中的最后一个数据段,即使我们只给他预留了1个字节,那也不要紧,反正该段后面没有别的变量占用,只要SP别超出0X7F(片内RAM地址的上限)就行了。通过观察.m51(map文件)我们发现,keil确实是把?STACK数据段放到了片内RAM的最后,下面是某个51工程生成的map文件摘抄: * * * * * * * D A T A M E M O R Y * * * * * * * REG 0000H 0008H ABSOLUTE "REG BANK 0" DATA 0008H 0002H UNIT ?C?LIB_DATA IDATA 000AH 000DH UNIT ?ID?UCOS_II 0017H 0009H *** GAP *** BIT 0020H.0 0000H.1 UNIT ?BI?SERIAL 0020H.1 0000H.7 *** GAP *** IDATA 0021H 0041H UNIT ?STACK ; 作者注:就是这一行! * * * * * * * X D A T A M E M O R Y * * * * * * * XDATA 0000H 080EH UNIT ?XD?SERIAL XDATA 080EH 0804H UNIT ?XD?MAIN XDATA 1012H 0490H UNIT ?XD?UCOS_II XDATA 14A2H 005CH UNIT _XDATA_GROUP_ 为避免系统栈不够用,一个比较稳妥的办法就是,用汇编指令DS给?STACK数据段预留更多的空间,上面这个51工程中在另一个汇编文件中又给?STACK数据留出了40H个字节,这样总共就有41H个字节了。这样做的好处是可以在编译链接阶段即可排查堆栈错误,举个例子: 假设片内RAM中的数据段有很多,以至于,除了?STACK数据段之外,片内RAM只剩2个字节了,而?STACK数据段我们只默认采用了启动文件中的配置预留一个字节,这样编译没有任何问题,keil给编译通过了,但是运行过程中系统栈只有2个字节,肯定是分分钟就发生栈溢出,然后崩溃;假设片内RAM中的数据段有很多,以至于,除了?STACK数据段之外,片内RAM只剩2个字节了,而如果我们给?STACK数据段用DS指令分配40H个字节,这样keil在编译时就会发现51的片内RAM不足而报错,无法编译,从而在编译链接阶段帮助我们发现堆栈问题。 继续上面的问题,SP复位后的初值是多少,SP复位后等于0X07,但是立即就被启动文件通过语句MOV SP,#?STACK-1给改掉了,所以在进入main函数时SP的值是启动文件修改后的值,也即#?STACK-1(注,很好理解,这里-1是满增栈的特性),那么#?STACK的值又是多少呢?看上面的汇编语句?STACK SEGMENT IDATA,这一句声明?STACK段为一个可重定位的段,也就是说,?STACK段的首地址(#?STACK)在编译器进行程序链接时才能确定下来,也就是说,#?STACK的值是在链接时由编译器自动分配的,编译阶段不分配。仍然以上面摘抄的这段map文件为例,我们发现,?STACK段的起始地址是0021H,也就是说,#?STACK就等于21H。 仿真栈是keil为51生成可重入函数时用的(通过给函数使用关键词 REENTRANT限定,可使该函数具备可重入特性),对于STM32来说,默认生成的函数(不含全局变量和静态局部变量的函数)就是可重入的,而keil为51生成的函数,即使这个函数不含全局变量和静态局部变量,默认情况下keil也不会把这个函数汇编成可重入的,我认为keil主要是考虑到51的片内RAM匮乏,在不外接RAM的情况下,函数如果被编译为可重入的,可重入函数的执行需要占用一定的栈空间(尤其是由可重入函数嵌套调用产生的长的调用链,所需的栈更多)。 可重入函数在执行过程中是需要使用栈的,那么51的可重入函数使用的栈在哪呢?是SP指向的那个系统栈吗?答案是:不是。下面是解释: 当我们给51外扩了大的片外RAM时,就不用担心RAM不够的问题了,但是还有一个问题,系统栈指针SP只能寻址0~7FH共128字节的空间,可重入函数肯定不允许被编译成使用系统栈,否则,就算外扩了RAM,这个外扩RAM又无法供系统栈来使用,外扩RAM就没有意义了,所以keil为51打造了一个仿真栈的概念,keil在启动文件中声明了一个1或2字节的变量作为栈指针,这个栈指针的名字和大小根据编译模式的不同而不同,以大编译模式(注释2)为例,大编译模式下,启动文件中的XBPSTACK常量需要程序员手动设置为1,这样启动文件中使用到的条件编译,将会引用到一个2字节的仿真栈指针?C_XBP,由于keil把仿真栈作为满减栈,所以这个仿真栈指针?C_XBP被初始化为片外RAM地址的最大值加1,若我们外接了一个64K的片外RAM,该RAM的最大地址是0XFFFF,那么栈指针?C_XBP被初始化为0XFFFF+1=溢出为0x0000。再举一个小编译模式的例子,小编译模式是用来给没有外扩RAM的51用的,这样51只能使用片内0~127共128字节的RAM(这128RAN中还有一部分是Rn等,留给程序可用的RAM就更少了),在小编译模式下,keil给51生成的仿真栈指针名叫?C_IBP,同时需要程序员手动把IBPSTACK常量设置为1,指针?C_IBP的初值被初始化为可用RAM的最大地址(127)加1,也即0x7f+1。关于小编译模式small、压缩编译模式compact、大编译模式large在堆栈处理上方面的不同,可参考这篇文章点击打开链接,如果链接挂了,可自行搜索:《Keil模式设置和编程事项》。 注释1:满增栈,满指的是SP总是指向最后一个入栈的字节的地址,增指的是每入栈一次,SP变大。相应的,还有空增栈、空减栈、满减栈,空指的是SP总是指向栈中下一个空闲位置的地址。 注释2:如何选择大编译模式:以keil5为例,依次选择->魔术棒->Target选项卡,Memory Model选择Large:var...,Code Rom Size选择Large.... 附:举一个不可重入函数使用中可能发生的陷阱,假设有分别有如下两个函数,第一个可重入,第二个不可重入 int add5_re(char a1,char a2,char a3,char a4,char a5) REENTRANT { int sum; sum=a1+a2+a3+a4+a5; return sum; } int add5(char a1,char a2,char a3,char a4,char a5) { int sum; sum=a1+a2+a3+a4+a5; return sum; } 这两个函数的形参以及局部变量分配等信息我们查阅.m51文件,分别如下(分号后面的注释是博主自己加上的): [plain] view plain copy------- PROC _?ADD5_RE x:0002H SYMBOL a1 ;注意,地址标号前为小x,指a1倍分配到了仿真栈中 x:0003H SYMBOL a2 x:0004H SYMBOL a3 x:0005H SYMBOL a4 x:0006H SYMBOL a5 ------- DO x:0000H SYMBOL sum ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ------- PROC _ADD5 D:0007H SYMBOL a1 ;R7 D:0005H SYMBOL a2 ;R5 D:0003H SYMBOL a3 ;R3 X:14ABH SYMBOL a4 ;注意地址标号前为大X,指外部RAM X:14ACH SYMBOL a5 ------- DO D:0006H SYMBOL sum ;R6 我们发现,add5中的形参和局部变量a1/a2/a3/sum分到了Rn中,a4/A5分到了外部RAM xdata的绝对地址处,如果我们在main的调用链中和中断函数中都调用了add5这个函数,就会发生错误,假设恰好在main的调用链中执行add5时发生了中断,切换到中断函数中去执行add5,那么main调用链中的a1/a2/a3/sum因为被分到了Rn中,进入中断会切换register BANK,使得main调用链中的a1/a2/a3/sum没有被破坏,得以幸免,但是a4/a5因为被分配到了绝对地址中,在中断执行完add5以后,main链条中的add5的a4/a5肯定会被破坏!! 对于可重入的add5_re函数,即使main调用链和中断同时调用它也不会出现上述被破坏的情形,因为add5_re的形参和局部变量全部都被定义到了仿真栈中(见上述代码注释),main调用链中使用add5_re函数会申请栈空间,中断时add5_re又会申请新的栈空间。 还要注意的是,因为keil编译51程序时,使用了覆盖技术(不同函数的形参和局部变量可分时共享同一个绝对内存单元),这也有可能产生陷阱,假设这样一种情况:有一个函数func2( )的局部变量b在编译后被分配到了绝对xdata的地址14ABH处,和上文的add5的a4变量共享内存,这种情况下,即使 { func2( )仅在中断中被调用,main调用链中不调用func2( )}、且{ add5仅在main调用链中被调用,中断中不调用add5 },也会出问题,原因是显而易见的,如果在add5执行过程中发生中断,中断中使用过变量b之后,会破坏add5中的变量a4。究其原因在于,共享地址的编译方式生成的函数,只要分时调用就不会产生被破坏的情形,但是发生中断导致了分时机制被破坏,以至于产生了同时调用。 结论:中断中使用的函数,要么是可重入的,要么是该函数的局部变量全部是独享内存单元的。

    时间:2018-05-02 关键词: 单片机 堆栈

  • 51单片机stack堆栈

     一般编译器的堆栈用于保存局部变量、函数的参数、函数的返回值、中断上下文信息等。但Keil对局部变量、函数参数预先分配空间(放在静态全局变量区),Keil的堆栈只是用于保存函数嵌套调用的PC、中断上下文信息。 从主程序进入中断需要入栈字节数:13+PC=15 Byte(ACC,PSW,B,DPH,DPL,R0~R7) Keil支持2级中断15×2=30 Byte。 主程序中每级调用需要消耗2字节保存PC,如调用深度6级,需要6×2=12字节堆栈空间。 Keil51 编译后会生成M51文件,查找?Stack地址,为堆栈起始地址,向上增长到0xff,溢出则导致单片机复位。

    时间:2018-05-02 关键词: 堆栈 51单片机

  • 高手分享一些对单片机的经验理解

     单片机,single chip microcomputer,单芯片微型计算机。总体来说,他就是一个芯片。但是他是一个特殊的芯片,因为他不是实现单独的逻辑功能。他是将一个整体的计算机系统集成到这个芯片上。这个计算机系统包括运算器,控制器,存储器,输入设备和输出设备。 其实单片机的学习,和计算机的学习差别不是太大。包括运算器,控制器,存储器,以及输入输出设备的学习。 运算器 运算器由运算部件--算术逻辑单元(alu)、累加器、计算器等部件组成。 控制器 学习的难点在于涉及到指令方面的操作。控制器由程序计数器,指令寄存器,指令译码器,时序发生器和操作控制器。 单片机的开发过程: 这里所说的开发过程并不是一般书中所说的从任务分析开始,我们假设已设计并制作好硬件,下面就是编写软件的工作。在编写软件之前,首先要确定一些常数、地址,事实上这些常数、地址在设计阶段已被直接或间接地确定下来了。如当某器件的连线设计好后, 其地址也就被确定了,当器件的功能被确定下来后,其控制字也就被确定了。然后用文本编辑器(如EDIT、CCED等)编写软件,编写好后,用编译器对源程序文件编译,查错,直到没有语法错误,除了极简单的程序外,一般应用仿真机对软件进行调试,直到程序运行正 确为止。运行正确后,就可以写片(将程序固化在EPROM中)。在源程序被编译后,生成了扩展名为HEX的目标文件,一般编程器能够识别这种格式的文件,只要将此文件调入即可写片。 开发语言的选择 目前,很多人对汇编语言并不认可。可以说,掌握用C语言单片机编程很重要,可以大大提高开发的效率。不过初学者可以不了解单片机的汇编语言,但一定要了解单片机具体性能和特点,不然在单片机领域是比较致命的。如果不考虑单片机硬件资源,在KEIL中用C 胡乱编程,结果只能是出了问题无法解决!可以肯定的说,最好的C语言单片机工程师都是从汇编走出来的编程者,因为单片机的C语言虽然是高级语言,但是它不同于台式机个人电脑上的VC++什么的。单片机的硬件资源不是非常强大,不同于我们用VC、VB等高级语言在 台式PC上写程序,毕竟台式电脑的硬件非常强大,所以才可以不考虑硬件资源的问题。还有就是在单片机编程中C语言虽然编程方便,便于人们阅读,但是在执行效率上是要比汇编语言低10%到20%,所以用什么语言编写程序是要看具体用在什么场合下。总的来说做单片机 编程要灵活使用汇编语言与C语言,让单片机的强大功能以最高是效率展示给用户。 常用的单片机类型 STC单片机 STC公司的单片机主要是基于8051内核,是新一代增强型单片机,指令代码完全兼容传统8051,速度快8~12倍,带ADC,4路PWM,双串口,有全球唯一ID号,加密性好,抗干扰强. PIC单片机: 是MICROCHIP公司的产品,其突出的特点是体积小,功耗低,精简指令集,抗干扰性好,可靠性高,有较强的模拟接口,代码保密性好,大部分芯片有其兼容的FLASH程序存储器的芯片. EMC单片机: 是台湾义隆公司的产品,有很大一部分与PIC 8位单片机兼容,且相兼容产品的资源相对比PIC的多,价格便宜,有很多系列可选,但抗干扰较差. ATMEL单片机(51单片机): ATMEl公司的8位单片机有AT89、AT90两个系列,AT89系列是8位Flash单片机,与8051系列单片机相兼容,静态时钟模式;AT90系列单片机是增强RISC结构、全静态工作方式、内载在线可编程Flash的单片机,也叫AVR单片机. PHLIPIS 51LPC系列单片机(51单片机): PHILIPS公司的单片机是基于80C51内核的单片机,嵌入了掉电检测、模拟以及片内RC振荡器等功能,这使51LPC在高集成度、低成本、低功耗的应用设计中可以满足多方面的性能要求. HOLTEK单片机: 台湾盛扬半导体的单片机,价格便宜,种类较多,但抗干扰较差,适用于消费类产品. TI公司单片机(51单片机): 德州仪器提供了TMS370和MSP430两大系列通用单片机.TMS370系列单片机是8位CMOS单片机,具有多种存储模式、多种外围接口模式,适用于复杂的实时控制场合;MSP430系列单片机是一种超低功耗、功能集成度较高的16位低功耗单片机,特别适用于要求功耗低的场合 松翰单片机(SONIX): 是台湾松翰公司的单片,大多为8位机,有一部分与PIC 8位单片机兼容,价格便宜,系统时钟分频可选项较多,有PMW ADC 内振 内部杂讯滤波。缺点RAM空间过小,抗干扰较好。 三星单片机 三星单片机有KS51和KS57系列4位单片机,KS86和KS88系列8位单片机,KS17系列16位单片机和KS32系列32位单片机,三星还为ARM公司生产ARM单片机,常见的S344b0等.三星单片机为OTP型ISP在片编程功能. SST 单片机 美国SST公司推出的SST89系列单片机为标准的51系列单片机,包括SST89E/V52RD2, SST89E/V54RD2,SST89E/V58RD2,SST89E/V554RC,SST89E/V564RD等.它与8052系列单片机兼容.提供系统在线编程(ISP功能).内部flash擦写次数1万次以上,程序保存时间可达100年. 还有很多优秀的单片机生产企业这里没有收集,每个企业都有自己的特点,大家根据需要选择单片机,在完全实现功能的前提下追求低价位,当然并不是这样最好,实际中选择单片机跟开发者的应用习惯和开发经验是密不可分的。 单片机与嵌入式系统: 嵌入式系统源于计算机的嵌入式应用,早期嵌入式系统为通用计算机经改装后嵌入到对象体系中的各种电子系统,如舰船的自动驾驶仪,轮机监测系统等。嵌入式系统首先是一个计算机系统,其次它被嵌入到对象体系中、在对象体系中实现对象要求的数据采集、处理、状态显示、输出控制等功能,由于嵌入在对象体系中,嵌入式系统的计算机没有计算机的独立形式及功能。单片机完全是按照嵌入式系统要求设计的,因此单片机是最典型的嵌入式系统。早期的单片机只是按嵌入式应用技术要求设计的计算机单芯片集成,故名单片机。随后,单片机为满足嵌入式应用要求不断增强其控制功能与外围接口功能,尤其是突出控制功能,因此国际上已将单片机正名为微控制器(MCU,Microcontroller Unit)。

    时间:2018-05-02 关键词: 单片机 单片机开发

发布文章