单片机学习笔记
PIC单片机学习笔记

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。
单片机自学笔记

{ int a=3; int b = 4; a=a^b; b=b^a; a=a^b; printf("a=%d b=%d",a,b); } 4、“取反”运算符(~) 他是一元运算符,用于求整数的二进制反码,即分别将操作数各二进制 位上的1变为0,0变为1。 例如:~77(8) 源代码: #include <stdio.h> main() { int a=077; printf("%d",~a); } 5、左移运算符(<<) 左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右 操作数指定(右操作数必须是非负 值),其右边空出的位用0填补,高位左移溢出则舍弃该高位。 例如:将a的二进制数左移2位,右边空出的位补0,左边溢出的位舍 弃。若a=15,即00001111(2),左移2 位得00111100(2)。 源代码: #include <stdio.h> main() { int a=15; printf("%d",a<<2); } 左移1位相当于该数乘以2,左移2位相当于该数乘以2*2=4,15<< 2=60,即乘了4。但此结论只适用于该 数左移时被溢出舍弃的高位中不包含1的情况。
单片机自学笔记
预备知识 N进制转化为十进制,按权展开,相加即可。 十进制转化为N进制,整数部分除N求余取整,逆序排列。 二进制转十六进制,先记住:0=0000 1=0001 2=0010 3=0011······E=1110 F=1111这个你应该知道的吧然后再转化,比如:二进制 1101010010.10101先把它从小数点往左右数,四位数一组,不足的补0 所以得到: 0011 0101 0010.1010 1000按照转化的公式: 0011=3 0101=5 0010=2 1010=A 1000=8所以十六进制就是: 352.A8 十六进制转二进制,首先把十六进制数04271544中的每一位数转换为二 进制数,每个数要分四位,不足四位的前面加零,请看下面演示:0 00004 01002 00107 01111 00015 01014 01004 0100将得出四位二进制数串连 起来就是结果了所以,十六进制04271544转换二进制为 100001001110001010101000100 (前面的0就省了) 十六进制 二进制0 00001 00012 00103 00114 01005 01016 01107 01118 10009 1001A 1010B 1011C 1100D 1101E 1110F 1111其中ABCDE对应十进制中的 10,11,12,13,14,15。 2. 数字电路中只有两种电平: 高和低 TTL电平: 高 +5V 低 0V RS232电平:计算机串口 高 -12V 低+12V 所以计算机与单片机之间通讯时需要加电平转换芯片如MAX232 常用进制十进制和十六进制 十六进制:c51 前缀0x,汇编后缀H. 十进制:无,省了(D). 二进制数的逻辑运算 与运算 运算符为”·” 0·X=0 1·1=1 决定事物结果的全部条件同时具备时,结果才会发生。 或运算 决定事物结果的条件中,只要任何一个满足,结果就会发生。 运算符为”+”, 1+X=1 0+0=0。 非运算 只要条件具备了,结果便不会发生,而条件不具备时,结果一 定发生。运算符“-”
51单片机学习笔记

单片机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的一个子集。
MSP430单片机深入学习笔记

复位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)

单片机学习笔记(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:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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优先级设定位。