51单片机读书笔记.docx
- 文档编号:28357221
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:14
- 大小:22.85KB
51单片机读书笔记.docx
《51单片机读书笔记.docx》由会员分享,可在线阅读,更多相关《51单片机读书笔记.docx(14页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 读书笔记