1、单片机原理及应用第一章 绪论1. 什么叫单片机?其主要特点有哪些?在一片集成电路芯片上集成微处理器、存储器、I/O接口电路,从而构成了单芯片微型计算机,即单片机。特点:控制性能和可靠性高、体积小、价格低、易于产品化、具有良好的性价比。第二章 80C51的结构和原理1.80C51的基本结构a. CPU系统l 8位CPU,含布尔处理器;l 时钟电路;l 总线控制逻辑。b.存储器系统l 4K字节的程序存储器(ROM/EPROM/FLASH,可外扩至64KB);l 128字节的数据存储器(RAM,可外扩至64KB);l 特殊功能寄存器SFR。c.I/O口和其他功能单元l 4个并行I/O口;l 2个16
2、位定时/计数器;l 1个全双工异步串行口;l 中断系统(5个中断源,2个优先级)2.80C51的应用模式a. 总线型单片机应用模式u 总线型应用的“三总线”模式;u 非总线型应用的“多I/O”模式3.80C51单片机的封装和引脚a. 总线型DIP40引脚封装l RST/VPO:复位信号输入引脚/备用电源输入引脚;l ALE/:地址锁存允许信号输出引脚/编程脉冲输入引脚;l /VPP:内外存储器选择引脚/片内EPROM编程电压输入引脚;l :外部程序存储器选通信号输出引脚b.非总线型DIP20封装的引脚l RST:复位信号输入引脚4.80C51的片内存储器增强型单片机片内数据存储器为256字节,
3、地址范围是00HFFH。低128字节的配情况与基本型单片机相同。高128字节一般为RAM,仅能采用寄存器间接寻址方式询问。注意:与该地址范围重叠的特殊功能寄存器SFR空间采用直接寻址方式询问。5.80C51的时钟信号晶振周期为最小的时序单位。一个时钟周期包含2个晶振周期。晶振信号12分频后形成机器周期。即一个机器周期包含12个晶振周期或6个时钟周期。6.80C51单片机的复位定义:复位是使单片机或系统中的其他部件处于某种确定的初始状态。a. 复位电路两种形式:一种是上电复位;另一种是上电与按键均有效的复位。b.单片机复位后的状态单片机的复位操作使单片机进入初始化状态。初始化后,程序计数器PC=
4、0000H,所以程序从0000H地址单元开始执行。特殊功能寄存器复位后的状态是确定的。P0P3为FFH,SP为07H,SBUF不定,IP、IE和PCON的有效位为0,其余的特殊功能寄存器的状态为00H.相应的意义为:l P0P3=FFH,相当于各口锁存器已写入1,此时不但可用于输出,也可以用于输入;l SP=07H,堆栈指针指向片内RAM的07单元;l IP、IE和PCON的有效位为0,各中断源处于低优先级且均被关断、串行通讯的波特率不加倍;l PSW=00H,当前工作寄存器为0组。7.80C51的存储器组织功能:存储信息(程序和数据)a. 程序存储器低端的一些地址被固定地用作特定的入口地址:
5、 0000H:单片机复位后的入口地址; 0003H:外部中断0的中断服务程序入口地址; 000BH:定时/计数器0溢出中断服务程序入口地址; 0013H:外部中断1的中断服务程序入口地址; 001BH:定时/计数器1溢出中断服务程序入口地址; 0023H:串行口的中断服务程序入口地址。8.80C51单片机的数据存储器配置80C51单片机数据存储器分为片外RAM和片内RAM两大部分。80C51片内RAM的128B部分分成工作寄存器区、位寻址区、通用RAM三大部分。基本型单片机片内RAM的地址范围是00H7FH。增强型单片机片内除地址范围为00H7FH的128B RAM外,又增加了80HFFH的高
6、128B的RAM。增加的这部分RAM仅能采用间接寻址方式访问。片外RAM地址空间为64KB,地址范围是0000HFFFFH。与程序存储器地址空间不同的是,片外RAM地址空间与片内RAM地址空间在地址的低端0000H007FH是重叠的。访问片外RAM时采用指令MOVX实现,访问片内RAM采用指令MOV,无读写信号产生。a. 工作寄存器区80C51单片机片内RAM低端的00H1FH共32B,分成4个工作寄存器组,每组占8个单元。l 寄存器0组:地址00H07H;l 寄存器1组:地址08H0FH;l 寄存器2组:地址10H17H;l 寄存器3组:地址18H1FH。程序运行时,只能有一个工作寄存器组作
7、为当前工作寄存器组;当前工作寄存器组的选择由特殊功能寄存器中得程序状态字寄存器PSW的RS1、RS0来决定。b.位寻址区内部RAM的20H2FH共16个字节是位寻址区。其128位的地址范围是00H7FH。c.通用RAM区位寻址区之后的30H7FH共80个字节为通用RAM区。这些单元可以作为数据缓冲器使用。实际应用中,常需在RAM区设置堆栈。80C51的堆栈一般设在30H7FH的范围内,栈顶的位置由堆栈指针SP指示。复位时SP的初值为07H,在系统初始化时可以重新设置。9.80C51单片机的特殊功能寄存器a. 程序状态字寄存器PSW,8位。含义如下: CY:进位、借位标志。有进位、借位时CY=1
8、,否则CY=0; AC:辅助进位、借位标志 F0:用户标志位,由用户自己定义 RS1、RS0:当前工作寄存器组选择位 OV:溢出标志位。有溢出时OV=1,否则0V=0 P:奇偶标志位。存于ACC中的运算结果有奇数个“1”时P=1,否则P=0。10. P0口、P2口的结构P0口作为分时复用的低8位地址/数据总线,P2口作为高8位地址总线。a. P0口的结构l P0用作通用I/O口输出驱动级工作在需外接上拉电阻的漏极开路方式;P0口在作为通用I/O口,属于准双向口。l P0用作地址/数据总线b. P2口的结构P2口的输出驱动电路与P0口不同,内部设有上拉电阻。l P2用作通用I/O口P2口在作为通
9、用I/O口,属于准双向口。l P2用作地址总线11. P3口结构a. P3用作第一功能的通用I/O口b. P3用作第二功能使用l P3.0:RXD(串行口输入);l P3.1:TXD(串行口输出);l P3.2:(外部中断0输入);l P3.3:(外部中断1输入);l P3.4:T0(定时器0的外部输入);l P3.5:T1(定时器1的外部输入);l P3.6:(片外数据存储器“写”选通控制输出);l P3.7:(片外数据存储器“读”选通控制输出)。第三章 80C51的指令系统1.80C51的寻址方式表3.1 寻址方式所对应的寄存器和存储空间序号寻址方式寄存器或存储空间1基本方式寄存器寻址寄存
10、器R0R7,A、AB、DPTR和C(布尔累加器)2直接寻址片内RAM低128字节、SFR3寄存器间接寻址片内RAM(R0,R1,SP)片外RAM(R0,R1,DPTR)4立即寻址ROM5扩展方式变址寻址ROM(A+DPTR,A+PC)6相对寻址ROM(PC当前值的-128+127字节)7位寻址可寻址位(内部RAM20H2FH单元的位和部分SFR的位)2. 特殊传送指令表3.3特殊传送指令编号指令分类指令机器码字节机器周期数1ROM查表MOVC A,A+DPTR93H22MOVC A,A+PC83H23读片外RAMMOVX A,DPTRE0H24MOVX A,RiE2H(E3H)25写片外RAM
11、MOVXDPTR,AF0H26MOVXRi,AF2H(F3H)27堆栈操作PUSH directC0H2direct8POP directD0H2directl 堆栈操作在80C51单片机中,堆栈的生长方向是向上的。入栈操作时,先将SP+1,然后将指令指定的直接地址单元的内容存入SP指向的单元;出栈操作时,将SP指向的单元内容传送到指令指定的直接地址单元,然后SP-1。系统复位时,SP的内容位07H。SP的值越小,堆栈深度越深。PUSH direct:POP direct:一般在中断、子程序调用时发生堆栈操作l MOV、MOVX、MOVC区别MOV:单片机内部数据传递;MOVX:单片机与片外R
12、AM和I/O口电路的数据传递;MOVC:ROM的查表3. 逻辑运算与循环类指令逻辑与:编号指令分类指令1逻辑与ANL direct,A2ANL direct,#data3ANL A,Rn4ANL A,direct5ANL A,Ri6ANL A,#data前两条把源操作数与直接地址指示内容相与;后四条是把源操作数与累加器A的内容相与,送入A逻辑或:编号指令分类指令1逻辑或ORL direct,A2ORL direct,#data3ORL A,Rn4ORL A,direct5ORL A,Ri6ORL A,#data逻辑异或:编号指令分类指令1逻辑异或XRL direct,A2XRL direct,
13、#data3XRL A,Rn4XRL A,direct5XRL A,Ri6XRL A,#data累加器清0和取反CLRA清0CPLA取反累加器循环移位RR右移RRCRL左移RLC4. 控制转移类指令短跳转:AJMP;长跳转:LJMP;相对跳转:SJMP。由于LJMP指令提供的是16位地址,因此程序可以转向64KB的程序存储器地址空间的任何单元。累加器判0转移:JZ rel:(A)=0,则;JNZ rel:(A)比较不相等转移(目的字节与源字节不相等则转移):CJNE A,direct,rel减1不为0转移:DJNZRn,relDJNZdirect,rel将操作数的循环控制单元的内容减1,并判断
14、是否为0.若不为0,一直循环。若为0,程序往下执行。调用:ACALL 短调用;LCALL 长调用返回:RET 子程序返回指令;RETI 中断服务子程序返回指令CPL 取反第四章1. 查表程序有一变量存放在片内RAM的20H单元,其取值范围为00H05H。要求编制一段程序,根据变量值求平方值,并存入片内RAM的21H单元。程序如下: ORG 1000HSTART:MOV DPTR,#2000H MOV A,20H MOVC A,A+DPTR MOV 21H,A SJMP $ ORG 2000HTABLE:DB 00,01,04,09,16,25 END2. 双字节无符号数加法设被加数存放在内部R
15、AM的51H、50H单元,加数存放在内部RAM的61H、60H单元,相加的结果存放在内部RAM的51H、50H单元,进位存放在位寻址区的00H位中,实现此功能的程序段如下:MOV R0,#50H ;被加数的低字节地址MOV R1,#60H ;加数的低字节地址MOV A,R0 ;取被加数低字节ADD A,R1 ; 加上加数低字节MOV R0,A ;保存低字节相加结果INC R0 ;指向被加数高字节INC R1 ; 指向加数高字节MOV A,R0 ;取被加数高字节ADDC A,R1 ;加上加数高字节(带进位加)MOV R0,A ;保存高字节相加结果MOV 00H,C ;保存进位3. 双分支程序设变
16、量x以补码的形式存放在片内RAM的30H单元,变量y与x的关系是:当x0时,y=x;当x=0时,y=20H;当x0时,y=x+5。编制程序,根据x的大小求y并返回原单元。程序段如下:START:MOV A,30H JZ NEXT ANL A,#80H ;判断符号位 JZ LP MOV A,#05H ADD A,30H MOV 30H,A SJMP LPNEXT: MOV 30H,#20H LP: SJMP $4. 多分支程序根据R7的内容转向相应的处理程序。设R7的内容为0N,对应的处理程序的入口地址分别为PP0PPN。程序段如下:START:MOV DPTR,#TAB ;置分支入口地址表首址
17、 MOV A,R7 ADD A,R7 MOV R3,A MOVC A,A+DPTR ;取高位地址 XCH A,R3 INC A MOVC A,A+DPTR ;取低位地址 MOV DPL,A ;处理程序入口地址低8位送DPL MOV DPH,R3 ;处理程序入口地址高8位送DPH CLR A JMP A+DPTRTAB: DW PP0 DW PP1 DW PPN5. 循环程序先执行后判断;先判断后执行50ms延时程序若晶振频率为12MHZ,则一个机器周期为1s,执行一条DJNZ指令需要2个机器周期,即2s。采用循环计数法延时,循环次数可通过计算获得,并选择先执行后判断的循环结构。程序段如下:DE
18、L::MOV R7,#200 ;1sDEL1:MOV R6,#123 ;1s NOP ;1sDEL2:DJNZ R6,DEL2 ;2s共(2*123)s DJNZ R7,DEL1 ;2s共(2*123+2+2)*200+1s,即50.001ms RET6. 子程序及其调用a. 现场保护与恢复的结构l 在主程序实现l 在子程序中实现b.子程序调用时,参数的传递方法l 利用累加器或寄存器l 利用存储器l 利用堆栈操作7. 常用程序举例a. 多字节无符号数的加法设两个N字节的无符号数分别存放在内部RAM中以 DATA1和DATA2 开始的单元中。相加后的结果要求存放在DATA2数据区中。程序段如下:
19、 MOV R0,#DATA1 MOV R1,#DATA2 MOV R7,#N ;置字节数 CLR CLOOP:MOV A,R0 ADDC A,R1 ;求和 MOV R1,A ;存结果 INC R0 ;修改指针 INC R1 DJNZ R7,LOOPb.多字节无符号数的减法设两个N字节的无符号数分别存放在内部RAM中以DATA1和DATA2开始的单元中。相减后的结果要求存放在DATA2数据区中。程序段如下: MOV R0,#DATA1 MOV R1,#DATA2 MOV R7,#N ;置字节数 CLR CLOOP:MOV A,R0 SUBB A,R1 ;求差 MOV R1,A ;存结果 INC
20、R0 ;修改指针 INC R1 DJNZ R7,LOOPc.十六进制数与ASCII码间的转换当十六进制数在09之间时,其对应的ASCII码值为该十六进制数加30H;当十六进制数在AF之间时,其对应的ASCII码值为该十六进制数加37Hd.BCD码与二进制数之间的转换双字节二进制数转换成BCD码设(R2R3)为双字节二进制数,(R4R5R6)为转换完的压缩型BCD码。程序段如下:DCDTH:CLR A MOV R4,A ;R4清0 MOV R5,A ;R5清0 MOV R6,A ;R6清0 MOV R7,#16 ;计数初值LOOP:CLR C MOV A,R3 RLC A MOV R3,A ;R
21、3左移一位并送回 MOV A,R2 RLC A MOV R2,A ;R2左移一位并送回 MOV A,R6 ADDC A,R6 DA A MOV R6,A ;(R6)乘2并调整后送回 MOV A,R5 ADDC A,R5 DA A MOV R5,A ;(R5)乘2并调整后送回 MOV A,R4 ADDC A,R4 DA A MOV R4,A ;(R4)乘2并调整后送回 DJNZ R7,LOOP 第五章 80C51的中断系统及定时/计数器1.80C51的结构80C51系列单片机的中断系统有5个中断源,2个优先级,可实现二级服务中断嵌套。表5.1 各中断源响应优先级及中断服务程序入口表中断源中断标志
22、中断服务程序入口优先级顺序外部中断0()IE00003H高定时/计数器0(T0)TF0000BH外部中断1()IE10013H定时/计数器1(T1)TF1001BH串行口RI或T10023H低注:R1、T1必须由软件清除。另外,所有能产生中断的标志位均可由软件置1或清0,由此可以获得与硬件使之置1或清0同样的效果。2. 中断响应条件CPU响应中断的条件是:第一,中断源有中断请求;第二,此中断源的中断允许位为1;第三是CPU开中断(即EA=1)。同时满足这3个条件时,CPU才可能响应中断。3. 中断返回(使用RETI指令)RETI指令能使CPU结束中断服务程序的执行,返回到曾经被中断过的程序处,
23、继续执行主程序。功能:l 将中断响应时压入堆栈保存的断点地址从栈顶弹出送回PC,CPU从原来中断的地方继续执行程序;l 将相应中断优先级状态触发器清0,通知中断系统,中断服务程序已执行完毕。注:l 外部中断定义为电平触发方式,中断标志位的状态随CPU在每个机器周期采样到的外部中断输入引脚的电平变化而变化。电平触发方式适合于外部中断输入以低电平输入且在中断服务程序中能清除外部中断的情况。l 外部中断定义为边沿触发方式,在相继连续的两次采样中,一个周期采样到外部中断输入为高电平,下一个周期采样到为低电平,则在IE0或IE1中将所存一个逻辑1。边沿触发方式适合于以负脉冲形式输入的外部中断请求。4.8
24、0C51的定时/计数器80C51单片机片内集成有两个可编程的定时/计数器:T0和T1,它们既可以工作于定时模式,也可以工作于外部事件计数模式,此外,T1还可以作为串行口的波特率发生器。5. 定时/计数器的控制TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。定时模式=0;计数模式=16. 定时/计数器的定时方式和计数方式的区别 定时方式的计数脉冲源自内部的时钟脉冲,每个机器周期寄存器的值+1,计数频率为震荡频率的1/12; 计数方式的计数脉冲源自相应的外部输入引脚T0或T1,每个下降沿寄存器值+1,最高计数频率为振荡频率的1/24.7. 定时/计数器的工作方式80C51单片机定时/
25、计数器T0有4种工作方式(方式0、1、2、3),T1有3种工作方式(方式0、1、2)。a. 方式0(M1M0=00)13位计数器,由T0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。计数初值公式:X=213Nb. 方式1(M1M0=01)16位计数器,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器。计数个数与计数初值的关系:X=216Nc. 方式2(M1M0=10)方式2为自动重装初值的8位计数方式。TH0为8位初值寄存器。当TL0计数溢出时,由硬件使TF0置1,向CPU发出中断请求,并
26、将TH0中的计数初值自动送入TL0。TL0从初值重新进行加1计数。周而复始,直至TR0=0才会停止。计数个数与计数初值的关系:X=28Nd. 方式3(M1M0=11)只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。方式3时,T0分为两个独立的8位计数器TL0和TH0,TL0使用T0的所有控制位:、GATE、TR0、TF0和。当TL0计数溢出时,由硬件使TF0置1,向CPU发出中断请求。8. 定时/计数器的应用举例a.利用定时/计数器T0方式1,产生10ms的定时,并使P1.0引脚上输出周期为20ms的方波,采用中断方式,设系统时钟频率为12MHZ。解:(1)计算计数
27、初值X:由于晶振为12MHZ,所以机器周期Tcy为1s。所以:N=t/Tcy=10*103/1*106=10000X=216N=6553610000=55536=D8F0H即应将D8H送入TH0中,F0H送入TL0中。(2) 求T0的方式控制字TMOD:M1M0=01,GATE=0,=0,可取方式控制字为01H。(3) 程序清单如下 ORG 0000H LJMP MAIN ;跳转到主程序 ORG 000BH ;T0的中断入口地址 LJMP DVT0 ;转向中断服务程序 ORG 0100HMAIN:MOV TMOD,#01H ;置T0工作于方式1 MOV TH0,#0D8H ;装入计数初值 MO
28、V TL0,#0F0H SETB ET0 ;T0开中断 SETB EA ;CPU开中断 SETB TR0 ;启动T0 SJMP $ ;等待中断DVT0:CPL P1.0 ;P1.0取反输出 MOV TH0,#0D8H ;重新装入计数值 MOV TL0,#0F0H RETI ;中断返回 ENDb.利用定时/计数器T0从P1.0输出周期为1s,脉宽为20ms的正脉冲信号,晶振频率为12MHZ。试设计程序。解:采用定时20ms,然后再计数1、49次的方法实现。a. T0工作在定时方式1时,控制字TMOD配置:M1M0=01,GATE=0,=0,可取方式控制字为01H。b. 计算计数初值X: 晶振为1
29、2MHZ,所以机器周期Tcy为1s。所以: N=t/Tcy=20*103/1*106=20000 X=216N=6553620000=45536=4E20H即应将4EH送入TH1中,20H送入TL1中。c. 实现程序如下: ORG 0000H AJMP MAIN ;跳转到主程序 ORG 0030H MAIN:MOV TMOD,#01H ;置T0工作于方式1 MOV TH0,#4EH ;装入循环计数初值 MOV TL0,#20H ;首次计数值 LP0:SETB P1.0 ACALL NT0 CLR P1.0 MOV R7,#49 ;计数49次 LP1:ACALL NT0 DJNZ R7,LP1
30、AJMP LP0 NT0:MOV TH0,#4EH MOV TL0,#20H SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET ENDc.要求从P1.1引脚输出1000HZ方波,晶振频率为12MHZ。试设计程序。解:采用T0实现。 T0工作在定时方式1时,控制字TMOD配置: M1M0=01,GATE=0,=0,可取方式控制字为01H。 计算计数初值: 晶振为12MHZ,所以机器周期Tcy为1s。1/1000=1*103。所以: N=t/Tcy=0.5*103/1*106=500 X=216N=65536500=65036=FE0CH 即应将FEH送入TH0中,0C
31、H送入TL0中。 实现程序如下: ORG 0000H AJMP MAIN ;跳转到主程序 ORG 000BH ;T0的中断入口地址 LJMP DVT0 ORG 0030H MAIN:MOV TMOD,#01H ;置T0工作于方式1 MOV TH0,#0FEH ;装入循环计数初值 MOV TL0,#0CH ;首次计数值 SETB ET0 ;T0开中断 SETB EA ;CPU开中断 SETB TR0 ;启动T0 SJMP $ ;等待中断 DVT0:CPL P1.1 MOV TH0,#0FEH MOV TL0,#0CH SETB TR0 RETI END第六章1.80C51串行口的控制寄存器80C
32、51系列单片机有一个可编程的全双工串行通信口。80C51串行口的控制寄存器SM0和SM1:串行口工作方式选择位,可选择4种工作方式,如表6.2所示。表6.2 串行口的工作方式SM0SM1方式说明波特率000移位寄存器osc/1201110位异步收发器(8位数据)可变12211位异步收发器(9位数据)osc/64或osc/1213311位异步收发器(9位数据)可变2.80C51串行口的工作方式a. 方式0方式0时,串行口为同步移位寄存器的输入输出方式。主要用于扩展并行输入或输出口。数据由RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均为8位数据,低位在先,高位在后。波特率固定为osc/12。b. 方式1(必须会)串行口定义为方式1时,是10位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚。其中1位起始位,8位数据位,1位停止位。方式1输出当执行一条写SBUF的指令时,就启动了串行口发送过程。在发送移位时钟(由波特率确定)的同步下,从TXD的引脚先送出起始位,然后是8位数据位,最后停止位。一帧数据发送完后,中断标志T1置1。方式1的波特率由定时器T1的溢出率决定。方式1的发送时序如图所示方式1输入(置REN=1启动接收过程)方式1的接收时序如图所示
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100