51单片机主要内部资源第2章MCS-51单片机结构及原理1.8位中央处理器CPU2.片内振荡器和时钟电路3.4K片内程序存储器ROM4.256字节片内RAM5.2个16位定时/计数器6.可寻址64KB外部程序寄存器和64KB数据存储空间的控制电路7.4个8位双向I/O口8.5个中断源INT9.1个全双工串行口UART重要!!!必考CY(PSW.7)——进位标志在进行加或减运算时,如果操作结果最高位有进位或借位时,CY由硬件置“1”,否则清“0”。10010011+11110000————————CY=110000011进位标志位CYCYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1P位7位6位5位4位3位2位1位0CYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PPSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0位7位6位5位4位3位2位1位0用途:1、根据CY判断有无进位或借位;2、在位操作中CY可作为位累加器用。举例第2章MCS-51单片机结构及原理AC(PSW.6)——辅助进位标志在进行加或减运算时,如果操作结果的低四位数向高四位产生进位或借位时,将由硬件置“1”,否则清“0”。01001111+10100001————————AC=111110000半进位CYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1P位7位6位5位4位3位2位1位0CYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PPSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0位7位6位5位4位3位2位1位0举例用途:1、根据AC判断加减运算时有无半进位或半借位;2、在BCD码调整运算中要用到AC标志第2章MCS-51单片机结构及原理OV(PSW.2)——溢出标志在有符号数加减运算或无符号数乘除运算中若有异常结果,OV硬件置1,否则硬件清0。CYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1P位7位6位5位4位3位2位1位0CYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PPSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0位7位6位5位4位3位2位1位0用途:判断运算的结果是否正确,正确=0;出错=1第2章MCS-51单片机结构及原理P(PSW.0)——奇偶标志位该位始终跟踪累加器A中含“1”个数的奇偶性如果A中有奇数个“1”,则P置“1”,否则置“0”举例若A=10011111,则P=0若A=11000001,则P=1CYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1P位7位6位5位4位3位2位1位0CYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PPSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0位7位6位5位4位3位2位1位0用途:用于串行通讯中的数据校验,判断是否存在传输错误。第2章MCS-51单片机结构及原理计算机存储器地址空间的两种结构形式:普林斯顿结构和哈佛结构。RAM和ROM统一编址RAM和ROM分别编址51系列单片机采用哈佛结构,共有4个物理存储空间片内RAM、片内ROM、片外RAM、片外ROM时序的定时单位:时钟周期(或节拍)P、状态周期S、机器周期、指令周期•1个状态周期(S)=2个节拍(P)•1个机器周期=6个状态(S)=12个节拍(P)•1个指令周期约为1~4个机器周期第2章MCS-51单片机结构及原理51单片机的4个物理存储空间相当于3个逻辑存储空间片内RAM和片外RAM是独立的,而片内ROM可与片外ROM统一编址P3口的第二功能方式:输出时:第二输出功能=1→与非门输出0→V截止→P3.n=1第二输出功能=0→与非门输出1→V导通→P3.n=0输入时:P3.n→驱动门4→第二输入功能(也需先使V截至)D端写“1”(与非门开锁)引脚名称第二功能定义P3.0RXD串行通信数据接收端输入P3.1TXD串行通信数据发送端输出P3.2外部中断0请求端口输入P3.3外部中断1请求端口输入P3.4T0定时器/计数器0外部计数输入端口输入P3.5T1定时器/计数器1外部计数输入端口输入P3.6片外数据存储器写选通输出P3.7片外数据存储器读选通输入P0.n的通用I/O口工作方式(控制端=0)输出时:D端=1→/Q=0→V1截止→P0.n=1D端=0→/Q/=1→V1导通→P0.n=0读引脚时:P0.n→读引脚三态门1→内部总线(需要先写“1”)读锁存器:Q端→读锁存器三态门2→内部总线第2章MCS-51单片机结构及原理输出时:D端=1→Q端=1→V截止→P2.n=1D端=0→Q端=0→V导通→P2.n=0读引脚时:P2.n→读引脚三态门→内部总线(需要先写“1”)读锁存器:Q端→读锁存器三态门→内部总线P2.n的通用I/O口方式(控制端=0)第2章MCS-51单片机结构及原理P2.n的地址输出口方式(控制端=1)输出时:地址端=1→V截止→P2.n=1地址端=0→V导通→P2.n=0MOVA,#12H;立即数12H→ASETBP1.0;P1.0←1CJNEA,R0,START;若A≠R0,转STARTCJNEA,R0,START;若A≠R0,转STARTADDA,#10H;A+10H→ACRLA;A←0RET;子程序返回MOVA,#12H;move(传送)SETBP1.0;setbit(置位)CJNEA,R0,START;compareandjumpifnotequal(比较跳转)第3章单片机的汇编语言与程序设计简记符号简记符号的意义(在@符号之后)第3章单片机的汇编语言与程序设计简记符号的使用练习具体实例#dataADDA,R5#data16MOVDPTR,#1305RnMOVA,#35HSUBBA,@R0RidirectACALL3FFHaddr16LJMP12A0Haddr11MOVA,25HJCSTARTrelbitCLR20H简记符号简记符号表MOVA,PSWdirectSJMP10HrelADDA,RnMOVDPTR,#data16MOVA,#dataSUBBA,@RiACALLaddr11LJMPaddr16MOVA,directJCrelCLRbitMOVA,directSJMPrel指令助记符格式第3章单片机的汇编语言与程序设计(1)直接寻址INCPSW;指令原形INCdirectMOVA,0D0H;指令原形MOVA,direct例如:——以片内RAM字节地址的形式(direct)表示操作数的存在方式汇编语言中十六进制数的区别:1、地址——高4位值若9,高位前加0,以区别语句标号2、常数——高位前加#,以区别地址例如:SJMPAB;AB是语句标号(代表rel)MOVA,0AB;AB是十六进制数(代表地址)MOVA,#0AB;AB是十六进制数(代表常数)(2)寄存器寻址第3章单片机的汇编语言与程序设计——以通用寄存器的形式表示操作数的存在方式通用寄存器:A、B、C、Rn、DPTR例如:MOVA,R1;指令原形MOVA,RnAC(3)寄存器间接寻址第3章单片机的汇编语言与程序设计间址寄存器:Ri和DPTRMOVA,@R0;指令原形MOVA,@RiA←(Rn)(以间址寄存器中存储数据为操作数的地址)例如:——以@+间址寄存器名的形式表示操作数的存在方式第3章单片机的汇编语言与程序设计MOVA,#0E2H;指令原形MOVA,#dataADDCA,#20H;指令原形ADDCA,#data(4)立即寻址——以立即数的形式(#data或#data16)表示操作数的存在方式例如:第3章单片机的汇编语言与程序设计(5)变址寻址MOVCA,@A+DPTR;A←(A+DPTR)例如:——以@偏移量寄存器+变址寄存器的形式表示操作数的存在方式偏移量寄存器:A变址寄存器:DPTR或PC第3章单片机的汇编语言与程序设计MOVC,07H;指令原形MOVC,bitORL20H.7,C;指令原形ORLbit,CSETBP1.0;指令原形SETBbit(6)位寻址具有位地址的单元:低128字节RAM中的可位寻址区(位地址0~7FH);SFR中可位寻址的单元(位地址80H~FFH)例如:——以位地址的形式(bit)表示操作数的存在方式第3章单片机的汇编语言与程序设计(7)相对寻址rel一般用语句标号代替——以偏移量的形式(rel)表示操作数的存在方式相对寻址主要用于实现控制转移功能例如:SJMP10H;指令原形SJMPrel例如:CJNEA,30H,LP;指令原形CJNEA,direct,rel例如:PC目的=PC当前+relrel=PC目的-PC当前……….…….0122H0123H0124HxxHxxHxxH80H10HROM0133H第3章单片机的汇编语言与程序设计例3.2:已知片内RAM38H单元中的数为12H,试分析如下程序段并指出其功能注意:片内RAM38H单元中数不能直接传送到外部RAM的1818H单元,必须经过累加器A的转传。功能:将片内RAM38H单元中的数12H传送到片外RAM的1818H单元中。MOVR0,#38HMOVDPTR,#1818HMOVA,@R0MOVX@DPTR,A;Rn←data;DPTR←data16;A←(Ri);(DPTR)←AR0=#38HDPTR=#1818HA←38H=#12H1818H=#12H能否直接将(DPTR)←(R0),即MOVX@DPTR,@R0第3章单片机的汇编语言与程序设计例3.3:试分析如下程序段并指出其功能MOVDPTR,#120HMOVA,#5MOVCA,@A+DPTRMOV30H,A;30H←A功能:将ROM125H地址中的数取出送到片内RAM的30H单元中。意义:DPTR作为数据块的首地址,A作为偏移量,DPTR+A作为数据指针,将事先存放在ROM数据块中的数据提取出来——查表。;DPTR←#120H;A←125H;A←#5能否推广到MOVXA,@A+DPTR第3章单片机的汇编语言与程序设计设ROM120H地址开始的10个单元中存放有整数0~9的平方值,则下述程序可实现0~9任意数x的平方值查表,且结果存入片内RAM的y单元功能。ROM地址数值0129H810128H640127H490126H360125H250124H160123H090122H040121H010120H00MOVR0,#y;y是RAM地址MOVDPTR,#120H;数据块首地址MOVA,#x;0≤x≤9MOVCA,@A+DPTRMOV@R0,A;结果送RAM地址例3.3’:数据块首地址第3章单片机的汇编语言与程序设计例3.4:已知0~9的ASCII码为30H~39H。若片内RAM70H中有一个在0~9范围内的数,试编程把它转换为相应的ASCII码。解:利用半字节交换指令把0~9装配成相应的ASCII码。MOVR0,#70H;R0←#70HMOVA,#30H;A←#30HXCHDA,@R0;A中形成ASCII码MOV@R0,A;ASCII码送回70H单元0-3第3章单片机的汇编语言与程序设计例3.6:试解读如下程序并说明其功能MOVA,#34HADDA,#0E7HMOV40H,AMOVA,#12HADDCA,#0FHMOV41H,A;A←#34H;A←#34H+#0E7H;40H←A;A←#12H;A←#12H+#0FH+C;41H←A;A=#1BH,C=#1;40H=#1BH功能:实现两个16位数(1234H与0FE7H)的加法运算,并将结果221BH存入片内RAM40H-41H单元。做法:先对低8位相加,结果存入40H单元;再对高8位带进位相加,结果存入片内RAM41H和40H单元中。;A=#22H,C=#0;41H=#22H第3章单片机的汇编语言与程序设计例3.7:试解读如下程序并说明其功能CLRCMOVA,#34HSUBBA,#0E7HMO