单片机学习笔记.docx

上传人:b****3 文档编号:12891598 上传时间:2023-04-22 格式:DOCX 页数:18 大小:138.16KB
下载 相关 举报
单片机学习笔记.docx_第1页
第1页 / 共18页
单片机学习笔记.docx_第2页
第2页 / 共18页
单片机学习笔记.docx_第3页
第3页 / 共18页
单片机学习笔记.docx_第4页
第4页 / 共18页
单片机学习笔记.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

单片机学习笔记.docx

《单片机学习笔记.docx》由会员分享,可在线阅读,更多相关《单片机学习笔记.docx(18页珍藏版)》请在冰豆网上搜索。

单片机学习笔记.docx

单片机学习笔记

C51的机器周期和指令周期

(1)振荡周期:

也称时钟周期,是指为单片机提供时钟脉冲信号的振荡源的周期,实验板上一般为11.0592MHZ。

(2)状态周期:

每个状态周期为时钟周期的2倍,是振荡周期经二分频后得到的。

(3)机器周期:

一个机器周期包含6个状态周期S1~S6,也就是12个时钟周期。

在一个机器周期内,CPU可以完成一个独立的操作。

(4)指令周期:

它是指CPU完成一条操作所需的全部时间。

每条指令执行时间都是有一个或几个机器周期组成。

MCS-51系统中,有单周期指令、双周期指令和四周期指令。

I/O口

I/O口,可作为输入和输出端口,在写程序时,1为高电平,0为低电平,高位控制大数,低位控制小数。

电阻标号认阻值

标号103,表示10*103Ω,即10kΩ,150表示15*100Ω,即15Ω。

1002表示100*102Ω;标号3R0表示3Ω,4K7表示4.7KΩ,R002表示0.002Ω。

LED灯

LED灯,即发光二极管,通过5mA左右的电流即可点亮,导通后两端电压为1.7V左右,在电路中,有一个电阻与之串联,二极管具有先分压特性,电阻电压为电源电压减去二极管两端的电压,电路中电流为电阻电压除以电阻大小。

在控制中,利用串口的电压高低来使二极管点亮或熄灭。

可以利用延时使二极管闪烁。

在C语言中,可以使用库实现左移和右移。

_crol_(变量,位数),其返回值为一个十六进制的数,将其赋给端口,实现循环左移。

_cror_()与_crol_()相同,实现循环右移。

两个函数包含在intrins.h这个头文件中。

移位

(1)左移。

C51中操作符为“<<”,每执行一次左移指令,被操作的数将最高位移入单片机的PSW寄存器的CY为,CY位中原来的数丢弃,最低位补0,其它位依次向左移动一位。

(2)右移。

C51中操作符为“>>”,每执行一次左移指令,被操作的数将最低位移入单片机的PSW寄存器的CY为,CY位中原来的数丢弃,最高位补0,其它位依次向右移动一位。

数码管

共阴极共阳极

数码管有两种接法,一种是共阴极,一种是共阳极。

使用LED显示器时,要注意区分这两种不同的接法。

一个数码管有10个引脚,其中有两个引脚是连在一起的(如上图中1脚),这两个引脚即为公共端。

对于共阴极的数码管来说,该公共端接低电平;对于共阳极的数码管来说,该公共端接高电平。

为了显示数字或字符,必须对数字或字符进行编码。

七段数码管加上一个小数点,共计8段。

因此为LED显示器提供的编码正好是一个字节。

静态显示方式

LED显示器工作方式有两种:

静态显示方式和动态显示方式。

静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。

当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。

这种方法的优点是占用CPU时间少,显示便于监测和控制。

缺点是硬件电路比较复杂,成本较高。

可用74HC573控制位选,74HC573芯片控制段选。

动态显示方式

动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。

选亮数码管采用动态扫描显示。

所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。

动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。

可用74HC138控制位选,74HC573芯片控制段选。

按键

单片机检测按键的原理

单片机的I/O口既可作为输入使用,也可作为输出。

我们把按键的一端接地,另一端与单片机的某个I/O口相连,开始时,每个I/O口为高电平,我们可以通过程序检测该I/O口是否为低电平,当有按键按下时,即I/O口通过按键与地相连,该I/O变成低电平,则利用检测程序来执行相应的代码。

但是,在按键按下和松开时都会有抖动现象,因此在程序时应加入去抖。

代码如下:

if(key1==0)//按键去抖

{

delay(10);

if(key1==0)

{

程序代码;

while(!

key1);

}

}

4*4矩阵键盘

检测时,先将P10置0,其余都为1,然后通过检测P14,P15,P16,P17是否为0来判断第一行中那个I/O口被按下。

例如当K0按下,则P14与P10相连,P14也为0。

在检测时,先给P1口赋值,赋值时应使P14,P15,P16,P17都为1,P10,P11,P12,P13中有一个为0。

赋过值后,再将其与0xf0进行按位与运算,检测P1值是否与0xf0相等来判断有没有按键被按下。

当有按键被按下后,在判断P1的值是否等于0xe0,0xd0,0xb0,0x70中的哪一个,来判断哪一列的按键按下。

程序代码如下:

temp=0xfe;

P1=temp;

temp=P1&0xf0;

while(temp!

=0xf0)

{

switch(temp)

{

case0xe0:

num=1;break;//要执行的程序

case0xd0:

num=2;break;//要执行的程序

case0xb0:

num=3;break;//要执行的程序

case0x70:

num=4;break;//要执行的程序

}

temp=P1&0xf0;

if(temp==0xf0)

{

break;

}

}

temp=0xfd;

P1=temp;

temp=P1&0xf0;

while(temp!

=0xf0)

{

switch(temp)

{

case0xe0:

num=5;break;//要执行的程序

case0xd0:

num=6;break;//要执行的程序

case0xb0:

num=7;break;//要执行的程序

case0x70:

num=8;break;//要执行的程序

}

temp=P1&0xf0;

if(temp==0xf0)

{

break;

}

}

temp=0xfb;

P1=temp;

temp=P1&0xf0;

while(temp!

=0xf0)

{

switch(temp)

{

case0xe0:

num=9;break;//要执行的程序

case0xd0:

num=10;break;//要执行的程序

case0xb0:

num=11;break;//要执行的程序

case0x70:

num=12;break;//要执行的程序

}

temp=P1&0xf0;

if(temp==0xf0)

{

break;

}

}

temp=0xf7;

P1=temp;

temp=P1&0xf0;

while(temp!

=0xf0)

{

switch(temp)

{

case0xe0:

num=13;break;//要执行的程序

case0xd0:

num=14;break;//要执行的程序

case0xb0:

num=15;break;//要执行的程序

case0x70:

num=16;break;//要执行的程序

}

temp=P1&0xf0;

if(temp==0xf0)

{

break;

}

}

中断定时器计数器

在52单片机中,一共有6个中断源,他们的符号、名称及产生的条件分别解释如下:

INT0—外部中断0,有P3.2端口线引入,低电平或下降沿引起。

INT1—外部中断1,有P3.3端口线引入,低电平或下降沿引起。

T0—定时器/计数器0中断,有T0计数器计满后回零引起。

T1—定时器/计数器1中断,有T1计数器计满后回零引起。

T2—定时器/计数器2中断,有T2计数器计满后回零引起。

TI/RI—串行口中断,串行端口完成一帧字符发送/接收后引起。

在51单片机中,没有T2。

定时器/计数器控制寄存器TCON

TCON寄存器用来控制定时器中断的启、停,标志定时器溢出和中断情况。

单片机复位时TCON全部清零。

为位寻址操作。

位序号

D7

D6

D5

D4

D3

D2

D1

D0

位符号

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

位地址

8FH

8EH

8DH

8CH

8BH

8AH

89H

88H

其中,TF1、TR1、TF0、TR0位用于定时器/计数器;IE1、IT1、IE0、IT0位用于外部中断。

TF1—定时器1溢出标志位。

当定时器1按照单片机的机器周期计满溢出时,有硬件使TF1置1,并申请中断。

进入中断服务程序后,有硬件自动清0。

需要注意的是,如果使用定时器的中断,那么该位完全不用人为操作,但是如果使用软件查询方式的话,当查询到该位置1后,就需要用软件清0。

TR1—定时器1运行控制位。

由软件清0关闭定时器1。

当GATE=1,且INT1为高电平时,TR1置1启动定时器1;当GATE=0时,TR1置1启动定时器1。

TF0—定时器0溢出标志位,其功能及操作方法同TF1。

TR1—定时器0运行控制位,其功能及操作方法同TR1。

IT1—外部中断1触发方式选择位。

IT1=0,为电平触发方式,引脚INT1(P3.3)上低电平有效。

IT1=1,为跳变沿触发方式,引脚INT1(P3.3)上的电平从高到低的负跳变有效。

IE1—外部中断1请求标志。

当IT1=0时,为电平触发方式,每个机器周期的S5P2采样INT1引脚,若INT1脚(即P3.3脚)为低电平,则置1,向CPU申请中断,否则IE1清0。

当IT1=1时,INT1为跳变沿触发方式,当第一个机器周期采样到INT1为低电平时,则IE1置1。

IE1=1,表示外部中断1正在向CPU申请中断。

当CPU响应中断,转向中断程序时,该位由硬件清0。

IT0—外部中断0触发方式选择位,其功能及操作方法同IT1。

IE1—外部中断1请求标志,其功能及操作方法同IE1。

中断允许寄存器IE

中断允许寄存器用来设定各个中断源的打开和关闭,可进行位寻址操作。

位序号

D7

D6

D5

D4

D3

D2

D1

D0

位符号

EA

---

ET2

ES

ET1

EX1

ET0

EX0

位地址

AFH

---

ADH

ACH

ABH

AAH

A9H

A8H

EA—全局中断允许位。

EA=1,打开全局中断控制,在此条件下,有各个中断控制位确定相应中断的打开或关闭。

EA=0,关闭全部中断。

---—无效位。

ET2—定时器/计数器2中断允许位。

ET2=1,打开T2中断。

ET2=0,关闭T2中断。

ES—串行口中断允许位。

ES=1,打开串行口中断。

ES=0,关闭串行口中断。

ET1—定时器/计数器1中断允许位。

ET1=1,打开T1中断。

ET1=0,关闭T1中断。

EX1—外部中断1中断允许位。

EX1=1,打开外部中断1中断。

EX1=0,关闭外部中断0中断。

ET0—定时器/计数器0中断允许位。

ET0=1,打开T0中断。

ET0=0,关闭T0中断。

EX1—外部中断1中断允许位。

EX1=1,打开外部中断1中断。

EX1=0,关闭外部中断0中断。

EX0—外部中断0中断允许位。

EX0=1,打开外部中断1中断。

EX0=0,关闭外部中断0中断。

定时器/计数器工作方式寄存器TMOD

TMOD寄存器用来确定定时器的工作方式及功能选择。

单片机复位时全部清0,不可进行位寻址操作,字节地址为89H。

位序号

D7

D6

D5

D4

D3

D2

D1

D0

位符号

GATE

C/T

M1

M0

GATE

C/T

M1

M0

定时器1定时器0

GATE—门控制位

GATE=0,定时器/计数器启动与停止仅受TCON寄存器中TR0/TR1控制。

GATE=1,定时器/计数器启动与停止由TCON寄存器中TR0/TR1和外部中断引脚(INT0/INT1)上的电平状态来共同控制。

C/T—定时器模式和计数器模式选择位。

C/T=1,为计数器模式;C/T=0,为定时器模式。

M1M0—工作方式选择位。

每个定时器/计数器都有4种工作方式,它们由M1M0设定,对应关系如下:

M1

M0

工作方式

0

0

方式0,为13位定时器/计数器

0

1

方式1,为16位定时器/计数器

1

0

方式2,8位初值自动重装的8位定时器/计数器

1

1

方式3,仅适用于T0,分成两个8位计数器,T1停止计数

中断优先级寄存器IP

中断优先级寄存器IP用来指定中断的优先级别,即确定谁的优先级高,谁的官大。

该寄存器也可进行位操作。

 

位序号

D7

D6

D5

D4

D3

D2

D1

D0

位符号

---

---

---

PS

PT1

PX1

PT0

PX0

位地址

---

---

---

BCH

BBH

BAH

B9H

B8H

---—无效位。

PS—串行口中断优先级控制位。

PS=1,串行口中断定义为高优先级中断。

PS=0,串行口中断定义为低优先级中断。

PT1—定时器/计数器1中断优先级控制位。

PT1=1,定时器/计数器1中断定义位高优先级中断。

PT1=0,定时器/计数器1中断定义位低优先级中断。

PX1—外部中断1中断优先级控制位。

PX1=1,外部中断1定义为高优先级中断。

PX1=0,外部中断1定义为低优先级中断。

PT0—定时器/计数器0中断优先级控制位。

PT0=1,定时器/计数器0中断定义位高优先级中断。

PT0=0,定时器/计数器0中断定义位低优先级中断。

PX0—外部中断0中断优先级控制位。

PX0=1,外部中断0定义为高优先级中断。

PX0=0,外部中断0定义为低优先级中断。

在51单片机系列中,高能打断低,低不能打断高,就像官大的能管住官小的,官小的不能管住官大的。

在没有设置中断优先级的情况下,按默认的中断级别进行中断响应。

在默认情况下,优先级别如下:

中断源

默认中断级别

序号(C语言用)

入口地址(汇编)

INT0—外部中断0

最高

0

0003H

T0—定时器/计数器0中断

第2

1

000BH

INT1—外部中断1

第3

2

0013H

T1—定时器/计数器1中断

第4

3

001BH

TI/RI—串行口中断

第5

4

0023H

T2—定时器/计数器2中断

最低

5

002BH

中断

当P3.2/P3.3为低电平时,由硬件将IE0/IE1置1,向CPU申请中断,由IT0/IT1选择以何种方式中断,然后在由中断允许寄存器IE中的EX0/EX1来决定是否打开外部中断,其中,EA为总开关,决定着全局的中断。

当全部允许后,CPU将停止当前工作,去处理中断,在程序中,为停止当前的程序,跳到中断程序中。

中断代码:

Voidmain()

{

EA=1;//打开总中断

IT0=1;//选择电平触发方式,则P3.2口为低电平时有效,也即IE0置1,向CPU申请中断

EX0=1;//打开中断的大门,允许中断

}

在控制时,一般用P3.2/P3.3来控制中断。

定时器/计数器

在用定时器/计数器时,先由寄存器TMOD来确定其工作方式和功能,来选择用何种方式启动,何种模式,何种工作方式;由ET0/ET1来打开定时器/计数器的大门,再由TR0/TR1决定是否开始定时/计数,然后向计数器中装初值,来决定定时或计数的时间,多少。

当计数器溢出时,由硬件将TF0/TF1置1,向CPU申请中断,进入中断程序。

其中由EA打开总中断。

定时/计数代码:

Voidmain()

{

EA=1;//打开总中断

TMOD=0x11;//选择仅有TR0/TR1来启动定时器/计数器,定时模式,16位定时器的工作方式

TH0=0xdc;

TL0=0x00;//装初值,定时时间为10ms

ET0=1;//打开定时器0的大门

TR0=1;//打开定时器,开始定时

}

计算定时器的初值

12个时钟周期为一个机器周期,计数器的脉冲周期为机器周期,即一个机器周期定时/计数器计一个数。

对于16位计数器,当计满216个数时,申请中断。

TH0/TH1=

;TL0/TL1=

其中,16为计数器的位数,t为定时的时间,单位为ms,f为时钟频率,单位为MHz。

1MHz=106Hz,1s=103ms,在秒表中,最后一位为走1为10ms。

中断函数格式

Void函数名()interrupt中断号using工作组

{

中断服务程序内容

}

在定时和计数时,中断函数中应先装初值,如下

VoidT0_timeinterrupt1

{

TH0=0xdc;

TL0=0x00;

中断服务程序内容

}

注意:

一般我们在中断服务程序中不要写过的的处理语句,因为如果语句过多,中断服务程序中代码还未执行完毕,而下一次中断又来临,这样我们就会丢失这次中断,又开始下一次中断,从而使程序运行乱套。

串口电平转换电路

8051单片机通过引脚串行数据接收端RXD(P3.0)和引脚TXD串行数据发送端(P3.1)与外界通信。

SBUF是串行口缓冲寄存器,包括发送寄存器和接受寄存器。

它们有相同的名字和地址空间,但不会出现冲突,因为它们两个有一个只能被CPU读出数据,另一个只能被CPU写入数据。

单片机的串口是通过对串行口的控制与状态寄存器的操作完成串行通信的设置的。

串行口控制寄存器SCON

SCON.7

SCON.6

SCON.5

SCON.4

SCON.3

SCON.2

SCON.1

SCON.0

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

SM0、SM1:

串行口工作方式选择位,其定义如下:

SM0/SM1

工作方式

功能

波特率

00

方式0

8位移位寄存器

Fosc/12

01

方式1

10位UART

可选

10

方式2

11位UART

Fosc/64或Fosc/32

11

方式3

11位UART

可选

SM2:

多通信控制位。

不同方式下,SM2有不同的选择限制。

在方式0时,必须是SM2=0。

在方式1中,当SM1=1时,只有接受到有效停止位时,RI才置1。

在方式2或方式3中,当SM2=1且接受到的第九位数据RB8=0时,RI才置1。

REN:

接收允许控制位。

由软件置位以允许接收,软件清零。

REN=1:

允许串行口接受数据;REN=0:

禁止串行口接收数据。

TB8:

方式2,3中发收数据的第9位。

在方式2或方式3中,要发送的第9位数据,可约定作为奇偶校验位;或在多机通信中,作为地址帧/数据帧的标志位。

在方式0和方式1中,该位未用。

RB8:

接收数据的第9位。

在方式0中不适用RB8。

在方式2或方式3中,RB8为接收到的第9位数据,可作为奇偶校验位或作为地址帧/数据帧的标志位。

在方式1中,若SM2=0,则RB8是接收到的停止位。

TI:

发送中断标志。

在方式0时,当串行发送第8位数据结束时,或在其他方式,串行发送停止位的开始时,有硬件使TI置1,向CPU发出中断申请。

在中断服务程序中,必须用软件将其清0,取消此次中断。

在发送停止位前,由硬件置位。

TI置位表示申请中断,可根据需要,用软件查询的方法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。

TI必须用软件清零。

RI:

接收中断标志位。

在方式0时,当串行发送第8位数据结束时,或在其他方式,串行接收停止位的中间时,有硬件使RI置1,向CPU发出中断申请。

在中断服务程序中,必须用软件将其清0,取消此次中断。

在接收到停止位的中间时刻由硬件置位。

RI置位表示一帧数据接收完毕,可用查询的方法获知或者用中断的方法获知。

RI也必须用软件清0.

单片机的串口工作还要受到特殊功能寄存器PCON设置的限制。

PCON是8位特殊功能寄存器,地址为87H,其低7位是为了在CHMOS的80C51单片机上实现电源控制附加的。

其中最高位时SMOD,用于51单片机系列的串口设置。

该是单片机串口的波特率系数的控制位,当SMOD=1时,波特率加倍,否则不加倍。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1