pic单片机入门与实战
------------------------------------------------------------------------------------------
第1章结构和指令系统
1 冯结构和哈佛结构:程序存储器和数据存储器的独立否,数据处理字的长度分8位机,16位机等,程序存储器是指指令的长度。
pic16f877a为8位机,14bit的指令长度。
2 8层硬件堆栈,无push,pop软件指令,进出栈由硬件完成。
3 单字指令,14bit包含操作码和操作数,优点抗干扰,缺点影响寻址长度。
4 pc计数器最多为13位,2的13次方为8k。
5 中断机制
中断源:0x0004
终端优先级:中断程序中判断的先后顺序
不支持中断嵌套(中断中自动关闭gie,中断完毕后自动打开gie,如果此时发生中断,中断标志一直保存,当此中断完成后进入这个中断
标志代表的中断。主观不要在中断中开gie。)
1.6中断机制
重要的中断源:
外部引脚INTRB0沿跳变中断
定时器TMR0、TMR1、TMR2计数溢出中断
PORTB【7-4】4个引脚输入电平变化中断
CCP模块时间捕捉比较匹配中断
串行通信(同步异步)接收发送中断
ad转换结束中断
8位并行口从动口中断
内部eeprom写入完成中断
液晶显示刷新中断
内核资源中断:外部引脚沿跳变,定时器tmr0溢出和 portb【7-4】电平变化。INTCON
外设中断:剩下的中断。
------------------------------------------------------------------------------------------
第2章单片机的特色
工作时钟模式
复位
低功耗
在线串行编程
配置字
------------------------------------------------------------------------------------------
第3章pic单片机的开发环境
mplab-ide的使用
------------------------------------------------------------------------------------------
第4章pic单片机的开发工具
mplab-icd2的使用
------------------------------------------------------------------------------------------
第5章pic单片机的io口及其灵活应用
5.1.6引脚端口的esd保护
-------------------------
5.1基本特征
5.1.1完全双向的 i/o引脚
输出可以提供很强的负载驱动能力,拉电流和灌电流可达25ma。
输入由端口引入的输入漏电流不超过1ua,引脚可视为开路或浮空。
输入输出可以设定且每一个引脚都独立且不互相影响。
5.1.2端口输入输出设定
5.1.3端口的读和写
i/o方向寄存器:TRISX(X=ABCDE),保存在锁存器中,1输入0输出,
单片机所有i/o引脚在任何条件的复位后将自动回到高阻抗输入状态,trxs为1.
i/o端口寄存器:PORTX(X=ABCDE)
输出的高低由钳位二极管决定。
输入时由外部电压决定,尽量避免输入引脚悬空。
5.1.4端口的输出驱动能力
很强的输出驱动能力,pic单片机i/o引脚适合直接驱动的是纯电阻负载,一般不能直接用于驱动感性负载。
5.1.5端口的“读-修改-写”问题
若引脚设为输出状态,则在正常情况下输出1读回的也是1输出0读回的也是0.但是由于外围硬件电路设计
的缺陷或者因为特殊的引脚配置而不能读回与原来输出一支的结果。在对端口的 单个引脚进行位设置时,
这个问题就会集中暴露出来。
5.1.6引脚端口的esd保护
-------------------------
5.2 i/o的设定方法
功能复用中的 内部模块转换模块输入引脚和模拟比较器的输入引脚,在复位后缺省的是模拟信号输入而不是
数字信号输入,如果使用的是数字i/o,则必须在初始化时通过设置相关的配置寄存器把它们改成数字i/o,否则、
无法按用户的设定工作。
除此外,其他的复用都是同样的数字信号。所以,这些有功能复用的 引脚在复位后缺省状态为普通数字i/o,而不是
特定功能模块的 特殊引脚,无需特别的配置设定就可以使用。
5.1.6引脚端口的esd保护
-------------------------
5.3 PORTA口
一般有RA0-RA5,普通数字,adc,模拟比较等。
RA4没有上钳位二极管,输出时只能输出0,不能输出1。输入时做限压保护。
5.1.6引脚端口的esd保护
-------------------------
5.4 PORTB
RB6(PGC)RB7(PGD)下载线引脚
PORTB弱上拉,在输入时内部都有 一个弱上拉电阻可用。
RB0(INT)引脚有中断功能,上升沿或者下降沿可以产生中断,当一些相关的寄存器设置正确时。
RB7-RB4引脚状态变化中断,引脚状态锁存器。
5.1.6引脚端口的esd保护
-------------------------
5.5 PORTC
数字功能,定时器复用
5.1.6引脚端口的esd保护
-------------------------
5.6 PORTD和PORTE
数字功能,从动并口,模拟数字转换模块模拟输入。
5.1.6引脚端口的esd保护
-------------------------
5.7 引脚的应用技巧(针对普通数字)
当做输入时视为高输入阻抗,在电路中视为开路。
当作输出时,输出1时视为一个正电源。输出0时视为引脚接地。
------------------------------------------------------------------------------------------
第6章定时器资源和应用
三个定时器TMR0,TMR1,TMR2,脉冲计数器。来源于内部称为定时器,来源于外部称为计数器。
-------------------------
TMR0:8位宽度,定时器寄存器可读写,分频器,可以选择内部计数或者外部脉冲,计数值从0xff变0时溢出产生中断,外部脉冲时可以选择上升沿或者下降沿。
option_reg:rbpu intedg t0cs t0se psa ps2 ps1 ps0
rbpu:b口内部弱上拉使能控制位
intedg:rb0int引脚的中断沿上升沿或者下降沿
t0cs:选择tmr0的 计数时钟源 外部脉冲或者内部
t0se:计数的外部脉冲沿上升和下降
psa:预分频指派 给狗或者tmr0
ps2:ps0:分频比例
tmr0做定时器时开始工作后由于没有一个对应的控制位可以让tmr0停止计数。
-------------------------
tmr1 16位定时计数器,tmr1h和 tmr1l,tm1r1if和tmr1ie
工作模式:16位同步定时16位同步计数。
-------------------------
tmr2 8位可与ccp产生pwm,上限可以设定pr2,预分频和后分频。
------------------------------------------------------------------------------------------
第7章模数转换模块
中档pic单片机:多路ad8位,多通道多路开关。
adcon0 adcon1:控制寄存器
adres:转换结果
引脚的输入输出方向寄存器和相关中断寄存器
------------------------------------------------------------------------------------------
第8章usart通信模块及其使用
通用同步异步收发器,即usart是常用的串行通信接口。
usart=全双工的异步通信模式+半双工的同步通信模式.
同步通信模式=主模式+从模式。
异步串行通信比较常用。
TXSTA:数据发送控制和状态寄存器,trmt发送移位寄存器状态位,该位只读,1为寄存器空,0为移位寄存器正在忙于发送数据。
RCSTA:
中断控制寄存器:接收中断标志为rcif,其对应的中断使能位是rcie,发送中断标志为txif,使能控制位为txie。
usart隶属单片机的 外围功能模块,所以要使接收或发送中断得到响应,peie和gie都必须设置为1.
rcif和txif这两个中断标志位和以前的中断标志位有本质的区别。
一般的中断被硬件置1后,必须由软件清除。
但rcif和txif将完全由硬件决定0还是1,软件无法改变其状态。
波特率设定:spbrg和bgrh为控制。
TXREG:串行数据发送寄存器
RCREG:串行数据接收寄存器
------------------------------------------------------------------------------------------
8.4 usart模块的 异步通信
1为高电平,0为低电平。一个完整的字节通信过程=1个起始位数据0+8或9位的数据信息+停止位1
usart不支持硬件自动计算奇偶位校验的功能。
------------------------------------------------------------------------------------------
8.4.2 异步通信数据发送过程
发送移位寄存器tsr,无法通过程序对其访问,软件只能通过一个状态位trmt来判断当前tsr的状态。
trmt=1,tst为空。trmt=0,tsr正处于移位发送忙状态。trmt为只读,且没有对应的中断发生机制,所以只能在软件中用查询的方式判别。
//tsr发送移位寄存器是数据发送的关键寄存器,只能通过trmt判断tsr的空闲与忙碌。
当程序将一个字节的数据写入发送缓冲寄存器txreg后,
如果tsr为空,则tsr立即从txreg中获得发送数据,然后在波特率时钟控制下开始一位一位往外发送。
如果tsr正忙于当前的发送任务,则等到最后一个停止位发送完毕后,tsr就立即从txreg处获得新的数据,开始一次新的发送过程。
//当txreg被赋予数据,如果tsr为空则立即从txreg中取数据然后发送。如果tsr忙则等到发送完毕后再从txreg中取数据然后发送。
只要tsr从txreg中获得了数据,txreg就立即变空,此时txif中断标志就被置1有效,通过txif中断或直接查询标志位可以在txreg中装入新的数据就绪待发,就可以实现2个字节的连续发送。(txreg的数据被取走变空)
如果txreg在装入数据后没有被tsr取走,即txreg处于忙状态,txif就被自动清0.(txreg忙没被取走状态没改变)
因此txif的置位和清0完全由txreg寄存器的状态决定或txen位的设定,软件无法改变。实际上当软件完成初始化后txen=1,txif就已经被置位,因为此时没有开始通信txreg肯定为空。
//
只要txen=1就可以开始异步通信的数据发送。但如果tsr为空且没有数据写入txreg中,肯定不会有数据发送出去。
因此软件可以使实现由txen控制开始一次数据的发送过程,平时txen=0,关闭发送,txif标志也为0;
把数据写入txreg内就绪后,将txen设定1,tsr立即从txreg装入数据开始移位发送,同时由于txreg变空txif将被置1.程序必须等到trmt变为1,即tsr的发送过程全部结束后才将txen重新清0关闭发送功能,否则txen=0,将使当前发送过程被结束。
//txen控制数据的发送
8.4.3 异步通信数据接收过程
串行数据接收的关键部分是一个接收移位寄存器rsr。
一般将tx设置为输出,将tx设置为输入。
rcreg寄存器实际上是一个深度为2的fifo缓冲队列,它可以容纳连续2次串行接收得到的数据,同时rsr可以处在第3个数据的移位接收过程中。
如果fifo队列中没有任何数据,即rcreg为空,则接收中断标志rcif=0;
ricf为只读位,软件无法修改。只有在rcseg为空时才会由硬件自动清0.
只要fifo队列中有一个数据就绪,rcreg就非空,rcif就被置1,单片机可以响应此中断并从rcreg中读取存在fifo队列中接收的数据。
由于串行数据何时到来无法预测故一般程序中都用中断响应方式及时读取接收到的数据。
//rcif为只读位,软件无法修改,硬件根据rcreg的情况来决定,fifo队列中没有数据rcseg为空,rcif=0;fifo队列中有数据rcseg有数据,rcif=1,可以响应中断。
如果fifo队列已经满,此时rsr又有一个新的数据被移位接受完毕,就无法放入rcreg队列。此时rsr中最新收到的 数据将被丢弃,同时产生一个溢出错误标志位oerr即oerr=1.
oerr必须用软件清除,其方法是先连续读rcreg两次,获取已经存在队列中的有用数据,将接收缓冲队列清空口设置cren=0,最后再置位cren=1,让整个接收模块硬件进行一次复位重置,即可将oerr错误标志位清除。
注意,一旦出现oerr=1后,必须及时用上述的方法将其复位,不然rsr中的数据将被禁止放入rcreg队列中,程序就无法接收新的数据。
//如果发生溢出错误,必须采用方法将其清除否则无法接收到新的数据。
ferr:接收数据溢出错误,只读。ferr的出现并不影响后续数据的接收。读一次rcreg后,ferr和rx9d就将随新的数据到来而被立即更新。所以针对这2个位的判读要在读rcreg之前完成,这一先后顺序也不能出错。造成原因是干扰和波特率误差偏大,后者是主要原因。
------------------------------------------------------------------------------------------
第9章usart通信模块及其使用
IIC SPI
------------------------------------------------------------------------------------------
第10章ccp模块
------------------------------------------------------------------------------------------
第11章c语言编程
文章评论(0条评论)
登录后参与讨论