单片机学习笔记
- 格式:doc
- 大小:836.84 KB
- 文档页数:19
PIC单片机学习笔记
PIC 单片机学习笔记
1.前言
为了给前一段时间学习PIC16F616 型单片机的一个总结和方便大家的交流,
我写了这篇关于PIC 单片机的学习心得,都是在看了手册和编程调试后用自己的语言组织的,其中有不足或者有疑问的地方希望大家能及时的给予纠正和批评,提出宝贵的意见.
2.PIC 单片机的概述
PIC16F616 是一款14 引脚、8 位的CMOS 单片机.采用精简指令集,仅有35
条指令,由于采用了数据总线和指令总线分离的哈佛总线结构,使得除少量指令不是单周期之外,大部分的指令都是单周期指令.这样有利于提高单片机的运行速度和执行效率.
PIC16F616 这款单片机供电电压可以在2V 到5.5V 之间,内部集成了一个
RC 振荡器,频率可以配置成8MHZ 或者4MHZ,也可以用外部晶振提供时钟.内
部集成有AD 转换、比较器等硬件模块,还具有上电复位、欠压复位、看门狗、代码保护等功能.三个定时器、PWM 发生器等可以由用户编程.下面我来
一一介绍关于PIC 单片机的这些模块和功能.
3.存储器。
第六章
1.定时:此时记得是晶振分频后的均匀脉冲,从而实现定时
2.计数:此时记的是单片机外部引脚输入单片机的脉冲信号,从而实现计数。
3.脉冲来源有两个地方:晶振产生的脉冲信号经过12分频后变宽了,频率变为经侦频率的1/12,经过分频的信号给了定时器,定时器接到脉冲就会自动加1,满了以后标志位从0编程1;
另一个来源是单片机的外部引脚P3.4和P3.5,用定时器T0数的是P3.4引脚输入的脉冲,用定时器T1数的是P3.5引脚输入的脉冲。
4.特殊功能计数器TMOD中(其中某一位)设置单片机是处于计数还是定时状态
5.单片机的定时器/计数器每接到一个脉冲就自动把记的数加1,这个数就放在了TH0,TL0及TH1,TL1中。
计数器是十六位的寄存器,所以能存储的数据范围是0-65535。
TH0/1(高八位)D15、D14、D13、D12、D11、D10、D9、D8
TL0/1(低八位)D7、D6、D5、D4、D3、D2、D1、D0。
单片机C51学习笔记一, C51内存结构深度剖析二, reg51.头文件剖析三,浅淡变量类型及其作用域四, C51常用头文件五,浅谈中断六, C51编译器的限制七,小淡C51指针八,预处理命令一,C51内存结构深度剖析在编写应用程序时,定义一个变量,一个数组,或是说一个固定表格,到底存储在什么地方;当定义变量大小超过MCU的内存范围时怎么办;如何控制变量定义不超过存储范围;以及如何定义变量才能使得变量访问速度最快,写出的程序运行效率最高。
以下将一一解答。
1 六类关键字(六类存储类型)data idata xdata pdata code bdatacode:code memory (程序存储器也即只读存储器)用来保存常量或是程序。
code memory 采用16位地址线编码,可以是在片内,或是片外,大小被限制在64KB作用:定义常量,如八段数码表或是编程使用的常,在定义时加上code 或明确指明定义的常量保存到code memory(只读)使用方法:char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};此关键字的使用方法等同于constdata data memory (数据存储区)只能用于声明变量,不能用来声明函数,该区域位于片内,采用8位地址线编码,具有最快的存储速度,但是数量被限制在128byte或更少。
使用方法:unsigned char data fast_variable=0;idata idata memory(数据存储区)只能用于声明变量,不能用来声明函数. 该区域位于片内,采用8位地址线编码,内存大小被限制在256byte或更少。
该区域的低地址区与data memory地址一致;高地址区域是52系列在51系列基础上扩展的并与特殊功能寄存器具有相同地址编码的区域。
即:data memory是idata memory的一个子集。
复位1.POR信号只在两种情况下产生:➢微处理器上电。
➢RST/NMI管脚被设置为复位功能,在此管脚上产生低电平时系统复位。
2.PUC信号产生的条件为:➢POR信号产生。
➢看门狗有效时,看门狗定时器溢出。
➢写看门狗定时器安全健值出现错误。
➢写FLASH存储器安全键值出现错误。
3.POR信号的出现会导致系统复位,并产生PUC信号。
而PUC信号不会引起POR信号的产生。
系统复位后(POR之后)的状态为:➢RST/MIN管脚功能被设置为复位功能。
➢所有I/O管脚被设置为输入。
➢外围模块被初始化,其寄存器值为相关手册上注明的默认值。
➢状态寄存器(SR)复位。
➢看门狗激活,进入工作模式。
➢程序计数器(PC)载入0xFFFE(0xFFFE为复位中断向量)处的地址,微处理器从此地址开始执行程序。
4.典型的复位电路有以下3种:(1)由于MSP430具有上电复位功能,因此,上电后只要保持RST/NMI(设置为复位功能)为高电平即可。
通常的做法为,在RST/NMI管脚接100kΩ的上拉电阻,如图1-5(a)所示。
(2)除了在RST/NMI管脚接100kΩ的上拉电阻外,还可以再接0.1μF的电容,电容的另一端接地,可以使复位更加可靠。
如图1-5(b)所示。
(3)由于MSP430具有极低的功耗,如果系统断电后立即上电,则系统中电容所存储的电荷来不及释放,此时系统电压不会下降到最低复位电压以下,因而MSP430不会产生上电复位,同时RST/NMI管脚上也没有足够低的电平使MSP430复位。
这样,系统断电后立即上电,MSP430并没有被复位。
为了解决这个问题,可增加一个二极管,这样断电后储存在复位电容中的电荷就可以通过二极管释放,从而加速电容的放电。
二极管的型号可取1N4008。
如图1-5(c)所示。
系统时钟振荡器:1.DCO 数控RC振荡器,位于芯片内部。
不用时可以关闭2.LFXT1 可以接低频振荡器,典型的如32.768kHz的钟表振荡器,此时振荡器不需要接负载电容。
压缩BCD码与非压缩BCD码的压缩BCD码的每一位用4位二进制表示,一个字节表示两位十进制数。
例如1001区别——0110B表示十进制数96D;非压缩BCD码用1个字节表示一位十进制数,高四位总是0000,低4位的0000~1001表示0~9.例如00001000B表示十进制数8.中断控制技术的作用:速度匹配故障处理实时处理微处理器的两种结构从内核访问指令和数据的不同空间与总线结构,可以把处理器分为哈佛结构和普林斯顿结构(或冯.诺伊曼结构)。
冯.诺伊曼结构的机器指令、数据和I/O共用一条总线,这样内核在取指时就不能进行数据读写,反之亦然。
这在传统的非流水线处理器(如MCS51)上是没有什么问题的,它们取指、执行分时进行,不会发生冲突。
但在现代流水线处理器上,由于取指、译码和执行是同时进行的(不是同一条指令),一条总线就会发生总线冲突,必须插入延迟等待,从而影响了系统性能。
ARM7TDMI 内核就是这种结构的。
而哈佛结构的处理器采用独立的指令总线和数据总线,可以同时进行取指和数据读写操作,从而提高了处理器的运行性能。
ARM Cortex-M3、ARM966E、ARM926EJ、ARM1136JF等内核都采用了哈佛结构。
简单指令集的CPU在处理一些特定的运算时速度远高于复杂指令集,所以它常被用在工业领域,比如某些软件的专用服务器,流水线操作等方面。
RISC是英文“Reduced Instruction Set Computing ” 的缩写,中文意思是“精简指令集”。
它是在CISC指令系统基础上发展起来的,有人对CISC机进行测试表明,各种指令的使用频度相当悬殊,最常使用的是一些比较简单的指令,它们仅占指令总数的20%,但在程序中出现的频度却占80%。
复杂的指令系统必然增加微处理器的复杂性,使处理器的研制时间长,成本高。
并且复杂指令需要复杂的操作,必然会降低计算机的速度。
基于上述原因,20世纪80年代RISC型CPU诞生了,相对于CISC型CPU ,RISC型CPU不仅精简了指令系统,还采用了一种叫做“超标量和超流水线结构”,大大增加了并行处理能力。
一、数字钟,定时器,24C080的应用存储器的应用:(上拉电阻)I2C总线在传送数据过程中共有三种类型信号:开始信号、停止信号和应答信号。
开始信号:SCL保持高电平的状态下,SDA出现下降沿。
出现开始信号以后,总线被认为“忙”。
停止信号:SCL保持高电平的状态下,SDA出现上升沿。
停止信号过后,总线被认为“空闲”。
应答信号:接收数据的器件在接收到8位数据后,向发送数据的器件发出特定的低电平脉冲,表示已收到数据。
总线空闲:SCL和SDA都保持高电平。
总线忙:在数据传送开始以后,SCL为高电平的时候,SDA的数据必须保持稳定,只有当SCL为低电平的时候才允许SDA上的数据改变。
控制字节写操作读操作二、DS1302,LCD1602与日历各引脚的功能为:8 、Vcc1:备用电池端;1、Vcc2:5V电源。
当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电。
7、SCLK:串行时钟,输入;6、I/O:数据输入输出口;5、CE/RST:复位脚2 3、X1、X2 是外接晶振脚(32.768KHZ的晶振)4 地(GND)DS1302有关日历、时间的寄存器我们现在就来编程看一下,如何对DS1302进行操作把时钟信息显示在1602LCD 上。
(主程序)1 首先要通过8EH将写保护去掉,将日期,时间的初值写时各个寄存器。
2 然后就可以对80H、82H、84H、86H、88H、8AH、8CH进行初值的写入。
同时也通过秒寄存器将位7的CH值改成0,这样DS1302就开始走时运了。
3 将写保护寄存器再写为80H,防止误改写寄存器的值。
4 不断读取80H-8CH的值,将它们格式化后显示到1602LCD液晶上LCD1602驱动(1)信号真值表(RS可用DI表示)读状态输入:RS=0,RW=1,E=1读数据输入:RS=1,RW=1,E=1写指令输入:RS=0,RW=0,E=下降沿脉冲,DB0~DB7=指令码写数据输入:RS=1,RW=0,E=下降沿脉冲,DB0~DB7=数据DDRAM的地址必须加上80H1、忙信号检测2、写命令3、写数据。
单片机学习笔记(1)
单片机上的字母数字含义:STC 89C52RC 40C-PDIP 0721CV89 是一个系列c 指cmos 5 指小系列2 指内存,即内存为2*4=8KB,内存8kb
40 为工作频率 C 为商业级,还有工业级字母为I,商业级温度为0-85 摄氏度工作,工业级为-40-125 度之间工作
P DIP 表示封装格式,double insert pairline 双列直插式
0 721 表示o7 年21 周生产的
STC 59CAD AD 自带AD 转换器
80C51 内部结构图:
单片机的总线分为内部和外部,内部总线是CPU 中的总线。
外部总线分为;数据总线DATA BUS DA
地址总线ADDRESS BUS AB
控制总线CONTRL BUS CB
RAM :用于存放可读写的数据,例如计算后的结果,中间结果,要显示的结
果等
ROM : 用于存放程序,原始数据及表格等。
I/O 接口;四个8 位并行IO 接口,既可以读也可以写
T/C : 两个定时/计数器
5 个中断源的控制系统
一个全双工的UART i/o 接口(通用异步接收器)用于和其他单片机或电脑通
信
tips:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。
单片机读书笔记单片机,这个小小的芯片却蕴含着巨大的能量,如同一个智能的“大脑”,掌控着各种电子设备的运行。
在学习单片机的过程中,我仿佛打开了一扇通往科技世界的大门,充满了新奇和挑战。
单片机,简单来说,就是将计算机的主要功能集成在一个芯片上。
它具有体积小、功耗低、控制功能强等优点,被广泛应用于工业控制、智能仪表、家用电器、医疗器械等众多领域。
在接触单片机之初,我了解到它的基本结构包括中央处理器(CPU)、存储器(ROM 和 RAM)、输入输出接口(I/O 接口)等部分。
CPU 是单片机的核心,负责执行指令和进行数据处理。
存储器用于存储程序和数据,ROM 存放固化的程序,而 RAM 则用于临时存储运行时的数据。
I/O 接口则实现了单片机与外部设备的通信。
学习单片机,编程是关键。
常用的编程语言有汇编语言和 C 语言。
汇编语言执行效率高,但编程复杂;C 语言则相对简洁,易于理解和维护。
我从最基础的 C 语言开始入手,学习变量、数据类型、控制结构等知识。
通过编写简单的程序,如点亮一个 LED 灯、控制蜂鸣器发声等,逐渐熟悉了单片机的编程方法。
在实践过程中,我发现单片机的开发需要硬件和软件的协同配合。
硬件方面,需要了解电路原理,设计合适的电路板。
软件方面,要熟练掌握开发工具,如 Keil 等。
通过不断地调试程序,修改硬件电路,我逐渐提高了自己解决问题的能力。
单片机的应用非常广泛。
在工业控制中,它可以实现对生产过程的自动化监测和控制,提高生产效率和质量。
在家用电器中,如智能电饭煲、空调等,单片机使得设备更加智能化和节能。
在医疗领域,单片机可以用于医疗仪器的控制和数据采集,为医疗诊断和治疗提供支持。
例如,在智能温度控制系统中,单片机通过温度传感器采集环境温度,然后根据设定的温度范围控制加热或制冷设备的工作,从而实现精确的温度控制。
在智能小车的设计中,单片机可以接收传感器的信号,控制电机的转速和转向,实现小车的自动行驶和避障功能。
关于单片机的相关学习笔记这是我早期学单片机的时候做的笔记,当时我放在电脑上了,今天才看的,就发出来了定时器控制寄存器TCON TF(X)定时器溢出TR(X)定时器开关IT(X)外部中断请求的触发方式0 低电平1 负跳变IE(X)1 外部中断申请0 没有外部中断申请中断允许寄存器IE 中断优先级控制寄存器IP 定时器方式寄存器TMODGATE 门控位工作方式116 位的定时器/计数器其定时时间的计算公式为:(65536-计数初值)*晶振周期*12 或(65536-计数初值)*机器周期工作方式28 位自动重装的定时/计数器0x0d 0x0a //SA2 码的回车换行符SCON=0x40 // 串口方式1,不允许接收它和以下三句是等价的SM0=0 SM1=1 REN=0SCON=0x50 //允许接收PCOM=0X00 //波特率不倍增PCOM=0X80 //波特率倍增TMOD=0X20 //定时器1 定时方式2TR1=1 //允许定时器1 工作EA=1 //开总中断SBUF // 缓冲器void delay1ms(unsigned int i){unsigned char j; 1ms 基准延时程序while(i--) {for(j=0;j}}数据线SDA 和时钟线SCL对DDRAM 的内容和地址操作HD44780 的指令集,共11 条指令:1、清屏指令2、光标归位指令3、输入模式设置指令4、显示开关控制指令5、设定显示屏或光标移动方向指令6、功能设定指令7、设定CGRAM 地址指令设定下一个要存入数据的CGRAM 的地址8、设定DDRAM 地址指令9、读取忙信号或AC 地址指令10、数据写入DDRAM 或CGRAM 指令11、从CGRAM 或DDRAM 读出数据的指令tips:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。
第三章2.MCS-51单片机与外部扩展的存贮器相接时,P0口输出的低8位地址为何必须通过地址锁存器?而P2口输出的高8位地址则不必锁存?解:由于P0口还要作数据总线口,只能分时用作地址线,故P0口输出的低8位地址数据必须用锁存器锁存。
锁存器的锁存控制信号为引脚ALE输出的控制信号。
在ALE的下降沿将P0口输出的地址数据锁存。
由于P2口输出高8位地址,与P0口不同,无须分时使用,因此P2口上的地址信息(程序存储器上的A15~A8)功数据地址寄存器高8位DPH保存时间长,无须锁存。
3.8051单片机内部设有几个定时/计数器?它们是由哪些专用寄存器组成?MCS-51单片机内部有两个16位的定时/计数器T0和T1。
每个定时/计数器占用两个特殊功能寄存器:T0由TH0和TL0两个8位计数器组成,字节地址分别是8CH和8AH。
T1由TH1和TL1两个8位计数器组成,字节地址分别是8DH和8BH。
5.定时器/计数器tmod各位控制功能6。
定时器/计数器tcon高四位意义2.TCON控制寄存器TCON控制寄存器的格式如下:说明:(1)TCON是一个可位寻址的寄存器,字节地址为88H。
(2)高4位用于定时器控制,低4位由于外中断控制。
(3)各位意义如下:TF1:定时器/计数器T1溢出标志。
溢出时自动置1,中断响应后自动复位,也可用软件复位。
TR1:定时器/计数器T1运行控制位。
TR1=0时停止,TR1=1时开启。
TF0:定时器/计数器T0溢出标志。
溢出时自动置1,中断响应后自动复位,也可用软件复位。
TR0:定时器/计数器T0运行控制位。
TR0=0时停止,TR0=1时开启。
IE1:外中断1中断请求标志位。
CPU响应中断后自动复位。
IT1:外中断1触发类型选择位。
IT1=0时为电平触发,IT1=1时为下降沿边沿触发。
IE0:外中断0中断请求标志位。
CPU响应中断后自动复位。
IT0:外中断0触发类型选择位。
IT0=0时为电平触发,IT0=1时为下降沿边沿触发。
单⽚机原理及应⽤学习笔记(⼀)*在学习51之前,最先接接触到的是Arduino,这个东西上⼿确实⼗分的简单,可以做出来⼀些⼩玩意,但是它的性能终究是不够强⼤,对于⼀些⽐较厉害的作品,⽤Arduino就显得⼼有余⽽⼒不⾜了,所以现在开始学习51和stm32。
51的学习在⼤学本科阶段,在学校课堂上学到的基本上是⼀些理论知识,这些东西也确实有⼀定的必要,毕竟掌握了都是⾃⼰的。
所以说我准备对这些理论的知识进⾏⼀个整理。
好,废话不多说,现在切⼊正题。
对于⼀般的⼤学教材,前⾯两章基本上都是对单⽚机的⼀些基本的介绍,主要就是⼀些对单⽚机硬件结构认识过程,这个主要是让我们有个总体的认识,开始适应单⽚机的学习。
这些东西就忽略了吧。
就从51系列单⽚机的指令系统开始吧。
这⾥使⽤汇编语⾔编写程序的。
(以上都是废话,⾃动忽略)*51系列单⽚机的指令系统⼀:单⽚机指令系统的概述(1)总共111条指令(单字节指令49条,双字节指令45条,三字节指令17条)(⼀个机器周期、12个时钟震荡周期指令64条,两个机器周期、24个时钟震荡周期指令45条、乘除两条指令位4个机器周期)(12MHZ晶振:机器周期位1us)(2)51指令不区分⼤⼩写(3)指令格式:操作码+操作数⼆:单⽚机的寻址⽅式(1)寄存器寻址⽅式:MOV A,Rn(2)直接寻址⽅式:MOV A,40H(寻址范围:第⼀:内部RAM的128个单元、第⼆:特殊功能寄存器SFR,除了以单元形式外还能⽤寄存器符号形式:即MOVA,80H==MOV A,P0)(3)寄存器间接寻址:(寄存器中放的是操作数地址、寄存器前⾯加标志符@)例如:MOV R1,#40H MOV A ,@R1(寻址范围:第⼀:访问内部RAM、第⼆:⽚外数据存储器的64k字节的间接寻址、第三:⽚外的数据存储器的低256字节、第四:堆栈区)(4)⽴即寻址⽅式:(操作数在指令中直接给出,需在操作数前⾯加上#,如果⾸位是A-F,前⾯还加0)例如:MOV A,#40H MOV A,#0FFH(5)基址寄存器加变址寄存器间址寻址⽅式:(以DPTR\PC作为基址寄存器,以累加器A作为变址寄存器)(6)位寻址⽅式:例如:MOV A,40H 把40H的值送到进位位C(寻址范围:第⼀:内部RAM位寻址区、第⼆:特殊功能寄存器中的可寻址位)(7)相对寻址⽅式:(⽬的地址=转移指令所在地址+转移指令字节数+rel(带符号的8位⼆进制数的补码数))三:51系列单⽚机的指令系统及⼀般说明(1)分类介绍:数据传送类(28条)算数操作类(24条)逻辑运算类(25条)控制转移类(17条)位操作类 (17条)(2)指令中符号的意义:Rn当前寄存器区8个⼯作寄存器Ri当前选中的寄存器区中可做间接寻址寄存器的2个寄存器Direct 直接地址,即8位内部数据存储单元或者特殊功能寄存器地址 #data包含指令中的8位⽴即数#data包含指令中的16位⽴即数rel相对转移指令中的偏移量,8位带符号的补码数DPTR数据指针,可⽤作16位的数据地址寄存器bit内部RAM或者SFR中直接寻址位C(Cy)进位标志位或者位处理机制中的累加器addr11 11位⽬的地址addr16 16位⽬的地址@间接寻址寄存器(x)x中的内容((X))由X寻址的单元中的内容---->箭头右边内容被箭头左边所替代(持续更新中)。
PIC单片机学习笔记(7)语句(5)-循环语句循环语句是几乎每个程序都会用到的,它的作用就是用来实现需要反复进行多次的操作。
如一个12M的51芯片应用电路中要求实现1毫秒的延时,那么就要执行1000次空语句才可以达到延时的目的(当然可以使用定时器来做,这里就不讨论),如果是写1000条空语句那是多么麻烦的事情,再者就是要占用很多的存储空间。
我们可以知道这1000条空语句,无非就是一条空语句重复执行1000次,因此我们就可以用循环语句去写,这样不但使程序结构清晰明了,而且使其编译的效率大大的提高。
在C语言中构成循环控制的语句有while,do-while,for和goto语句。
同样都是起到循环作用,但具体的作用和用法又大不一样。
我们具体来看看。
goto语句这个语句在很多高级语言中都会有,记得小时候用BASIC时就很喜欢用这个语句。
它是一个无条件的转向语句,只要执行到这个语句,程序指针就会跳转到goto后的标号所在的程序段。
它的语法如下:goto 语句标号;其中的语句标号为一个带冒号的标识符。
示例如下void main(void){unsigned char a;start: a++;if (a==10) goto end;goto start;end:;}上面一段程序可以说是一个死循环,没什么意思,只是说明一下goto的用法。
这段程序的意思是在程序开始处用标识符"start:"标识,表示程序这是程序的开始,"end:"标识程序的结束,标识符的定义应遵循前面所讲的标识符定义原则,不能用C的关键字也不能和其它变量和函数名相同,不然就会出错了。
程序执行a++,a的值加1,当a等于10时程序会跳到end标识处结束程序,否则跳回到start标识处继续a++,直到a等于10。
上面的示例说明goto不但可以无条件的转向,而且可以和if语句构成一个循环结构,这些在C程序员的程序中都不太常见,常见的goto语句用法是用它来跳出多重循环,不过它只可以从内层循环跳到外层循环,不能从外层循环跳到内层循环。
单片机原理及应用知识点笔记总结单片机原理及应用知识点笔记总结一、概述单片机指的是在一个芯片上集成了处理器、存储器和各种输入输出接口的微型计算机系统。
单片机具有体积小、功耗低和成本低等优势,被广泛应用于各个领域,如电子产品、通信设备、汽车电子等。
本文将总结单片机的原理及应用的相关知识点。
二、单片机的基本构成1. 处理器:单片机的核心部分,负责控制、计算和处理数据等任务。
处理器包含ALU(算术逻辑单元)、寄存器、时钟控制电路等。
2. 存储器:用于存储程序和数据,在单片机中一般包括ROM (只读存储器)和RAM(随机存储器)两种。
其中,ROM用于存储程序代码,RAM用于存储数据。
3. 输入输出接口:用于与外部设备进行通信,包括通用输入输出口、串行口、并行口等。
通过输入输出接口,单片机可以与各种传感器、执行器等外部设备进行数据交互。
4. 时钟电路:提供处理器和其他电子元件的时钟信号,控制各个部件的协调工作。
三、单片机的工作原理1. 开机复位:单片机上电后,系统会自动进行复位操作,使单片机进入初始状态。
2. 程序执行流程:单片机按照存储在ROM中的程序顺序执行。
执行过程中,将指令从ROM中读取到寄存器中,然后进行译码和执行。
3. 中断处理:单片机可以响应外部中断请求,即在程序执行过程中,一旦发生了与中断有关的事件,单片机会立即中断当前的程序,执行中断服务程序,并在完成中断处理后返回原来的程序继续执行。
4. 时钟信号:时钟信号的频率可以通过控制时钟电路的配置来调整。
时钟信号的频率决定了单片机处理器的运行速度。
四、单片机的应用1. 家用电器控制:单片机可以用于控制家用电器,如电饭煲、洗衣机、空调等。
通过输入输出接口与传感器和执行器进行连接,实现电器的自动控制功能。
2. 工业自动化:单片机广泛应用于工业自动化系统中,如生产线控制、工艺监测等。
通过单片机可以实现对工业设备的精准控制和数据采集。
3. 电子产品:单片机也被广泛应用于各类电子产品中,如手机、电视、音响等。
51、A VR学习心得1.51的汇编中,立即数送累加器与寄存器送累加器是不同的。
寄存器的名称与C语言同。
在中央处理器CPU中,累加器(accumulator)是一种暂存器,相当于高速缓存。
在汇编语言程序中,用它来保存临时数据时,最好将其转存到其它寄存器或内存单元中,以防止在其它指令的执行过程中使其中的数据被修改,从而得到不正确的结果,为程序的调试带来不必要的麻烦。
2.函数,变量记得声明。
3.不要重复定义函数与变量。
4.数码管的刷新速度不应过快。
74hc573要一定的反应时间。
(不确定啊)5“==”和“=”要分清楚,前者为判断等,后者为赋值等。
”===”全同运算符,只有两边数和数据类型都相同时才返回1.6.for语句内用的是;分隔符,不是’,’.7.如果不是声明,在函数名后不要乱加“;”8.switch语句注意break一下。
判断后循环赋值也不行。
Break仅对紧邻它的case起作用。
9.指数用math.h中pow(),不用^。
10.位操作与按位操作一定要分清楚。
11.出错时先确认sbit与sfr部分写对了。
12.共阴数码管位选选阴工作,段选选阳工作。
消隐时注意:段选完对位消隐:0xff 位选完对段消隐:0x0013.非全局变量在退出函数后已不存在14.bit位不能和数做运算。
取位可用(bit)(数的操作)来取数的最后一位。
?15.数组后记得写“;”。
注意定义二维数组时应注明第二维的元素个数。
?16.主函数中变量为全局变量,应于函数体之外声明。
17.写程序时记得把子函数写在main()前,可以不用声明。
子函数套子函数时,低级别的子函数应写在前面。
18.把HEX文件转成BIN文件可省将近一半空间。
19.用USART时注意,结数据最好在中断函数里面接,这样不会漏接,也不用占用过多CPU 时间。
(在中断里面处理数据可以不耽误主函数执行。
定时/计数器不占CPU。
但要保证所写程序在下一次中断来前能完成,否则陷入死循环,中断没完又进中断。
单片机学习笔记一、单片机第一课1.相关概念学习1)英特尔8051:8位单芯片控制器,属于MCS-51单芯片的一种;2)美国英特尔公司生产的一系列单片机总称;3)宏与函数之间的区别宏在编译器对源代码进行编译的时候只进行简单替换,不会进行任何逻辑检测,即简单复制代码而已。
宏定义时不会考虑参数的类型。
参数宏的使用会使用具有同一作用的代码块在目标中存在多个副本,即会增长目标文件的大小;函数只在目标文件中存在一处,比较节省程序空间。
参数宏的运行速度比函数快,因为不用压栈和入栈;函数的调用会牵扯到参数的传递,需要压栈和入栈操作,速度较慢。
宏定义时需要小心,多加括号。
函数的参数存在传值和传地址的问题,参数宏不存在。
4)串行接口(com接口)定义:数据一位一位地顺序传送;特点:只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线);优缺点:适合远距离通信,但传送速度较慢。
5)热插拔(带电插拔)定义:允许用户在不关闭系统,不断电源的情况下取出和更换损坏的硬盘、电源或板卡等部件6)SPI(串行外设接口):SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)SDO:主设备数据输入,从设备数据输出SDI:主设备数据输出,从设备数据输出;SCLK:时钟信号,由主设备产生;CS:从设备使能信号(控制芯片是否被选中,使得同一总线可以连接多个SPI设备),由主设备控制。
7)DSP:将部分程序固化从而实现更快处理速度的MCU。
8)推挽与开漏的区别。
推挽输出:可以输出高低电平,连接数字器件开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要拉上电阻才行,适合做电流型驱动,其吸取电流能力相对强(一般在20mA以内)2.微机系统1)定义:微机系统=硬件系统+软件系统2)结构图:3)发展方向:快+小4)硬件是应用系统的基础;软件时在硬件的基础上对其资源进行合理调配和使用,从而完成应用系统所要求的任务3.单片机定义1)主要部件:中央处理器(CPU)、程序存贮器(ROM)、数据存贮器(RAM)、定时/计数器、输入输出(I/O)接口、串行口2)原理图4.单片机的开发思路1)设计制作硬件;2)确定常数、地址;3)编写软件;4)编译器对源程序文件编译、查错;5)仿真机对软件进行调试,直到程序运行正确;6)写片(将程序固化在EPROM/Flash中),在源程序被编译后生成HEX(机器码)目标文件,将此文件调入即可写片。
单片机学习整理资料1、共阳数码管(SEG_COM_AN)1、原理图2、引脚图(长引脚为公共端,接VCC高电平)c、段码表共阳0~9的段码集合{0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}2、共阴数码管(SEG_COM_CAT)1,原理图2、引脚图(长引脚为公共端,接地)3、段码表共阴0~9的段码集合{0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F }3、单片机的中断SCONTCONIEIP硬件查询单片机响应中断的条件为:1、中断源有中断请求; 2,该中断源允许位为‘1’; 3,CPU 开总中断。
8051的中断源有5个1外部中断0 ;2外部中断1;3定时器/计数器中断0;4定时器/计数器中断1 5串行并行中断(我起的名字,具体是啥不知道)外部中断使用方法:1、开总中断------------------------------------------------------- EA=1;2、中断允许位 置’1’------------------------------------------------IE0=1; 在进入大循环之前设置3、选择触发方式-------IT0=1(下跳沿)/IT0=0(低电平)默认为04、写中断函数(格式如下) 中断函数名称返回值为空void function() interrupt 0中断标号,0号中断为外部中断0{ EA=0;--------------------------------------------关总中断````````----------------- EA=1;-------------------------------------------开总中断}中断函数标志(附:)外部中断初始化也可以直接操作对应的寄存器中断初始化时需要设置的开关TCON寄存器—中断请求标记位寄存器TCON寄存器—中断请求标记位寄存器IE寄存器—中断允许标记位寄存器IP寄存器—中断优先级标记位寄存器由上面四幅图可知:(以外部中断0为例)1、总中断允许标记位EA和中断允许标记位EX0位于IE寄存器中;2、中断请求标记IE0和中断触发方式标记位IT0位于TCON寄存器中因此,外部中断初始化可以通过直接写对应的寄存器实现(中断优先级位只有一级中断的时候默认为’1’可以不用定义)例:IE=0x81;----------------定义EA=1,EX0=1,TCON=0x03;-------------定义IE0=1,IT0=1。
2022.3.20串口通信的基本原理和应用1.微控制器与外部设备的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信。
并行通信:指数据的各位同时发送或接收,每个数据位使用一条导线。
串行通信:指数据一位接一位地顺序发送或接收。
2.串行通信有SPI、IIC、UART等多种,最常见最通用的是指UART,大多数情况下,串口通信指的就是UART。
3.串行通信的制式有:单工(只能发送或者接收)、半双工(可以发送也可以接收,但是同一时刻只能有一种)、全双工(同一时刻可以同时存在发送和接收)三种。
RS485是半双工的通信制式。
4.串行通信的主要方式有两种:同步和异步。
同步串行通信:需要使用同一个时钟,以数据块为单位传送数据。
异步串行通信:每个设备都有自己的时钟信号,通信中双方的波特率要保持一致,以字符为单位进行数据帧传送,一次传送一个帧。
5.波特率:串口每秒钟传输的位数。
6.在51单片机的串口通信中,模式1和模式3 的波特率是可变的,取决于定时器1的溢出率,也就是说定时器1每溢出1次,串口就发送一次数据。
7.通常使用定时器1的工作模式2(8位自动重装)来产生波特率。
TL1作为脉冲计数寄存器,TH1作为自动重装寄存器,当计数到最大值溢出时,TH1的值会自动装到TL1中。
8.9.串行口中有两个缓冲寄存器SBUF,一个是发送寄存器,一个是接收寄存器,在物理结构上是完全独立的,它们都是字节寻址的寄存器,字节地址均为99H。
这个重叠的地址靠读/写指令区分:串行发送时,CPU向SBUF写入数据,此时99H表示发送缓存SBUF。
串行接收时,CPU向SBUF读出数据,此时99H表示接收缓存SBUF。
10.数据发送,把数据扔进SBUF后,内核会自动将数据发送出去,内容完成后,会将TI标志位置1。
发送数据程序:SBUF = 数据/变量;如:SBUF = 0x58;11.数据接收,内核从串口接收到一个完整的数据后,会将RI标志位置1,用户用SBUF直接读取即可。
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,其它位依次向右移动一位。
MC51单片机学习笔记一准备知识:1.内部结构:4K Rom 程序存储器(硬件)128节Ram随机存储器(软件)8位cpu,4个8位并口,1个全双串行口,2个16位定时器/计数器;寻址范围64k 布尔处理器CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;ROM:用以存放程序、一些原始数据和表格;I/O口:四个8位并行I/O口,既可用作输入,也可用作输出;T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式五个中断源的中断控制系统;一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。
最高振荡频率取决于单片机型号及性能。
2.分类:arm(快)凌阳(处理声音较好)3.型号说明:STC (公司名) 89(系列)C(CMOS;CAD:自带AD转换;S:串行下载无需专门的编程器;lv:工作电压为3v)51(1*4=4K) RC 40(晶振最高频率)C(商业级:温度0--85,I工业级温度-40--125)----PDIP (双列直插式)0721(07年第21周).........4.电平:TTL:高:+5v--低0v;RS232:计算机串口:+12v--低-12v,故计算机和单片机通信需要电平转换芯片5.二进制与十六进制之间的转换:每4位转变一次6.二进制转换逻辑符号:&与,//或,---非,异或7. P3第二功能各引脚功能定义:P3.0:RXD串行口输入P3.1:TXD串行口输出P3.2:INT0外部中断0输入P3.3:INT1外部中断1输入P3.4:T0定时器0外部输入P3.5:T1定时器1外部输入P3.6:WR外部写控制(计数)P3.7:RD外部读控制RST :复位管脚,高电平有效,时间大于两个机器周期VPD:备用电源注:机器周期和指令周期(1)振荡周期: 也称时钟周期, 是指为单片机提供时钟脉冲信号的振荡源的周期,TX实验板上为11.0592MHZ。
(2)状态周期: 每个状态周期为时钟周期的2 倍, 是振荡周期经二分频后得到的。
(3)机器周期: 一个机器周期包含6 个状态周期S1~S6, 也就是12 个时钟周期。
在一个机器周期内, CPU可以完成一个独立的操作。
(4)指令周期: 它是指CPU完成一条操作所需的全部时间。
每条指令执行时间都是有一个或几个机器周期组成。
MCS - 51 系统中, 有单周期指令、双周期指令和四周期指令。
8.int(16):-32768------32767; float(32):3.4e-38-----3.4e38;double(64):1.7e-308-----1.7e308; uint(16)0----655369.C-51的运算符与C语言基本相同:+ - * / (加减乘除)> >= < <= (大于大于等于小于小于等于)== != (测试等于测试不等于)&& || ! (逻辑与逻辑或逻辑非)>> << (位右移位左移)(最高位为0,最低位移出)& | (按位与按位或)^ ~ (按位异或按位取反) 10.编程与C语言的不同:1 中断服务程序;函数名()interrupt n using m{函数内部实现….}2 I/O口定义:sbit beep=P2^3;3 C-51的数据类型扩充定义:sfr:特殊功能寄存器声明sfr16:sfr的16位数据声明sbit:特殊功能位声明bit:位变量声明例:sfr SCON = 0X98;sfr16 T2 = 0xCC;sbit OV = PSW^2;11.锁存器介绍:把信号暂存以维持某种电平状态FUNCTION TABLEINPUTS OUTPUTOE LE D QL H H HL H L LL L X Q0H X X Z(不工作)在数码管中应用:一个端口控制两个锁存端控制八个数码管(一定要加上拉电阻10K,因为内部电流较小)原理:先使位选选好,L锁存,在段,L锁存,再控制位..12.硬件知识;A.复位电路B.蜂鸣器,继电器二点亮第一个发光二极管:1.点亮电流:3~10mA,u(总)=5v,u(灯)=1.7v,R=3.3/3mA=1K欧2.操作方式1.位操作:sbit D1=p1^0;2.总线操作:p1=oxfe;3._crol_(变量名,移动的位数);4.源程序:#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar temp;void delay(uint z);void main(){temp=0x01;P1= temp;while(1){delay(10000);temp=_crol_(temp,1);P1=temp;}}void delay(uint z){uint x;uchar y;for(x=0;x<=z;x++){for(y=0;y<=20;y++) ;}}5.调试:A. D REST 全速执行(Run){}(箭头内部每步执行,箭头外跳跃执行)B . P eripherals(硬件)(I/O口。
)View--->Watch&Call--->观察某个变量(可以改变进制查看)C . 设置断点,全速执行,取消双击三数码管静态显示和动态扫描1.编码表:uchar code table_we[]={0x08,0x04,0x02,0x01};uchar code table_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//0~9,"空","-"2.思想及原理:先确定有多少位,比如想显示999个数,其中2显示为002,则在显示函数中搞一个3位循环,段先打开段,段位2,再关闭段,让段不显示以清楚痕迹,再打开位,让位为1,再关闭位,最后延时一段时间,再选第二位控制第二为的段0,再选第三位控制第三位段0,至于如何让显示数自加,位,和段应该选什么,则通过:设一个num,首先它等于0,然后算他的个位为0,十位为0,百位为0,将得到的信息传给显示函数,再延时,延时后自加,加到999后num 为0,继续循环。
四中断: 一、中断的概念CPU 在处理某一事件A 时,发生了另一事件B 请求CPU 迅速去处理(中断发生);CPU 暂时中断当前的工作,转去处理事件B (中断响应和中断服务);待CPU 将事件B 处理完毕后,再回到原来事件A 被中断的地方继续处理事件A (中断返回),这一过程称为中断 。
二、80C51中断系统的结构80C51的中断系统有5个中断源(8052有 6个) ,2个优先级,可实现二级中断嵌套 。
主程序A响应返回断点RETI……中断服务程序BTCON 介绍:(控制寄存器)TCON 介绍:(控制寄存器)IT0(TCON.0),外部中断0触发方式控制位。
(中段时控制eg :IT=1;或者TCON=OX01选择外部中断触发方式;) 当IT0=0时,为电平触发方式。
当IT0=1时,为边沿触发方式(下降沿有效)。
IE0(TCON.1),外部中断0中断请求标志位。
IT1(TCON.2),外部中断1触发方式控制位。
IE1(TCON.3),外部中断1中断请求标志位。
EX0EAPX001ET0PT001EX1PX101ET1PT101ES PS 01≥1RI TISCONTCONIE0TF0IE1TF11101IT0IT1INT0INT1T0T1RX TX IEIP11111111硬件查询自然优先级自然优先级中断入口中断入口高级低级中断源中断源(定时器/计数器的开关TR0/TR1=1)TR1(TCON.4), 定时/计数器开关TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
T R1(TCON.6), 定时/计数器开关TF1(TCON.7):T1溢出中断请求标志位。
T1计数溢出时由硬件自动置TF1为1。
CPU响应中断后TF1由硬件自动清0。
T1工作时,CPU可随时查询TF1的状态。
所以,TF1可用作查询测试的标志。
TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。
TF1(TCON.7),定时/计数器T1溢出中断请求标志位。
TMOD介绍:(工作方式寄存器)工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。
其格式如下:GATE:门控位。
GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。
即此时定时器的启动多了一条件。
C/T C/T C/T:定时/计数模式选择位。
=0为定时模式;=1为计数模式。
M1M0:工作方式设置位。
定时/计数器有四种工作方式,由M1M0进行设置。
SCON(串行口控制寄存器)RI(SCON.0),串行口接收中断标志位。
当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。
注意,RI必须由软件清除。
TI(SCON.1),串行口发送中断标志位。
当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。
每发送完一个串行帧,由硬件置位TI。
CPU响应中断时,不能自动清除TI,TI必须由软件清除。
中断允许寄存器IE(外部中断开关)EX0(IE.0),外部中断0允许位;ET0(IE.1),定时/计数器T0中断允许位;EX1(IE.2),外部中断1允许位;ET1(IE.3),定时/计数器T1中断允许位;ES(IE.4),串行口中断允许位;(中段时的总开关)EA (IE.7),CPU中断允许(总允许)位中断优先级寄存器IP/PHPX0(IP.0),外部中断0优先级设定位;PT0(IP.1),定时/计数器T0优先级设定位;PX1(IP.2),外部中断0优先级设定位;PT1(IP.3),定时/计数器T1优先级设定位;PS (IP.4),串行口优先级设定位;PT2 (IP.5) ,定时/计数器T2优先级设定位。
PX0(IPH.0),外部中断0优先级设定位;PT0(IPH.1),定时/计数器T0优先级设定位;PX1(IPH.2),外部中断1优先级设定位;PT1(IPH.3),定时/计数器T1优先级设定位;PS (IPH.4),串行口优先级设定位;PT2 (IPH.5) ,定时/计数器T2优先级设定位。