单片机课程报告.docx
《单片机课程报告.docx》由会员分享,可在线阅读,更多相关《单片机课程报告.docx(23页珍藏版)》请在冰豆网上搜索。
![单片机课程报告.docx](https://file1.bdocx.com/fileroot1/2023-2/3/e9fa5046-c038-45ba-9110-6c9681a21493/e9fa5046-c038-45ba-9110-6c9681a214931.gif)
单片机课程报告
河海大学计算机与信息学院(常州)
单片机原理与应用课程论文
指导老师:
授课班号:
姓名:
学号:
第一章单片机系统结构
一、MCS-51单片机基本特性
1、8位的CPU,片内有振荡器和时钟电路,工作频率为
1~12MHz(Atmel89Cxx为0~24MHz)
2、片内有128/256字节RAM
3、片内有0K/4K/8K等字节程序存储器ROM
4、可寻址片外64K字节数据存储器RAM
5、可寻址片外64K字节程序存储器ROM
6、4个8位的并行I/O口(PIO)
7、1个全双工串行口(SIO/UART)
8、2/3个16位定时器/计数器(TIMER/COUNTER)
9、可处理5/6个中断源,两级中断优先级
10、内置1个布尔处理器和1个布尔累加器(Cy)
11、MCS-51指令集含111条指令
二、单片机的结构
三、单片机的引脚
Vcc,GND,XTAL1,XTAL2(片内振荡电路输入/输出端),RESET,EA/Vpp,ALE/PROG,PSEN,P0.0—P0.7,P1.0—P1.7,P2.0—P2.7,P3.0—P3.7。
RESET:
复位端(正脉冲有效,宽度>2个机器周期),复位使单片机进入某种确定的初始状态:
PC值归零(0000H);各个SFR被赋予初始值(见P.42):
P0~P3=0FFH,Acc=0,B=0,TH0=0,TL0=0,TH1=0,TL0=0,SP=7,PSW=0……
退出处于节电工作方式的停顿状态、退出一切程序进程、退出程序的死循环,从头开始。
EA/Vpp:
寻址外部ROM控制端/编程电源输入端。
低有效,片内无ROM时必须接地;
片内有ROM时并应用时应当接高电平
PSEN:
寻址外部程序存储器时选通外部EPROM的
读控制端(OE)低有效。
四、振荡周期/时钟周期:
Tc=晶振频率fosc(或外加频率)的倒数
状态周期:
Ts=2个时钟周期(Tc)(很少用到此概念)
机器周期:
Tm=6个状态周期(Ts)=12个振荡周期(Tc)
指令周期:
Ti:
执行一条指令所需的机器周期(Tm)数
牢牢记住:
振荡周期=晶振频率fosc的倒数;
1个机器周期=12个振荡周期
1个指令周期=1、2、4个机器周期
五、存储器、堆栈、SFR
1、89C51单片机存储器配置
片内RAM128字节(00H—7FH);
片内RAM前32个单元是工作寄存器区(00H—1FH)
片内RAM有128个可按位寻址的位,占16个单元。
位地址编号为:
00H—7FH,分布在20H—2FH单元
片内21个特殊功能寄存器(SFR)中:
地址号能被8整除的SFR中的各位也可按位寻址(P.33-34)
可寻址片外RAM64K字节(0000H—FFFFH)
可寻址片外ROM64K字节(0000H—FFFFH)
片内FlashROM4K字节(000H—FFFH)
2、存储器配置(片内RAM)
3、堆栈:
在片内RAM中,常常要指定一个专门的区域来存放某些特别的数据,它遵循先进后出和后进先出(LIFO/FILO)的原则,这个RAM区叫堆栈。
功用:
1)子程序调用和中断服务时CPU自动将当前PC
值压栈保存,返回时自动将PC值弹栈。
2)保护现场/恢复现场
3)数据传输
堆栈区由特殊功能寄存器堆栈指针SP管理堆栈区可以安排在RAM区任意位置,一般不安排在工作寄存器区和可按位寻址的RAM区,通常放在RAM区的靠后的位置。
从堆栈取出数据时:
取出的数据是最近放进去的一个数据,也就是当前栈顶的数据。
然后SP再自动减1,仍指着栈顶……
89C51特殊功能寄存器(SFR)
专用于控制、选择、管理、存放单片机内部各部分的工作方式、条件、状态、结果的寄存器。
不同的SFR管理不同的硬件模块,负责不同的功能——各司其职
换言之:
要让单片机实现预订的功能,必须有相应的硬件和软件,而软件中最重要的一项工作就是对SFR写命令(要求)。
4、特殊功能寄存器(PC)
PC不是一个特殊功能寄存器SFR,但其作用又十分重要和特殊
特点:
它是16位的按机器周期自动增1计数器
总指向下一条指令所在首地址(当前PC值)
一切分支/跳转/调用/中断/复位等操作的本质就是:
改变PC值
特殊功能寄存器(PSW)
第二章:
单片机指令系统
一、ASM-51指令的格式
[标号:
]操作码[目的操作数][,源操作数][;注释]
方括符[]表示可选项
标号代表指令所在地址,1-8个字母/数字,“:
”结尾
操作码就是指令功能助记符,指令实体
目的操作数
源操作数
注释,以“;”开头
二、51单片机指令的寻址方式
寻找(或确定)操作数所在单元地址的方式。
寻址方式越多,计算机寻址能力越强,但指令系统也越复杂。
1、寄存器寻址
操作数在寄存器中,如R0-R7,A、B、Cy(位)、DPTR等
例:
MOVA,B;(A)←(B)
MOV30H,R0;(30H)←(R0)
MOVA,R1;(A)←(R1)
2、立即寻址
操作数在指令中直接给出
例:
MOVA,#64H;(A)←立即数64H
ADDA,#05H;(A)←(A)+立即数05H
注意:
符号“#”表明其后跟的是立即数,
立即数——就是数字量本身。
3、直接寻址
指令中直接给出了操作数所在单元的地址或名称
例:
MOVR1,1FH;(R1)←(1FH)
MOV30H,4AH;(30H)←(4AH)
4、寄存器间接寻址
寄存器中的内容是一个地址,该地址单元的内容是所需的操作数。
操作数是通过寄存器间接得到的
例:
[MOVR1,#30H;(R1)←立即数30H]
MOV@R1,#0FH;(30H)←立即数0FH
MOVA,@R1;(A)←((30H))=#0FH
“间接”表示某寄存器中的“内容”只是一个“单元地址”,这个地址单元中存放的数据才是要找的“操作数”。
5、变址寻址
也称为:
基址寄存器+变址寄存器间接寻址
以16位的地址指针寄存器DPTR或16位的PC寄存器为基址寄存器,以累加器A为变址寄存器,两者中的“内容和”形成一个16位的“地址”,该“地址”所指的存储单元中的内容才是操作数。
6、相对寻址
当前PC值加上指令中规定的偏移量rel,构成实际的操作数地址
例:
SJMPrel
操作:
跳转到的目的地址=当前16位PC值+rel
注意:
1)“当前PC值”指程序中下一条指令所在的首地址,
是一个16位数;
2)符号“rel”表示“偏移量”,是一个带符号的单字
节数,范围是:
-128—+127(80H—7FH),
7、位寻址
指令中直接给出了操作数所在的位地址或名称。
例:
CLRP1.0;(P1.0)←0
SETBACC.7;(ACC.7)←1
CPLC;(C)←NOT(C)
三、MCS-51指令集
1、数据传送类指令
内部存储器间传送:
(MOV——16条)
外部数据存储器与累加器间传送:
(MOVX——4条)
程序存储器向累加器传送:
(MOVC——2条)
数据交换:
(XCH,XCHD,SWAP——5条)
堆栈操作:
(PUSH,POP——2条)
(1)、内部存储器间传送指令
a.以累加器A为目的操作数的指令
MOVA,#data;A←#data
MOVA,Rn;n=0~7,A←(Rn)
MOVA,@Ri;i=0,1,A←((Ri))
MOVA,direct;A←(Rn)direct为内部RAM或SFR地址
注意以下两组指令的不同点
MOVA,#20H;(A)=20HA的内容为20H
MOVA,20H;(A)=(20H)A的内容为20H中的内容
b.以Rn为目的操作数的指令
MOVRn,A;Rn←(A),n=0~7
MOVRn,direct;Rn←(direct)
MOVRn,#data;Rn←#data
c.以直接地址为目的操作数的指令
MOVdirect,A;direct←(A)
MOVdirect,Rn;direct←(Rn),n=0~7
MOVdirect,@Ri;direct←((Ri)),i=0,1
MOVdirect,direct;direct←(direct)
MOVdirect,#data;direct←#data
d.以寄存器间接地址为目的操作数指令
MOV@Ri,A;((Ri))←(A),i=0,1
MOV@Ri,direct;((Ri))←(direct)
MOV@Ri,#data;((Ri))←#data
(2)、外部数据存储器与累加器间传送(4条)
类指令可在累加器与以@DPTR或@Ri所代表的外部RAM之间进行数据传送。
MOVXA,@DPTR——(A)¬((DPTR))
MOVXA,@Ri——(A)¬((Ri))
MOVX@DPTR,A——((DPTR))¬(A)
MOVX@Ri,A——((Ri))¬(A)
(3)、程序存储器向累加器传送指令(2条)
MOVCA,@A+DPTR
MOVCA,@A+PC
——通常称为查表指令,寻址方式属:
“基址寄存器+变址寄存器间接寻址”
(4)、数据交换指令(5条)
XCHA,direct(字节互换)
XCHA,@Ri(字节互换)XCHA,Rn(字节互换)
(A)(direct)[或((Ri)),或(Rn)]
XCHDA,@Ri
累加器Acc的低4位与((Ri))的低4位互换,各自的高4位不变
SWAPA
累加器Acc的低4位与自身的高4位互换
(5)、堆栈操作指令(2条)
PUSHdirect——压栈指令
POPdirect——弹栈指令
堆栈区由特殊功能寄存器堆栈指针SP管理
堆栈区可以安排在RAM区任意位置,一般不安排在工作寄存器区和可按位寻址的RAM区,而是放在RAM区的靠后的位置
堆栈总是指向栈顶
通常PUSH与POP两条指令成对使用
2、算术运算类指令
加法运算:
(ADD——4条)
带进位加法运算:
(ADDC——4条)
带借位减法运算:
(SUBB——4条)
加1/减1操作:
(INC,DEC——9条)
单字节乘/除法运算:
(MUL,DIV——2条)
十进制调整:
(DAA——1条)
带进位加法运算:
(ADDC——4条)
带借位减法运算:
(SUBB——4条)
3、逻辑运算及移位类指令(5种/24条)
逻辑与运算:
(ANL——6条)
逻辑或运算:
(ORL——6条)
逻辑异或运算:
(XRL——6条)
累加器清零/取反:
(CLR,CPL——2条)
累加器移位操作:
(RL,RLC,RR,RRC—4条)
4、控制转移类指令(4种/17条)
此类指令改变程序的执行顺序——改变当前PC值
无条件转移:
(LJMP,AJMP,SJMP,JMP——4条)
条件转移(判断跳转):
(JZ,JNZ,CJNE,DJNZ——8条)
子程序调用及返回:
(LCALL,ACALL,RET,RETI——4条)
无条件转移LJMP,AJMP,SJMP,JMP——4条
LJMPaddr16长跳转指令——可在64K范围内跳转
AJMPaddr11绝对跳转指令——可在指令所在的2K范围内跳转
SJMPrel相对跳转指令——可在当前PC-128与+127范围内跳转
JMP@A+DPTR散转指令(间接长跳转指令)——可在以DPTR为基址+A为偏移量之和所指向的64K程序范围内跳转
条件转移
CJNEA,#data,rel
CJNEA,direct,rel
CJNE@Ri,#data,rel
CJNERn,#data,rel
——将A(或@Ri,或Rn)与#data(或direct)相比较,其值不相等就跳转;相等则不跳转,继续往下走。
DJNZdirect,rel
DJNZRn,rel
——将direct(或Rn)里的内容减1,结果不等于0就跳转;等于0则不跳转继续往下走。
子程序调用及返回:
(LCALL,ACALL,RET,RETI——4条)
5、位操作类指令(17条)
位操作类指令以位为单位进行逻辑运算及操作,可分为4种:
位传送:
(MOV——2条)
位清零/置位:
(CLR,SETB——4条)
位逻辑与/或/非运算:
(ANL,ORL,CPL——6条)
位传送指令(2条):
MOVC,bit;(C)¬(bit)
MOVbit,C;(bit)¬(C)
注:
bit表示位地址
位清零/置位指令(4条):
CLRbit(或CLRC);(bit或C)¬“0”
SETBbit(或SETBC);(bit或C)¬“1”
位逻辑与/或/非指令(6条):
ANLC,bit(或ANLC,/bit)
ORLC,bit(或ORLC,/bit)
CPLbit(或CPLC)
注:
“/bit”表示对bit位的反参加运算,bit本身不变
空操作:
NOP“耗时”一个机器周期。
donothing!
第三章单片机中断系统
一、中断概念
1、中断:
是指CPU执行正常程序时,系统中出现特殊请求,CPU暂时中止当前的程序,转去处理更紧急的事件,处理完毕后,CPU返回原程序的过程。
2、中断涉及的几个环节
①中断源②中断申请③开放中断④保护现场⑤中断服务⑥恢复现场⑦中断返回
3、中断响应过程
①、设置中断优先级触发器
②、保护断点:
将断点地址压入堆栈保存,即当前PC值入栈。
③、保护现场:
将ISR中使用到的重要寄存器入栈
④、寻找中断向量:
中断服务程序入口®PC,转入中断服务。
⑤、中断处理:
执行中断源所要求中断服务程序。
⑥、恢复现场:
重要寄存器出栈
⑦、中断返回:
执行中断返回指令,栈顶内容®PC,程序跳转回断点处。
4、单片机的中断源及TCON
2个外部中断请求:
INT0,INT1
2个片内定时器/计数器T0和T1中断请求:
TF0,TF1,(TF2——52子系列有T2)
1个串行口中断请求:
TI/RI
5、CPU识别中断申请的依据
CPU在每个机器周期的S5P2期间,会自动查询各个中断申请标志位,若查到某标志位被置位,将启动中断机制。
TCON:
Timer控制寄存器,是管理定时器工作的SFR(其中低4位管外部中断)
IE0/IE1:
外部中断申请标志位:
=0:
没有外部中断申请;
=1:
有外部中断申请。
IT0/IT1:
外部中断请求的触发方式选择位:
=0:
在INT0/INT1端申请中断的信号低电平有效;
=1:
在INT0/INT1端申请中断的信号负跳变有效.
6、单片机的中断矢量与优先级
(1)、中断矢量:
MCS-51单片机的5个中断源分别对应有各自的中断服务程序入口地址
(2)、中断优先级控制寄存器IP(0B8H)
IP——PT2PSPT1PX1PT0PX0
(3)、中断允许寄存器IE(0A8H)
IEEA—ET2ESET1EX1ET0EX0
二、中断系统硬件结构
第三章并口、定时与串口
一、单片机的I/O引脚结构
1、单片机的引脚(P0口)
P0.0—P0.7:
双向I/O(内置场效应管上拉)
寻址外部程序存储器时分时作为双向8位数据口和输出低8位地址复用口;(可浮空)不接外部程序存储器时可作为8位准双向I/O口使用。
2、单片机的引脚(P1口)
P1.0—P1.7:
准双向I/O口(内置了上拉电阻)
输出时一切照常,仅在作输入口用时要先对其写“1”。
3、单片机的引脚(P2口)
P2.0—P2.7:
双向I/O(内置了上拉电阻)
寻址外部程序存储器时输出高8位地址;不接外部程序存储器时可作为8位准双向I/O口使用。
4、单片机的引脚(P3口)
P3.0—P3.7:
双功能口(内置了上拉电阻)
它具有特定的第二功能。
在不使用它的第二功能时它就是普通的通用准双向I/O口。
二、单片机的定时/计数器
1、TIMER的作用:
定时操作:
定时采样,定时扫描,定时中断
测量外部信号:
累加统计,测量周期等
定时输出:
PWM等
监视系统正常工作与否
定时器:
对片内机器时钟(周期方波)进行计数
计数器:
对Tx引脚输入的负脉冲进行计数
与Timer工作有关的特殊功能寄存器:
TCON、TMOD、THx和TLx
2、MCS-51计数/定时器的实质
实质是计数器,脉冲每一次下降沿,计数寄存器数值将加1.
计数的脉冲如果来源于单片机内部的晶振,由于其周期极为准确,这时称为定时器。
计数的脉冲如果来源于单片机外部的引脚,由于其周期一般不确定,可表示事件发生,这时称为计数器。
定时器控制寄存器TCON(88H)
TFx:
Timer0/1计数溢出标志位。
=1计数溢出;=0计数未满
TFx标志位可用于申请中断或供CPU查询。
在进入中断服务程序时会自动清零;但在
查询方式时必须软件清零。
TRx:
Timer0/1运行控制位。
=1启动计数;=0停止计数
3、定时器方式寄存器TMOD(89H)
M1,M0:
工作方式定义位(定义4种方式):
00:
13位Timer——用它无益,不要记它!
01:
16位Timer——经常用到
10:
可自动重装的8位Timer——经常用到
11:
T0分为2个8位Timer;T1此时不工作
——因为没有带来什么好处,几乎无用
C/T:
计数器/定时器选择位
=1外部事件计数器。
对Tx引脚的负脉冲计数;
=0片内时钟定时器。
对机器周期脉冲计数定时
GATE门控位:
Timer可由软件与硬件两者控制
aGATE=0——普通用法
Timer的启/停由软件对TRx位写“1”/“0”控制
GATE=1——门控用法
Timer的启/停由软件对TRx位写“1”/“0”
和在INTx引脚上出现的信号的高/低共同控制
(INTx引脚高电平允许定时/计数)
4、定时器结构与工作方式
(1)、工作方式1:
——16位的定时/计数器
工作方式1的编程要点:
THx/TLx赋初值:
THx赋高8位,TLx赋低8位
TMOD选方式:
写“M1,M0”=01b选方式1
若不用门控位,直接用软件写TRx控制启/停
a若使用门控位,先置位TRx,然后由INTx端的高/低电平来控制其启/停
若要允许中断,还须先置位ETx、EA等中断允许控制位,并编写中断服务程序
a若不用中断,可查询“计数溢出标志TFx”的方式工作,但溢出标志TFx须软件清0
方式1:
定时初值/定时时间计算
定时器的计数单元每个机器周期自动加1直到溢出(0)
T=(12/fosc)*(2^16-a)us
(2)、工作方式2的编程
TMOD寄存器选方式:
写“M1,M0”=10b选中方式2
THx/TLx赋相同初值
在TLx计数达到0FFH再加“1”时,TL0将溢出,“TFx”置1去申请中断,同时THx中的值自动重装(Copy)进TLx其他用法与各种方式1完全相同
方式2:
定时初值/定时时间计算
定时器的计数单元每个机器周期自动加1直到溢出(0)
T=(12/fosc)*(2^8-a)us(最大计数值:
256)
Timer工作方式3——几乎无用
(3)、定时器小结:
(2个16位加法计数器)
工作方式由TMOD决定;
计数/定时由C/T位决定
工作方式0(13位)永远不用
工作方式3(T0拆为双8位)几乎无用
工作方式1(16位)经常用到
工作方式2(8位自动重装)经常用到
运行/停止由TRx位控制,(当GATE=1时:
由TRx位和Tx引脚上的信号共同控制)
从初值按机器周期或外部脉冲递加,溢出位
TFx申请中断;中断允许由ETx位和EA位控制,特别注意:
不管定时时间到了与否,只要不控制TRx位,定时器就不会停止。
注意:
定时初值
三、串行通信与并行通讯
并行通讯:
数据的各位同时传送。
传输线的根数与数据位数相等。
串行通讯:
数据逐位顺序传送。
传输线仅需1-2根。
串行通信的基本特征是数据逐位顺序进行传送
串行通信的格式及约定(如:
同步方式、通讯速率、数据块格式、信号电平……等)不同,形成了多种串行通信的协议与接口标准。
全双工串行接口(UART)
全双工:
(串行通信)收/发可同时进行
半双工:
(串行通信)收/发不可同时进行
单工:
数据单向传送
异步串行通信:
以字符为单位进行传送
同步串行通信:
以数据块为单位进行传送
波特率(bps.):
每秒钟传输的数据位数
1、异步串行通信数据格式
2、串行口的结构
两个同名的接收/发送缓冲寄存器SBUF(99H)
指令MOVSBUF,A启动一次数据发送,可向SBUF
再发送下一个数
指令MOVA,SBUF完成一次数据接收,SBUF可再
接收下一个数
接收/发送数据,无论是否采用中断方式工作,每接收/发送一个数据都必须用指
令对RI/TI清0,以备下一次收/发。
3、串行口相关的SFR(SCON,PCON)
SM0,SM1:
串行口4种工作方式的选择位。
00方式0:
8位移位寄存器I/O,波特率固定为fosc/12
01方式1:
8位UART(1+8+1位),波特率可变,按公式计算
10方式2:
9位UART(1+8+1+1位),波特率固定=foscx1/32或1/64
11方式3:
9位UART(1+8+1+1位),波特率可变,按公式计算
SM2:
串行口多机通信控制位(作为方式2、方式3的附加控制位)
RI,TI:
串行口收/发数据申请中断标志位
=1申请中断;=0不申请中断
RB8:
在方式2、3中,是收到的第9位数据。
在多机通信中,用作区别地址帧/数据帧的
标志。
(奇偶校验)
TB8:
方式2、3中,是要发送的第9位数据。
多机通信中,TB8=0表示发送的是数据;
TB8=1表示发送的是地址。
(奇偶校验)
REN:
串行口接收允许控制位
=1表示允许接收;=0禁止接收。
4、串行口工作方式
(1)、工作方式0:
8位移位寄存器I/O方式
发送:
SBUF中的串行数据由RxD逐位移出;
TxD输出移位时钟,波特率=fosc/12;
a每送出8位数据TI就自动置1;