计算机中的数通常有两种:无符号数和有符号数。
原码:正数(最高位0);负数(最高位1)
-(2n-1-1)~+(2n-1-1)
反码:正数(和原码相同);负数(符号位不变,其余位取反) -(2n-1-1)~+(2n-1-1)
补码:正数(和原码相同);负数(符号位不变,其余位取反加一)
单片机的特点:(1)在存储器结构上,单片机的存储器采用哈佛(Harvard)结构。ROM和RAM是严格分开的。ROM称为程序存储器,只存放程序、固定常数和数据表格。RAM则为数据存储器,用作工作区及存放数据。
(2)在芯片引脚上,大部份采用分时复用技术。
(3)在内部资源访问上,通过用特殊功能寄存器(SFR)的形式。
(4)在指令系统上,采用面向控制的指令系统。
(5)内部一般都集成一个全双工的串行接口。
(6)单片机有很强的外部扩展能力。
单机应用:(1)工业自动化控制;(2)智能仪器仪表;(3)计算机外部设备和智能接口;(4)家用电器。
51子系列的主要特点为:
◆8位CPU。
◆片内带振荡器,频率范围1.2~12MHZ。
◆片内带128字节的数据存储器。
◆片内带4K的程序存储器。
◆程序存储器的寻址空间为64K字节。
◆片外数据存储器的寻址空间为64K字节。
◆128个用户位寻址空间。
◆21个字节特殊功能寄存器。
◆4个8位的并行I/O接口:P0、P1、P2、P3。
◆2个16位定时器/计数器
◆2个优先级别的5个中断源。
◆1个全双工的串行I/O接口,可多机通信。
◆111条指令,含乘法指令和除法指令。
◆片内采用单总线结构。
◆有较强的位处理能力。
◆采用单一+5V电源。
标志寄存器PSW是一个8位的寄存器,它用于保存指令执行结果的状态,以供程序查询和判别。
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
C |
AC |
F0 |
RS1 |
RS0 |
OV |
- |
P |
C(PSW.7):进位标志位。
AC(PSW.6):辅助进位标志位。
F0(PSW.5):用户标志位。
RS1、RS0(PSW.4、PSW.3):寄存器组选择位。
OV(PSW.2):溢出标志位。
P(PSW.0):奇偶标志位(偶)。若累加器A中1的个数为奇数,则P置位,若累加器A中1的个数为偶数,则P清零。
【例2-1】 试分析下面指令执行后,累加器A,标志位C、AC、OV、P的值?
MOV A,#67H
ADD A,#58H
加法运算过程如下:
67H=01100111B 58H=01011000B
0 1 1 0 0 1 1 1 B
+ 0 1 0 1 1 0 0 0 B
1 0 1 1 1 1 1 1 =0BFH
则执行后累加器A中的值为0BFH,由相加过程得C=0、AC=0、OV=1、P=1。
片外总线结构:(1)地址总线;(2)数据总线;(3)控制总线。
复位有两种方式:上电复位和按钮复位。
指令周期:计算机取一条指令至执行完该指令需要的时间称为指令周期,不同的指令,指令周期不同。单片机的指令周期以机器周期为单位。
一个机器周期包含12个时钟周期
指令格式:[标号:] 操作码助记符 [目的操作数][,源操作数] [;注释]
简答题1:MCS-51单片机的寻址方式按操作数的类型,可分为数的寻址和指令寻址,数的寻址有:常数寻址(立即寻址)、寄存器数寻址(寄存器寻址)、存储器数寻址(直接寻址方式、寄存器间接寻址方式、变址寻址方式)和位寻址,指令的寻址有绝对寻址和相对寻址
【例3-1】写出完成下列功能的程序段。
(1)将R0的内容送R6中
程序为:MOV A,R0
MOV R6,A
(2)将片内RAM 30H单元的内容送片外60H单元中
程序为:MOV A,30H
MOV R0,#60H
MOVX @R0,A
(3)将片处RAM 1000H单元的内容送片内20H单元中
程序为:MOV DPTR,#1000H
MOV A,@DPTR
MOV 20H,A
(4)将ROM 2000H单元的内容送片内RAM的30H单元中
程序为:MOV A,#0
MOV DPTR,#2000H
MOVC A,@A+DPTR
MOV 30H,A
堆栈是在片内RAM中按“先进后出,后进先出”原则设置的专用存储区,入栈时SP指针先加1,再入栈。出栈时内容先出栈,SP指针再减1。用堆栈保存数据时,先入栈的内容后出栈;后入栈的内容先出栈。
【例3-4】试把存放在R1R2和R3R4中的两个16位数相加,结果存于R5R6中。
MOV A,R2
ADD A,R4
MOV R6,A
MOV A,R1
ADDC A,R3
MOV R5,A
【例3-13】把片外RAM的30H单元开始的数据块传送到片内RAM的40H开始的位置,直到出现零为止。
MOV R0,#30H
MOV R1,#40H
LOOP:MOVX A,@R0
MOV @R1,A
INC R1
INC R0
JNZ LOOP
SJMP $
【例3-14】统计片内RAM中30H单元开始的20个数据中0个数,放于R7中。
MOV R0,#30H
MOV R2,#20
MOV R7,#0
LOOP:MOV A,@R0
CJNE A,#0,NEXT
INC R7
NEXT:INC R0
DJNZ R2,LOOP
【例3-17】从片外RAM中30H单元开始有100个数据,统计当中正数、0、和负数的个数,分别放于R5、R6、R7中。
MOV R2,#100
MOV R0,#30H
MOV R5,#0
MOV R6,#0
MOV R7,#0
LOOP:MOVX A,@R0
CJNE A,#0,NEXT1
INC R6
SJMP NEXT3
NEXT1:CLR C
SUBB A,#0
JNC NEXT2
INC R5
SJMP NEXT3
NEXT2:INC R7
NEXT3:INC R0
DJNZ R2,LOOP
SJMP $
【例3-24】多字节无符号数加法
设从片内RAM30H单元和40H单元有两个16字节数,把它们相加,结果放于30H单元开始的位置处(设结果不溢出)。[page]
ORG 1000H
MOV R0,#30H
MOV R1,#40H
MOV R2,#16
CLR C
LOOP:MOV A,@R0
ADDC A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R2,LOOP
END
方式0是13位的定时/计数方式,则置入的初值X为:X=8192-N
方式1是16位的定时/计数方式,则置入的初值X为:X=65536-N
方式2:16位的计数器只用了8位来计数,用的是TL0(或TL1)的8位来进行计数,而TH0(或TH1)用于保存初值。初值X为:X=256-N
方式3:定时/计数器T0被分为两个部分TL0和TH0,其中,TL0可作为定时/计数器使用,而TH0固定只能作定时器使用。
【例6-2】 设系统时钟频率为12MHZ,用定时/计数器T0编程实现从P1.0输出周期为500μs的方波。
(1)采用中断处理方式的程序:
汇编程序:
ORG 0000H
LJMP MAIN
ORG 000BH ;中断处理程序
CPL P1.0
RETI
ORG 0100H ;主程序
MAIN:MOV TMOD,#02H
MOV TH0,#06H
MOV TL0,#06H
SETB EA
SETB ET0
SETB TR0
SJMP $
END
C语言程序:
#include //包含特殊功能寄存器库
sbit P1_0=P1^0;
void main()
{TMOD=0x02;
TH0=0x06;TL0=0x06;
EA=1;ET0=1;
TR0=1;
while(1);
}
void time0_int(void) interrupt 1 //中断服务程序
{P1_0=!P1_0;
(2)采用查询方式处理的程序
汇编程序:
ORG 0000H
LJMP MAIN
ORG 0100H ;主程序
MAIN:MOV TMOD,#02H
MOV TH0,#06H
MOV TL0,#06H
SETB TR0
LOOP:JBC TF0,NEXT
;查询计数溢出
SJMP LOOP
NEXT:CPL P1.0
SJMP LOOP
SJMP $
END
C语言程序:
#include //包含特殊功能寄存器库
sbit P1_0=P1^0;
void main()
{char i;
TMOD=0x02;
TH0=0x06;TL0=0x06;
TR0=1;
for(;;)
{
if (TF0) { TF0=0;P1_0=! P1_0;} //查询计数溢出
}
}
8051单片机的4个I/O口在结构上是基本相同的,但又各具特点。这四个端口都是8位双向口,每个端口都包括一个锁存器、一个输出驱动器和输入缓冲器。在无片外扩展存储器的系统中,这四个端口的每一位都可以作为双向通用I/O端口使用。在作为一般的通用I/O输入时,都必须先向锁存器写入“1”,使输出驱动场效应管FET截止,以免误读数据。各自特点如下:
(1)P0口为双向8位三态I/O口,它既可作为通用I/O口,又可作为外部扩展时的数据总线及低8位地址总线的分时复用口。作为通用I/O口时,输出数据可以得到锁存,不需外接专用锁存器;输入数据可以得到缓冲,增加了数据输入的可靠性。每个引脚可驱动8个TTL负载。
(2)P1口为8位准双向I/O口,内部具有上拉电阻,一般作通用I/O口使用,它的每一位都可以分别定义为输入线或输出线,作为输入时,锁存器必须置1。每个引脚可驱动4个TTL负载。
(3)P2口为8位准双向I/O口,内部具有上拉电阻,可直接连接外部I/O设备。它与地址总线高8位复用,可驱动4个TTL负载。一般作为外部扩展时的高8位地址总线使用。
(4)P3口为8位准双向I/O口,内部具有上拉电阻,它是双功能复用口,每个引脚可驱动4个TTL负载。作为通用I/O口时,功能与P1口相同,常用第二功能。作为第二功能使用时,各位的作用见教材P23表1.2.5所示。
【例6-3】设系统时钟频率为12MHZ,编程实现从P1.1输出周期为1s的方波。
(1)用寄存器R2作计数器软件计数,中断处理方式。
汇编程序:
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INTT0
ORG 0100H
MAIN:MOV TMOD,#01H
MOV TH0,#0D8H
MOV TL0,#0F0H
MOV R2,#00H
SETB EA
SETB ET0
SETB TR0
SJMP $
INTT0:MOV TH0,#0D8H
C语言程序:
#include //包含特殊功能寄存器库
sbit P1_1=P1^1;
char i;
void main()
{TMOD=0x01;
TH0=0xD8;TL0=0xf0;
EA=1;ET0=1;
i=0;
TR0=1;
while(1);}
void time0_int(void) interrupt 1 //中断服务程序
{TH0=0xD8;TL0=0xf0;
i++;
if (i= =50) {P1_1=! P1_1;i=0;}}
(2) 用定时/计数器T1计数实现,定时/计数器T1工作于计数方式时,计数脉冲通过T1(P3.5)输入,设定时/计数器T0定时时间到对T1(P3.5)取反一次,则T1(P3.5)每20ms产生一个计数脉冲,那么定时500ms只须计数25次,设定时/计数器T1工作于方式2,初值X=256-25=231= 11100111B=E7H,TH1=TL1=E7H。因为定时/计数器T0工作于方式1,定时,则这时方式控制字为01100001B(61H)。定时/计数器T0和T1都采用中断方式工作。
汇编程序如下:
ORG 0000H
LJMP MAIN
ORG 000BH
MOV TH0,#0D8H
MOV TL0,#0F0H
CPL P3.5
RETI
ORG 001BH
CPL P1.1
RETI
ORG 0100H
MAIN:MOV TMOD,#61H
MOV TH0,#0D8H
MOV TL0,#0F0H
MOV R2,#00H
MOV TH1,#0E7H
MOV TL1,#0E7H
SETB EA
SETB ET0
SETB ET1
SETB TR0
SETB TR1
SJMP $
END
C语言程序如下:
#include //包含特殊功能寄存器库
sbit P1_1=P1^1;
sbit P3_5=P3^5;
void main()
{
TMOD=0x61;
TH0=0xD8;TL0=0xf0;
TH1=0xE7; TL1=0xE7;
EA=1;
ET0=1;ET1=1;
TR0=1;TR1=1;
while(1);
}
void time0_int(void) interrupt 1 //T0中断服务程序
{
TH0=0xD8;TL0=0xf0;
P3_5=!P3_5;
}
void time1_int(void) interrupt 3 //T1中断服务程序
{
P1_1=! P1_1;
}
计算机与外界的通信有两种基本方式:并行通信和串行通信。
8255A的工作方式:(1)方式0输入/输出时没有专门的应答信号,通常用于无条件传送。
(2)方式1是一种选通输入/输出方式。无论是A口输入还是B口输入,都用C口的三位作应答信号,一位作中断允许控制位。
(3)方式2是一种双向选通输入/输出方式。只适合于端口A。这种方式能实现外设与8255A的A口双向数据传送,并且输入和输出都是锁存的。它使用C口的5位作应答信号,两位作中断允许控制位。
键盘的工作原理:键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。
键盘的处理主要涉及三个方面: 1.按键的识别;2.抖动的消除: 硬件消抖;软件消抖是利用延时来跳过抖动过程;3.键位的编码;
A/D转换器(ADC)的作用是把模拟量转换成数字量,以便于计算机进行处理.
根据转换原理可分为计数型A/D转换器、逐次比较式、双重积分型和并行式A/D转换器等;按转换方法可分为直接A/D转换器和间接A/D转换器;按其分辨率可分为4~16位的A/D转换器芯片。
A/D转换器的主要性能指标:(1)分辨率;(2)转换时间;(3)量程;(4)转换精度
ADC0809是CMOS单片型逐次逼近型A/D转换器,具有8路模拟量输入通道,有转换起停控制,模拟输入电压范围为0~+5V,转换时间为100ms。
I2C总线简介:I2C总线是由PHILIPS公司开发一种简单、双向二线制同步串行总线。它只需要两根线即在连接于总线上的器件之间传送信息。
DS18B20简介:(1)适应电压范围宽:3.0~5.5V,在寄生电源方式下可由数据线供电。
(2)在使用中不需要任何外围元件。
(3)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条信号线即可实现微处理器与DS18B20的双向通信。
(4)测温范围:-55℃~+125℃,在-10℃~+85℃时精度为±0.5℃。
(5)编程可实现分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。
(6)在9位分辨率时最多在93.75ms内把温度值转换为数字,12位分辨率时最多在750ms内把温度值转换为数字。
(7)支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温;
(8)用户可自设定非易失性的报警上下限值。
(9)负压特性:电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
简单题:㈠串行口有四种工作方式:方式0(8位同步移位寄存器),方式1(10位异步收发),方式2(11位异步收发),方式3(11位异步收发)。
字符帧的数据格式为:在一帧格式中,先是一个起始位“0”(低电平),然后是5~8个数据位,规定低位在前,高位在后,接下来是1位奇偶校验位(可以省略),最后是1~2位的停止位“1”。两个字符帧之间可以有空闲位,也可以无空闲位。
在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率(T1溢出信号的频率)控制。各种方式的通信波特率如下:
① 方式0的波特率固定为系统晶振频率的1/12,其值为fosc/12。
其中:fosc——系统主机晶振频率
② 方式2的波特率由PCON中的选择位SMOD来决定,可由下式表示:
波特率=(2SMOD/64)×fosc
即:当SMOD=1时,波特率为fosc/32,当SMOD=0时,波特率为fosc/64
③ 方式1和方式3的波特率由定时器T1的溢出率控制。因而波特率是可变的。
定时器T1作为波特率发生器,相应公式如下:
波特率=(2SMOD/32)×定时器T1溢出率
T1溢出率=T1计数率/产生溢出所需的周期数
=(fosc/12)/(2K-TC)
式中:K——定时器T1的位数
TC——定时器T1的预置初值
㈡键盘的工作原理:(1)判断键盘上有无键按下:列输出全0,读行输入状态,若状态为全1,则说明键盘无键按下;若不全为1,则说明键盘有按下。
(2)消除按键抖动的影响:在判断有键按下后,用软件延时的方法,再判断键盘状态,如果仍为有键按下状态,则认为有一个确定的键按下,否则当作按键抖动处理。
(3)求按键位置,计算键号:用扫描的方法识别闭合键N所在的行号X和列号Y,并根据:以下公式计算闭合键的键号N =X行首键号+列号Y。
(4)键闭合一次仅进行一次按键处理:方法是等待按键释放之后,再进行按键功能的处理操作。
㈢定时计数器的工作方式:(1) 工作方式O: 13位定时器/计数器工作方式。
工作方式0由TH0的全部8位和TL0的低5位构成13位加1计数器,此时TL0的高3位未用。在计数过程中,当TL0的低5位溢出时,都会向TH0进位,而全部13位计数器溢出时,则计数器溢出标志位TF0置位。
(2) 工作方式l: 16位的定时器/计数器方式。
工作方式1由TH0作为高8位,TL0为低8位,在计数过程中,当全部16位计数器溢出时,则计数器溢出标志位TF0置位。
(3) 工作方式2: 自动重新装入计数初值的8位定时器/计数器工作方式。
工作方式2的16位定时器/计数器被拆成两个8位寄存器TH0和TL0,CPU在对它们初始化时必须装入相同的定时器/计数器初值。定时器/计数器启动后,TL0按8位加1计数器计数,当TL0计数溢出时,置位TF0的同时又从预置寄存器TH0中重新获得计数初值并启动计数。如此反复。适合于需要重复计数的应用场合,也可以当做串行数据通信的波特率发生器使用。
(4) 工作方式3: 两个8位定时器/计数器(仅适用于T0)。
在工作方式3时,定时器/计数器0被拆成两个独立的8位计数器TL0和TH0。其中,TL0既可以作计数器使用,也可以作为定时器使用,定时器/计数器0的各控制位和引脚信号全归它使用。其功能和操作与方式0或方式1完全相同。TH0只能作为简单的定时器使用,只能借用定时器/计数器1的控制位TR1和TF1,也就是以计数溢出去置位TF1,TR1则负责控制TH0定时的启动和停止。
一般情况下,只有在T1以工作方式2运行(当波特率发生器用)时,才允许T0工作于方式3。
TMOD用于控制定时器/计数器T0和T1的工作方式,M1M0为工作方式选择位。
M1M0=00 方式0,13位定时器/计数器;
M1M0=01 方式1,16位定时器/计数器;
M1M0=10 方式2,自动重新装入计数初值的8位定时器/计数器;
M1M0=11 方式3,两个8位定时器/计数器(仅适用于T0)。
为定时方式/计数方式选择位。若设定 =0,则选择定时器工作方式;若设定 =1,则选择计数器工作方式。一个定时器/计数器同一时刻或者作定时用,或者作计数用,不能同时既作定时又作计数用。
GATE:门控位。它的状态决定了定时器/计数器启/停控制取决于TR0还是取决于TR0和 引脚两个条件的组合。若GATE=0,则只由TCON中的启/停控制位TR0控制定时器/计数器的启/停。此时,只要TR0=1,则接通模拟开关,使计数器进行加法计数,定时器/计数器启动工作。而如果TR0=0,则断开模拟开关,定时器/计数器停止工作。若GATE=1,由外部中断请求信号 和TCON中的启/停控制位TR0组合状态控制定时器/计数器的启/停。只有TR0=1,且 引脚也是高电平,才能启动定时器/计数器工作,否则,定时器/计数器停止工作。
定时器/计数器的定时器/计数器范围为:
工作方式0:13位定时器/计数器方式,因此,最多可以计到213,也就是8 192次。
工作方式1:16位定时器/计数器方式,因此,最多可以计到216,也就是65 536次。
工作方式2和工作方式3:都是8位的定时器/计数器方式,因此,最多可以计到28,也说是256次。
㈣中断系统:(1)有中断源发出中断请求。
(2)中断总允许控制位EA=l, CPU开放总中断。
(3)申请中断的中断源的中断允许位为1,即该中断没有被屏蔽。
(4)无同级或更高级中断正在服务。
(5)当前指令周期已经结束。
(6)若现行指令为RETI或访问IE或IP指令时,读指令以及紧接着的另一条指令已执行完毕。
满足以上条件,则CPU响应响应中断元的中断请求。
在时钟电路工作以后,当外部电路使得RST端出现2个机器周期(24个时钟周期)以上的高电平,系统内部复位。复位有两种方式:上电复位和按钮复位。
串口,REN的作用?
REN:允许接收控制位。当REN=1,则允许接收,当REN=0,则禁止接收。
程序计数器PC用以存放要执行的指令的地址,它具有自动计数功能,每取出一条指令,它的内容会自动加1,以指向下一条指令要执行的指令,从而实现从程序存储器中依次取出指令来执行。
特殊功能寄存器区可以做一般RAM区使用吗?
数据指针DPTR是16位的专用寄存器,它由两个8位的寄存器DPH(高8位)和DPL(低8位)组成。专门用来寄存片外RAM及扩展I/O口进行数据存取时的地址。编程时,既可以按16位寄存器来使用,也可以按两个8位寄存器来使用(即高位字节寄存器DPH和低位字节寄存器DPL)。DPTR主要是用来保存16位地址,当对64KB外部数据存储器寻址时,可作为间址寄存器使用