单片机总结.docx
- 文档编号:12660179
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:19
- 大小:44.30KB
单片机总结.docx
《单片机总结.docx》由会员分享,可在线阅读,更多相关《单片机总结.docx(19页珍藏版)》请在冰豆网上搜索。
单片机总结
【1、数据总线(DataBus,DB):
传送数据;双向;一般来说,微处理器的位数和数据总线的位数一致。
地址总线AddressBus,AB):
在计算机中,通过地址来访问外设及存储器;单向;地址总线的数目决定了可以直接访问的内存储器的单元数目。
控制总线(ControlBus,CB):
传送CPU发出的控制信号,也可以传送其他外设信号到微处理器;对于一条具体的控制线,其方向是固定的;控制总线的数目与微处理器的位数没有直接关系,一般受引脚的限制,控制总线的数目不会太多。
】
【1)ROM:
掩膜编程的ROM简称为ROM,它的编程是由半导体制造厂家完成的,适合于大批量生产的产品。
2)PROM:
在出厂时并未存储任何信息,用户只能写入一次(编程一次)。
(3)EPROM:
可改写的现场编程ROM,整片一起擦除,能够重复编程;(EP:
ErasableProgrammable)用电信号编程,可用专门的编程器编程UVEPROM:
用紫外线擦除的EPROM。
EEPROM:
用电信号进行内容擦除的EPROM】【.单片微型机是由CPU存储器I/0接口三部分组成】【PU主要由运算器,控制器组成,CPU中的布尔处理器用来处理位操作,】【零标志Z(ZeroFlag):
当运算结果为零时,Z标志就置1,否则,Z就被置零。
两个数是否相等。
符号标志S(SignFlag):
符号标志总是和运算结果中最高一位的值一致。
判断有符号数的正负。
有符号数运算时才有意义奇偶标志P(ParltyF1ag):
奇偶标志用来标记运算结果中1的个数的奇偶性,可用于检查在数据传输中是否发生错误。
有奇校验和偶校验之分】【单片机的特点:
单片机的存贮器有片内存贮器和片外存贮器之分;单片机内的ROM和RAM严格分工;单片机有很强的位处理功能;单片机的引脚出线一般都是多功能的;系列齐全,功能扩展性强。
】【半导体存储器从工艺上分为双极型和MOS型两种。
双极型存储器的工作速度较快,但集成度较差。
MOS存储器的集成度较高,价格便宜。
现在一般用的半导体存储器都是MOS存储器。
】【只读存贮器(ROM)的信息在制造时或通过一定的编程方法写入。
在系统中通常只能读出不能写入;在断电时,其信息不会丢失;它用来存放固定的程序及数据,如监控程序、数据表格等。
随机存取存储器(RAM)信息可读可写;可随时直接写入数据;掉电后信息丢失。
RAM有双极型和MOS型两种,MOS存储器因其集成度高,功耗较低,价格便宜而得到广泛应用。
】【8位CPU,4K字节在系统可编程Flash存储器,程序存储器的寻址范围为64KB,片外数据存储器的寻址范围为64KB,片内带振荡器,振荡频率范围为1.2~12MHz;可有时钟输出,128个字节的片内数据存储器,21个字节专用寄存器,32个可编程I/O口线,2个16位定时器/计数器,5个中断源,两个优先级
一个全双工UART串行通道,可多机通信,111条指令,含乘法指令和除法指令,有强位寻址、位处理能力,片内采用单总线结构,用单一的+5V电源。
】【控制器是由指令寄存器IR、指令译码器ID、程序计数器PC、数据指针DPTR、堆栈指针SP、RAM地址寄存器、时钟发生器以及控制逻辑组成的】。
【向上生长型堆栈出栈入栈的操作原则是“先进后出”或“后进先出”。
入栈操作规则为:
先SP中的内容加1,后写入数据;出栈操作规则为:
先读出数据,后SP中的内容减1。
主要用于数据传送;子程序调用及返回和中断处理断点的保护及返回。
】【8051内部有两个16位可编程定时/计数器,记为定时器To和T1。
在定时工作时,时钟由单片机内部提供,即系统时钟经过12分频后作为定时器的时钟。
计数工作作时,两个计数器的时钟脉冲(计数脉冲)由T0和T1(即P3.4和P3.5)两个引脚输入。
可以产生中断。
】【8051的中断系统允许接受5个独立的中断源,即两个外部中断申请,两个定时/计数器中断以及一个串行口中断。
可以设置两个中断优先级,即高优先级和低优先级,由中断优先控制寄存器IP来控制】【物理上分为:
4个空间,即片内ROM、片外ROM片内RAM、片外RAM逻辑上分为:
3个空间,即程序内存(片内、外)统一编址MOVC数据存储器(片内)MOV数据存储器(片外)MOVX】【0003H——外部中断0入口,000BH——T0溢出中断入口,0013H——外中断1入口,001BH——T1溢出中断入口,0023H——串口中断入口】【00H~7FH:
是真正的RAM区,可以读写各种数据;
80H~FFH:
是专门用做特殊功能寄存器(SFR)的区域。
】【位寻址区是对字节存储器的有效补充,通过位寻址可以对各个位进行位操作,可以用于开关量的控制。
在程序设计阶段,通常用于存放各种程序的运行标志、位变量等,位寻址是51单片机特有的功能,这种使用方式大大提高了存储器的工作效率。
】【P0口是一个多功能的三态双向口,能驱动8个LSTTL负载。
作通用I/O口输出时:
是开漏输出,应外接上拉电阻P1口是一个准双向口,它只作通用的I/O口使用,其功能与P0口作为通用I/O口时的功能相同。
作为输出口使用时,由于其内部有上拉电阻,所以不需要外接上拉电阻;P1口能驱动4个TTL负载。
P2口也是一个准双向口,P2口能带3~4个TTL负载。
P3口是一个多功能准双向口,第一功能是作为通用的I/O口使用,其功能和原理与P1口相同。
可以驱动4个TTL负载。
第二功能是作为控制和特殊功能口使用,可以字节访问也可以位访问,】【1、P0口:
地址低8位与数据线分时使用端口,2、P1口:
按位可编址的输入输出端口,3、P2口:
地址高8位输出口4、P3口:
用第二功能。
若不用第二功能,也可作通用I/O口。
】【复位状态:
1.程序计数器PC初始化为0000H,使单片机从OOOOH单元开始执行程序。
在运行中,当单片机的程序受外界因素干扰陷入死循环或跑飞时,为摆脱困境,可将单片机复位,重新启动。
2.复位也可使单片机退出低功耗工作方式而进入正常工作状态。
】【掉电保护方式:
其保护措施是:
单片机系统在运行中突然掉电故障时,先保存重要的数据,然后启用备用电源维持供电。
】【80C51单片机有两种功耗节电方式:
空闲方式和掉电方式。
空闲方式和掉电方式都是由特殊功能寄存器中的电源控制寄存器PCON的有关控制位来控制的。
】【空闲方式的退出可采用两种方式:
中断方式和硬件复位方式。
退出掉电方式的惟一方法是硬件复位】【51单片机的时序单位共4个,从小到大依次是:
节拍、状态、机器周期和指令周期。
一个状态包括两个节拍一个节拍的宽度实际上就等于一个振荡周期,一个机器周期由6个状态周期组成。
振荡周期Tosc=1/fosc一个机器周期=12个振荡周期=12×1/fosc。
例如:
若fosc=12MHz,则一个机器周期=1μs。
】【51单片机有111条指令,概括为以下几种:
单字节单机器周期指令、单字节双机器周期指令、双字节单机器周期指令和双字节双机器周期指令,三字节指令都是双机器周期指令,而单字节乘除指令均为四机器周期指令。
】【单片机与外部器件数据交换遵循原则:
一是:
地址唯一性,一个单元一个地址。
二是:
同一时刻,CPU只能访问一个地址,即只能与一个单元交换数据。
不交换时,外部器件处于锁闭状态,对总线呈浮空状态。
】
【指令通常由两部分构成,即操作码和操作数】【5大类111条。
数据传送指令28,条算术运算指令24条,逻辑运算及移位指令25条,控制转移指令17条,位操作(布尔操作)指令17条单字节:
49条双字节:
45条三字节:
17条】【立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,变址寻址(基址寄存器偏移量寄存器)相对寻址,位寻址】【立即数。
例如:
MOVA,#3AH;A←3AHMOVDPTR,#8000H。
寄存器寻址,例如MOVA,R0;(A)←(R0)直接寻址,例如:
MOVA,3AH;A←(3AH)寄存器间接寻址例如:
MOVA,@R0;A←(R0)变址寻址例如:
MOVCA,@A+PC;(A)+(PC))→AMOVCA,@A+DPTR;((A)+(DPTR))→APUSHdirect
(1)SP←SP+1
(2)(SP)←(direct)POPdirect自动进行两步操作:
(1)(direct)←(SP)
(2)SP←SP-1】【编程题:
例
、试编写一程序段,实现将外RAM0FAH单元中的内容传送到外RAM04FFH单元中。
?
解:
MOVDPTR,#04FFHMOVR0,#0FAHMOVXA,@R0MOVX@DPTR,A】【
例、设(A)=一个BCD码常数,试用查表法获得其相应的ASCII码。
?
MOVDPTR,#TABMOVCA,@.A+DPTRTAB:
DB30H
DB31HDB32H,33H,34H,35H】【16位数的算术左移,16位数在内存中存放在M1和M1+1单元,低8位先存。
?
CLRCMOVR1,#M1MOVA,@R1RLCA
MOV@R1,AINCR1MOVA,@R1RLCAMOV@R1,A】
【例:
将片内数存30H~39H单元清零。
?
MOVR0,#30HCLRAMOVR7,#10LOOP:
MOV@R0,AINCR0DJNZR7,LOOPSJMP$】【16位数的一次循环移位,16位数在内存中存放在M1和M1+1单元,低8位先存。
?
MOVA,M1+1;高8位送AMOVC,ACC.7;最高位送进位CyMOVR1,#M1;操作数地址送R1MOVA,@R1;低8位送ARLCA;低8位左移,最低位添0,Cy←AMOV@R1,A;送回INCR1;指向高8位MOVA,@R1;高8位送ARLCA;A7移入,高8位左移MOV@R1,A;送回】【将单字节压缩BCD码(存于数据内存30H单元)分离转换成ASCII码放在31H、32H单元。
?
MOV30H,#68HMOVA,30H;用除法分离MOVB,#10HDIVAB;商6在A,余数8在B中MOV31H,B;转换成分离的BCDMOV32H,A
ORL31H,#30H;存结果ORL32H,#30H】【将8位二进制数(存于数据内存30H单元)转换成三位分离的BCD码放在31H、32H、33H单元?
MOVA,30H;用除法分离MOVB,#10
DIVAB;商25在A,余数4个位在B中MOV31H,BMOVB,#10DIVAB;商2百位在A,余数5十位在B中MOV32H,B;存结果MOV33H,A】【将三位分离的BCD码放在31H、32H、33H单元转换成8位二进制数(存于数据内存30H单元)?
。
MOVA,33H;MOVB,#10MULAB;积BA,最大20即33H中存的数不能超过2ADDA,32H;百位乘以10加十位,在A中MOVB,#10MULAB;再乘以10ADDA,31H;存结果MOV30H,A
【(30H)=X7X6X5X4X3X2X1X0(3lH)=Y7Y6Y5Y4Y3Y2Y1Y0(40H)=Y2Y1Y0X4X3X2X1X0?
ORG0100HMOVA,30HANLA,#00011111BMOV30H,AMOVA,31HANLA,#00000111BSWAPARLAORLA,30H;组装MOV40H,AEND】
【将内部RAM中20H单元和30H单元的无符号数相加,结果存入R0(高位)和R1(低位)中。
?
ORG0000HLJMPMAINORG0030HMAIN:
MOVA,20H
CLRCADDA,30HMOVR1,ACLRAADDCA,#00MOVR0,ASJMP$
END】
a-b(a≥0)
【Y=
a+b(a<0)
ORG0030HBR:
JBACC.7,ADD1CLRC;计算分支a-bSUBBA,B
SJMPDONEADD1:
ADDA,B;计算分支a+bDONE:
MOVR2,A;存结果
SJMP$END】【如果累加器A的D1D0位都为0,则R2加1,否则,R3减
1,试编写程序。
A=D7D6D5D4D3D200?
解:
根据A和00000011B逻辑“与”的结果来判定。
ORG0030HMOVB,A;保存AANLA,#00000011B
JNZR3DEC1INCR2SJMPDONER3DEC1:
DECR3;计算分支
DONE:
MOVA,B;恢复ASJMP$END】【根据R7的值,转移到不同的分支中的1个。
例中R7=0~3.?
ORG0000MOVA,R7RLAADDA,R7MOVDPTR,#TAB
JMP@A+DPTRTAB:
LJMPL0LJMPL1LJMPL2LJMPL3L0:
INCR0
JMPTOENDL1:
INCR1JMPTOENDL2:
INCR2JMPTOENDL3:
INCR3TOEND:
SJMP$END】【内部数据区清零?
ORG0030HZero:
movR0,#30HmovR7,#10
movA,#00HLoop:
mov@R0,AincR0djnzR7,Loopsjmp$END】【n个单字节数相加,和为双字节。
单字节数据存在40H开始的RAM单元中,n放在R2中,和存在R3,R4中?
ORG0030HADD1:
MOVR3,#00HMOVR4,#00HMOVR2,#n
MOVR0,#40HLOOP:
MOVA,R3;取和的低位ADDA,@R0;相加
MOVR3,ACLRAADDCA,R4;低位字节向高位字节进位MOVR4,A
INCR0;地址加1DJNZR2,LOOP;未加完继续重复SJMP$END】
n个单字节数相加,和为双字节。
单字节数据存在40H开始的RAM单元中,n放在R2中,和存在R3,R4中?
ORG0030H
ADD1:
MOVR3,#00H
MOVR4,#00H
MOVR2,#n
MOVR0,#40H
LOOP:
MOVA,R3
ADDA,@R0
MOVR3,A
CLRA
ADDCA,R4
MOVR4,A
INCR0
DJNZR2,LOOP
SJMP$
END
把内部RAM中起始地址为BLK1的数据块传送到外部RAM以BLK2为起始地址的区域,直到遇到“#”字符的ASCⅡ码为止。
去掉块长度
ORG0030H
BLK1EQU30H
BLK2EQU1000H
MOVSP,#6FH
MOVR0,#BLK1
MOVDPTR,#BLK2
XH:
MOVA,@R0
PUSHACC
CLRC
SUBBA,#23H
JZSTOP
POPACC
MOVX@DPTR,A
INCR0
INCDPTR
AJMPXH
STOP:
SJMP$
END
比较有符号数的大小30h,31h大的存入32h
ORG0030H
Onedata30h
Twodata31h
Maxdata32h
movsp,#50h
clrc
movA,one
subbA,two
lcallxor_sof
jbF0,Next;比较F0
movmax,one
sjmpdone
next:
movmax,two
done:
sjmp$
xor_sof:
movc,ov
mov20h.7,c
xrlA,20h
movc,acc.7
movF0,c
ret
END
50ms延时程序
Delay:
movR7,#2001US
Del1:
movR6,#1231US
Nop1US
Del2:
djnzR6,Del22US
djnzR7,Del12US
sjmp$
T=[200×(1+1+123×2+2)+1]×1us
=50001us=50ms
统计从32H单元开始的14个存储单元有多少的数与30h单元的数相同,统计结果存31h单元。
ORG0030H
MOV31h,#00
MOVR2,#14
MOVR0,#32H
LOOP:
MOVA,@R0
CJNEA,30H,Next
INC31H
Next:
INCR0
DJNZR2,LOOP
sjmp$
END
START:
MOVC,P2.2
ORLC,TF0
ANLC,P1.1
MOVF0,C
MOVC,IE1
ORLC,/25H
ANLC,F0
ANLC,/26H
MOVP1.3,C
SJMP$
16位二进制数存于M1和M1+1单元低8位先存编写完成一次循环移位程序
MOVA,M1+1
MOVC,ACC.7
MOVR1,#M1
MOVA,@R1
RLCA
MOV@R1,A
INCR1
MOVA,@R1
RLCA
MOV@R1,A
将内部RAM中M1,M2,M3三个单元中无符号数相加和存入R0(高位)R1(低位)寄存器
MOVR2,#00H
MOVA,M1
ADDA,M2
MOVR1,A
MOVA,R2
ADDCA,R2
MOVR0,A
MOVA,R1
ADDA,M3
MOVR1,A
MOVA,R0
ADDCA,R2
MOVR0,A
2个无符号16位数,分别存放在从M1和M2开始的数据区中,低8位先存,高8位在后,写出2个16位数加法程序和存于R3(高8位)R4(低8位)和不超过16位
MOVR0,#M1
MOVR1,#M2
MOVA,@R0
ADDA,@R1
MOVR4,A
INCR0
INCR1
MOVA,@R0
ADDCA,@R1
MOVR3,A
16位数的算术左移16位数在内存中存放在M1和M1+1单元低8位先存
CLRC
MOVR1,#M1
MOVA,@R1
RLCA
MOV@R1,A
INCR1
MOVA,@R1
RLCA
MOV@R1,A
在M1和M1+1单元有2个BCD数现将它们合并放到M1单元,以节省内存空间
MOVR1,#M1
MOVA,@R1
SWAPA
JNCR1
ORLA,@R1
MOVM1,A
M1,M2,M3分别为被减数,减数和差的符号地址,试编写2位BCD码的减法程序
CLRC
MOVA,#9AH
SUBBA,M2
ADDA,M1
DAA;十进制调整
MOVM3,A
CLRC
1
将DPTR的内容循环左移4位
PUSHACC
PUSH0
MOVR0,#4
AGAIN:
MOVA,DPH
MOVC,ACC.7
MOVA,DPL
RLCA
MOVDPL,A
MOVA,DPH
RLCA
MOVDPH,A
DJNZR0,AGAIN
POP0
POPACC
将外部存储器的一个数据块传送到内部数据RAM,2着的首地址分别为DATA1和DATA2,遇到传送数据为0时停止传送
MOVR0,#DARA1
MOVR1,#DATA2
LOOP:
MOVXA,@R0
HERE:
JZHERE
MOV@R1,A
INCR0
INCR1
SJMPLOOP
将内部RAM中从data单元开始的10个无符号数相加,相加结果送给sum单元。
相加结果不超过8位二进制数
MOVR0,#0AH
MOVR1,#DATA
CLRA
LOOP:
ADDA,@R1
INCR1
DJNZR0,LOOP
MOVSUM,A
SJMP$
3344H*56H=?
ORG3000H
MOVA,#44H
MOBB,#56H
MULAB
MOV30H,A;A=4456L=(30H)
MOV31H,B;B=4456H=(31H)
MOVA,#33H
MOVB,#56H
MULAB;A=3356L
ADDA,31H;4456H+3356L=(31H)
MOV31H,A
CLRA
ADDCA,B;B=3356H+CY
MOV32H,A
SJMP$
END
(1)A>=10,
(2)A>10,(3)A<=10,(4)
A<10
(1)CLRC
CJNEA,#10,LOOP
SJMPLABEL
LOOP:
JNCLABEL
SJMP$
(2)CJNEA,#10,LOOP
SJMP$
LOOP:
JNCLABEL
SJMP$
(3)CJNEA,#10,LOOP
SJMPLABEL
LOOP:
JCLABEL
SJMP$
(4)CJNEA,#10,LOOP
SJMP$
LOOP:
JCLABEL
SJMP$
用软件定时方式,可以通过调用20ms延时子程序来实现
START:
SETBP1.0
LCALLDELAY20
CPLP1.0
LCALLDELAY20
LCALLDELAY20SJMPSTART
DELAY20:
CPLRS1
MOVR6,#20
LOOP1:
MOVR7,#249
LOOP2:
MOP
NOP
DJNZR7,LOOP2
DJNZR6,LOOP1
CPLRS1
RET
多字节左移1位
ORG2000H
MAIN:
MOVSP,#5FH
MOVR0,#30H
MOVR2,#3
ACALLB3L
SJMP$
B3L:
CLRC
LOOP:
MOVA,@R0
RLCA
MOV@R0,A
INCR0
DJNZR2,LOOP
RET
END
编写程序,查找内部RAM的20h~50h单元中是否有OAAH这一数据,若有,则将51H单元设为01h,若未找到,则使51H设置0
MOVR0,#31H
MOVR1,#20H
LOOP:
MOVA,@R1
CLRC
CJNEA,#0AAH,LOOP1
SJMPLOOP2
LOOP1:
INCR1
DJNZR0,LOOP
MOVA#00H
SJMPLOOP3
LOOP2:
MOVA,#01H
LOOP3:
MOV51H,A
SJMP$
编写一子程序,从串口行接受一个字符
START:
MOVTMOD,#20H
MOVTH1,#0E8H
MOVTL1,#0E8H
SETBTR1
MOVSCON,#50H
L1:
JNBRI,L1
CLRRI
MOVA,SBUF
RET
用位操作指令实现下面逻辑方程P1.2=ACC.1?
P1.4?
PSW.1+20H?
21H
ORG0000H
SETBC
ANLC,ACC.1
ANLC,P1.4
ANLCPS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 总结
![提示](https://static.bdocx.com/images/bang_tan.gif)