51单片机读书笔记.docx

上传人:b****8 文档编号:28357221 上传时间:2023-07-10 格式:DOCX 页数:14 大小:22.85KB
下载 相关 举报
51单片机读书笔记.docx_第1页
第1页 / 共14页
51单片机读书笔记.docx_第2页
第2页 / 共14页
51单片机读书笔记.docx_第3页
第3页 / 共14页
51单片机读书笔记.docx_第4页
第4页 / 共14页
51单片机读书笔记.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

51单片机读书笔记.docx

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

51单片机读书笔记.docx

51单片机读书笔记

51单片机读书笔记

【篇一:

51单片机读书笔记】

单片机是一种集成电路芯片,采用超大规模技术把具有数据处理能力(如算术运算、逻辑运算、数据传送、中断处理)的微处理器(cpu),随机存取数据存储器(ram),只读程序存储器(rom),输入输出电路(i/o口),可能还包括定时/计数器,串行通信口(sci),显示驱动电路(lcd或led驱动电路),脉宽调制电路(pwm),模拟多路转换器及a/d转换器等电路集成到一个单块芯片上,构成一个最小然而完善的计算机系统。

软件特征是指指令系统特性和开

发支持环境,指令特性即单片机的寻址方式、数据处理方式、逻辑处理方式、输入输出特性及对电源的要求等等

现在常规的单片机普遍都是将中央处理器(cpu)、随机存取数据存储(ram)、只读程序存储器(rom)、并行和串行通信接口,中断系统、定时电路、时钟电路集成在一个单一的芯片上,增强型的单片机集成了如a/d转换器、pmw(脉宽调制电路)、wdt(看门狗),有些单片机将lcd(液晶)驱动电路都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大

单片机按内部数据通道的宽度,可分为4位、8位、16位及32位单片机。

单片机的特点可归纳为以下几个方面:

1)集成度高

2)存储容量大

3)外部扩展能力强

4)控制功能强

5)低电压、低功耗

6)低电压、低功耗

7)可靠性高

mcs-51系列单片机还有颇具特色的21个特殊功能寄存器sfr

利用sfr可完成对定时

器、串行口、中断逻辑的控制,这就使得单片机可以把定时/计数器、串行口、中断逻辑等集成在一个芯片上。

mcs-51单片机组成结构中包含

运算器、控制器、片内存储器、并行i/o口、串行i/o口、定时/计数器、中断系统、振荡器等功能部件

sp是堆栈指针寄存器,pc是程序计数器,psw是程序状态字寄存器,

dptr是数据指针寄存器。

(5)程序状态字寄存器(标志寄存器)。

程序状态字寄存器(psw)是一个8位的特殊寄存

器,它保存alu运算结果的特征和处理状态,以供程序查询和判别。

psw中各位状态信息通常是指令执行过程中自动形成的,但也可以由用户根据需要加以改变。

psw中各位的定义如下:

时,(cy)=1;当加法或减法运算时,最高位无进位或借位,(cy)=0。

cy位主要用在多字节的加减法运算中。

②ac(psw.6):

辅助进位标志。

无符号数运算中,当加法或减法运算时,低4位向高

4位有进位或借位,(ac)=1;当加法或减法运算时,低4位向高4位无进位或借位,(ac)=0。

ac位常作为计算机进行bcd码修正的判断依据。

③f0(psw.5):

用户标志位。

无特别意义,供用户自行定义。

通过软件置位或清零,并根据(f0)=1或0来反映系统某一种工作状态,决定程序的执行方式。

④rs1、rs0(psw.4、psw.3):

工作寄存器组选择位。

可用软件置位或清零,用于选定当前使用的4个工作寄存器组中的某一组。

将在存储器结构部分中介绍。

⑤ov(psw.2):

溢出标志。

主要用在有符号数运算时,运算结果超出了范围时,(ov)=1;否则,(ov)=0。

如为8位运算,若结果超过了8位补码所能表示的范围-128~+127,则(ov)=1。

计算机在数据处理过程中,ov置位和清位的依据是:

即(ov)=(c)?

(c7.6)。

⑥p(psw.0):

奇偶标志位。

在执行指令后,单片机根据累加器a的8位二进制数中“1”的个数的奇偶,自动给该标志置位或清零。

若累加器a的8位二进制数中“1”的个数为奇数,则(p)=1;若累加器a中“1”的个数为偶数,则(p)=0。

该标志对串行通信的数据传输非常有用,通过奇偶校验可检验传输的可靠性

控制器是单片机的神经中枢,是由指令寄存器ir、指令译码器id、程序计数器pc、

堆栈指针sp、数据指针dptr、定时及控制逻辑电路等组成。

它先以主振频率为基准发出cpu的时序,对指令进行译码,然后发出各种控制信号,完成一系列定时控制的微操作,用来协调单片机内部各功能部件之间的数据传送、数据运算等操作

控制器

1)程序计数器pc(16位的计数器)。

用于存放cpu下一条要执行的指令地址,是一个16位的专用寄存器,可寻址范围是0000h~ffffh,共64kb。

(2)指令寄存器(ir)。

指令寄存器用于存放指令代码

(3)指令译码器id。

指令译码器用于分析指令功能,根据操作码产生相应操作的控制信号。

(4)数据指针(dptr)。

数据指针dptr是一个16位的专用寄存器,其高位字节寄存器用dph表示,低位字节寄存器用dpl表示。

(5)定时与控制逻辑。

定时与控制逻辑由时序部件和微操作控制部件构成

(6)时序部件。

时序部件由时钟系统和脉冲分配器构成

(7)微操作控制部件。

计算机在执行一条指令时,总是把一条指令分成若干基本操作,称为微操作。

微操作控制部件根据指令产生计算机各部件所需要的控制信号。

这些控制信号是由指令译码器的输出信号、脉冲分配器产生的节拍脉冲以及外部的状态信号等进行组合产生

【篇二:

51单片机学习笔记】

51单片机手册

51单片机手册......................................................................................................................1

开发板....................................................................................................................................1

程序下载.........................................................................................................................1

程序开发................................................................................................................................1

开发环境.........................................................................................................................1i2c.........................................................................................................................................2

i2c通信读写数据过程..................................................................................................2

spi总线.................................................................................................................................4

概括................................................................................................................................4

c语言应用............................................................................................................................4

中断................................................................................................................................4

data,idata,xdata,pdata,code...............................................................................5

c语言中的static详细分析...........................................................................................6

开发板

程序下载

stc90xx的下载注意点:

1.3.3v和5v短路帽需要接到5v2.j0挑到auto3.txd,rxd都在usb端4.用usb转串口线连接pc和板子5.usb转串口的驱动装上.6.用pzisp.exe,芯片型号要选对。

程序开发

开发环境

需要转上keil3

工程文件后缀为uv2

一开始要新建一个project,会自动跳出选择相应芯片的窗口,选择对应的就ok,主要是为了生成头文件

i2c

i2c通信读写数据过程

在通信之初,主从机必须根据自己的要求约定好通信规则:

command的定义和位置、address的位数和位置。

以读写从机寄存器数据为例:

假设从机寄存器地址为8位、从机寄存器也位8位(被读取数据为8位);

约定读command为0x01,写command位0x02;

约定主机发起通信后,第一个slaveaddress字节收到ack后,紧跟的一个字节为command,再下面一个字节为address。

1.读寄存器数据步骤:

1.1主机先发起一次通信,将读command(0x01)和需要读取的寄存器地址address写入从机;(主机发出写操作)

1.2从机firmware的处理:

1.2.1将command和address分别提取出来;

1.2.2判断command的含义(本例中,是读指令还是写指令);

1.2.3根据收到的的address,将对应寄存器的的数据放入从机i2c输出buffer;(这个步骤可以使用指针)

1.3主机再次发起一次通信,读取从机的数据;(主机发出读操作)

2.写操作步骤:

2.1主机发起通信,按约定依次写入command、要写入的从机寄存器地址address和要写入的数据data;

2.2从机firmware要做的处理:

2.2.1分别提取command、address和data;

2.2.2根据command做出判断(本例中则判断是写入还是读取);

2.2.3将data写入与接收到的address对应的寄存器。

(这个步骤可以使用指针)。

spi总线

概括

通常有一个主设备和一个或多个从设备,需要至少4根线

(1)sdo–主设备数据输出,从设备数据输入;

(2)sdi–主设备数据输入,从设备数据输出;

(3)sclk–时钟信号,由主设备产生;

(4)cs–从设备使能信号,由主设备控制。

据输出通过sdo线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取

spi接口的一个缺点:

没有指定的流控制,没有应答机制确认是否接收到数据

spi的片选可以扩充选择16个外设,这时pcs输出=npcs,说npcs0~3接4-16译码器,这个译码器是需要外接4-16译码器,译码器的输入为npcs0~3,输出用于16个外设的选择。

c语言应用

中断

timer0_int()interrupt1using2

{

unsignedchartemp1;

unsignedchartemp2;

executablecstatements;

}

interrupt声明表示向量生成在(8*n+3),这里,n就是interrupt参数后的那个数字这里,在08h的代码区域生成ljmptimer0_int这样一条指令

中断源的矢量位置

中断源keil中断编号矢量地址

最高优先级60x0033

外部中断000x0003

定时器0溢出10x000b

外部中断120x0013

定时器1溢出30x001b

串口40x0023

定时器2溢出50x002b

dma70x003b

硬件断点80x0043

jtag90x004b

软件断点100x0053

监视定时器120x0063

data,idata,xdata,pdata,code

从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata、idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写c51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述)。

与ansi-c稍有不同,它只分samll、compact、large模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果。

在51系列中data,idata,xdata,pdata的区别:

data:

固定指前面0x00-0x7f的128个ram,可以用acc直接读写的,速度最快,生成的代码也最小。

idata:

固定指前面0x00-0xff的256个ram,其中前128和data的128完全相同,只是因为访问的方式不同。

idata是用类似c中的指针方式访问的。

汇编中的语句为:

moxacc,@rx.(不重要的补充:

c中idata做指针式的访问效果很好)

xdata:

外部扩展ram,一般指外部0x0000-0xffff空间,用dptr访问。

pdata:

外部扩展ram的低256个字节,地址出现在a0-a7的上时读写,用movxacc,@rx读写。

这个比较特殊,而且c51好象有对此bug,建议少用。

但也有他的优点,具体用法属于中级问题,这里不提。

【篇三:

51单片机c语言学习笔记】

一、定时器/计数器

1.定时器/计数器结构

2.寄存器tcon:

定时器/计数启动和停止

2.1tcon的高4位控制定时器/计数器的启动和中断申请,低4位与外部中断有关。

2.1.1tf1/tf0:

定时器/计数器t1和t0的益处标志位,定时器/计数器有溢出时,会将tf1或tf0位置“1”,表示定时器/计数器有中断请求。

2.1.2tr1或tr0:

定时器/计数器t1和t0的启动/停止位。

tr1或tr0设置为“1”定时器/计数器t1和t0的启动,若设置为“0”,相应的定时器/计数器就停止工作。

3.寄存器tmod:

设置定时器/计数工作方式(用于计数或定时)。

3.1tmod:

定时器/计数器工作方式

3.2tmod寄存器中高4位控制t1,低4位控制t0。

他们对定时器/计数器工作t0、t1

的控制功能是一样。

(下面以低4位控制定时器/计数器t0为例,说明各位的具体控制功能)

3.2.1gate:

门控位,控制定时器/计数器的启动模式。

gate=0时,只要用软件使tcon中的tr0置“1”,就可以启动定时器/计数器工作。

gate=1时,将tr0置“1”外,还需要外部中断引脚int0也为高电平,才能启动定时器/计数器工作。

3.2.2c/t:

定时器/计数器模式选择位

c/t=0时,定时器/计数器被设置为定时器工作方式,c/t=1时,定时器/计数器被设置为计数器工作方式。

3.2.3m0、m1:

定时器/计数器工作方式设置位。

备注:

t

0、t1工作于定时或者计数时都不占cpu工作时间。

4.定时器/计数器的初始值计算

5.定时器/计数器应用举例

5.1用定时器t0查询方式控制p2口8位led灯闪烁

使用定时器t0的查询方式tf0来控制p2口8位led闪烁,t0工作于方式1,led灯闪烁周期100ms,即亮50ms,熄灭50ms0。

5.1.1定时器t0工作方式的设置

用指令对t0的工作方式进行设置:

tmod=0x01;//即tmod=00000001b,低4位gate=0,c/t=0,m1m0=01

上述设置中,低4位c/t=0,使t0工作于计时方式。

gate=0,使tr0=1时即可启动t0开始工作。

m1m0=01,使t0工作于方式1。

5.1.2定时器初值的设定

单片机晶振为11.0592mhz,所以经12分频后送到t0的脉冲频率是f=11.0592/12

mhz,周期t=1/f=12/11.0592=1.085us。

即每个脉冲计时1.085us,要计时50ms(即50000us),需要计的脉冲数为50000/1.085=46038(次)。

则定时器的初始应设置为65536-46083=19453。

这个数需要t0的高8位寄存器(th0)和低8位寄存器(tl0)来分别存储,这两个寄存器初始值的设置方法如下:

th0=(65536-46083)/256;//定时器t0的高8位赋初值

tl0=(65536-46083)%256;//定时器t0的低8位赋初值

5.1.3定时器t0开始工作后,可通过编程让单片机不断查询益出标志位tf0是否为1,若为1,则表示计时时间到,否则等待。

5.1.4程序设计

实例42:

用定时器t0查询方式p2口8位控制led闪烁

#includereg51.h//包含51单片机寄存器定义的头文件

/**************************************************************

函数功能:

主函数

**************************************************************/

voidmain(void)

{

//ea=1;//开总中断

//et0=1;//定时器t0中断允许

tmod=0x01;//tmod=00000001b,使用定时器t0的模式1th0=(65536-46083)/256;//定时器t0的高8位赋初值

tl0=(65536-46083)%256;//定时器t0的低8位赋初值

tr0=1;//启动定时器t0

tf0=0;//定时器t0溢出标志位用软件清零

p2=0xff;//先定义p2口为高电平,led灯不亮

while

(1)//无限循环等待查询

{

while(tf0==0)//查询标志位是否溢出

;//空指令

tf0=0;//若计时时间到tf0=1,需用软件将其清0

p2=~p2;//将p2按位取反,实现led灯闪烁

th0=(65536-46083)/256;//定时器t0的高8位重新赋初值

tl0=(65536-46083)%256;//定时器t0的低8位重新赋初值

}

}

5.2用定时器t1查询方式控制单片机发出1khz音频

5.2.1定时器t1工作方式的设置

用指令对t1的工作方式进行设置:

tmod=0x10;//即tmod=00010000b,高4位gate=0,c/t=0,m1m0=01

上述设置中,高4位c/t=0,使t1工作于计时方式。

gate=0,使tr1=1时即可启动t1开始工作。

m1m0=01,使t1工作于方式1。

5.2.2定时器t1初值的设定

要发出1khz音频,让单片机送给蜂鸣器(接p3.7引脚)的电平信号,每隔音频的半个周期取反一次即可。

音频的周期为1/1000=0.001s,即1000us,则要计数的脉冲数为1000/1.0852=921(次),定时器t1的初值设置如下:

th1=(65536-921)/256;//定时器t0的高8位赋初值

tl1=(65536-921)%256;//定时器t0的低8位赋初值

5.2.3程序设计

实例43:

用定时器t1查询方式控制单片机发出1khz音频

#includereg51.h//包含51单片机寄存器定义的头文件

sbitsound=p3^7;//将sound位定义为p3.7引脚

/**************************************************************

函数功能:

主函数

**************************************************************/

voidmain(void)

{

//ea=1;//开总中断

//et0=1;//定时器t0中断允许

tmod=0x10;//tmod=00010000b,使用定时器t1的模式1th1=(65536-921)/256;//定时器t1的高8位赋初值

tl1=(65536-921)%256;//定时器t1的低8位赋初值

tr1=1;//启动定时器t1

tf1=0;//定时器t1溢出标志位用软件清零

while

(1)//无限循环等待查询

{

while(tf1==0)//查询标志位是否溢出

;//空指令

tf1=0;//若计时时间到tf0=1,需用软件将其清0sound=~sound;//将p3.7引脚输出电平取反

th1=(65536-921)/256;//定时器t0的高8位重新赋初值

tl1=(65536-921)%256;//定时器t0的低8位重新赋初值

}

}

二、中断

1.中断优先响应级别:

2.voidtime0(void)interrupt1using0

注解:

interrupt1为外部int0中断using0为使用0组工作寄存器(不声明,默认为0组)

3.中断号要与定时器(中断源)相对应,才能正确响应中断。

4.中断启用:

只有总开关ea和分支开关均闭合,相应中断才被使用。

5.外部int1/int0、定时器/计数器、串口等中断开关说明:

1)ea:

中断允许总控制位,ea=0时,禁止所有中断,ea=1时,开启总中断。

2)es:

串口允许中断控制位,es=0时,禁止串口中断,es=1时,允许串口

中断。

3)et1:

定时器/计数器t1的溢出中断允许位,et1=0时,禁止t1中断,

et1=1时,允许t1中断。

4)ex1:

外部中断1中断允许位,ex1=0时,禁止int1中断,ex1=1时,允

许int1中断。

5)et0

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

当前位置:首页 > 农林牧渔 > 林学

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

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