PIC学习笔记文档格式.docx
- 文档编号:17431910
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:20
- 大小:24.62KB
PIC学习笔记文档格式.docx
《PIC学习笔记文档格式.docx》由会员分享,可在线阅读,更多相关《PIC学习笔记文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
//TXIE
1;
//允许串口中断
}
//串口发送数据
SendUart(unsigned
char
dat)
TXREG
dat;
while(!
TRMT);
串口接收:
自动波特率检测:
总结:
波特率必须准确,虽然只用发送功能,但是接受寄存器RCSTA也需设置,使能串口。
PWM:
标准PWM
模式会在
CCPx
引脚上产生高达
10位分辨率的脉宽调制(PWM)信号。
由下列寄存器控制周期、占空比和分辨率:
•
PRx
寄存器
TxCON
CCPRxL
CCPxCON
寄存器
对应位清零将放弃PWM控制权
引脚需设置为输出
配置CCPTMRSx
寄存器的
CxTSEL<
1:
0>
位可以选择要使用的
Timer2/4/6
定时器。
CCPxM:
CCPxCON:
00(单输出)00(占空比低2位)
1101
(ECCPx模式选择位)
0x0c
CCPTMRSx:
定时器0:
可作为一个8位定时器或者8位计数器使用
如果不使用预分频器,则Timer0模块在每个指令周期递增1
。
通过将选项寄存器的
TMR0CS位清零可选择8位定时器模式。
定时器2:
8
位定时器和周期寄存器(分别称为TMRx
和:
)
TMRx
与相应的PRx
分别匹配时中断
TxCKPS<
选择预分频比
在每个时钟边沿递增计数,从00h
开始。
该计数器可使
PIRx寄存器中的
TMRxIF
即
TMRx匹配中断标志位置
1。
将TMRx
匹配中断允许位(PIEx寄存器的
TMRxIE)置
来允许中断
TxCON:
Timer2
控制寄存器
0(无)
0000(后分频比1:
1)1(TMRxON,使能定时器)
00(TxCKPS预分频选择:
1)
CCPxCON:
CCPx控制寄存器
INTCON:
中断控制寄存器
T2CON:
设置分频,
允许timer2
//定时器
初始化
InitTimer2()
0x40;
//允许外部中断
PIE1
0x02;
//1
允许Timer2与PR2
匹配中断
TMR2
//在每个时钟边沿递增计数,从00h
开始
PR2
100;
//定时值
T2CON
0x04;
//后分频1:
预分频
1:
允许Timer2
定时器2
中断函数
unsigned
int
cnt;
interrupt
Timer2()
//把全局变量放在中断函数里定义
定时器时间显得非常长
if(TMR2IE
&
TMR2IF)
//判断是否允许中断
且
定时器标志被置位
TMR2IF
cnt++;
if(5000
==
cnt)
cnt
RA3
~RA3;
ADC:
对应引脚配置为模拟引脚
ADCON1寄存器的ADCS
位进行选择。
有以下7
种时钟频率可供选择:
2.
ADC中断标志位是PIR1寄存器中的ADIF位。
ADC中断允许位是PIE1寄存器中的ADIE
位。
必须用软件将ADIF位清零
10位A/D
转换的结果可采用两种格式:
左对齐或右对齐。
ADCON1寄存器的ADFM
位控制输出格式。
3.
要使能ADC模块,必须将ADCON0寄存器的ADON位设置为1。
将ADCN0寄存器的GO/DONE
位设置为1
可启动模数转换
转换完成后,清零GO/DONE位、ADIF标志位置1、更新ADRESH和ADRESL
4.
选择
F
RC
时钟源,ADC可工作于休眠状态
5.
15.2.6
A/D
转换步骤
这是使用ADC执行模数转换的示例步骤:
配置端口:
禁用引脚输出驱动器(见TRIS寄存器)
将引脚配置为模拟引脚(见ANSEL寄存器)
配置ADC模块:
选择ADC转换时钟
配置参考电压
选择ADC输入通道
启动ADC模块
配置ADC中断(可选):
清零ADC中断标志
允许ADC中断
允许外设中断
允许全局中断
(1)
等待所需的采集时间
(2)
5.
通过将GO/DONE
位置1
来启动转换。
6.
通过以下任一方式等待ADC转换完成:
查询GO/DONE
位
等待ADC中断(中断被允许)
7.
读ADC结果。
8.
清零ADC中断标志(如果中断被允许的话,必
需进行此操作)。
ADCON0:
0(无)01010(通道10,AN10)0(未进行转换)1(使能ADC)
00101001
ADCON1:
1(右对齐,高6位被置0)000(时钟选择位)0(无)0(负参考电压,VSS相连)00(正参考电压,与VDD相连)
10000000
ADRESH:
AD转换结果的高字节
ADRESL:
AD转换结果的低字节
//ADC
Init
InitADC(void)
ADCON0
0b00101001;
//RB1
为ADC输入
ADCON1
配置为输入
TRISB
0b00000010;
//读ADC的值
ReadVoltage(void)
GO_nDONE
while(GO_nDONE)
continue;
return
ADRESL;
数模转换器(DAC)模块
DACCON0
寄存器的DACEN位置1
来使能DAC
DACCON1:
DAC有32种输出电压。
这32种电压可使用寄存器的DACR<
4:
位进行设置
DACCON0:
DACLPS
可以禁止负电压源
0(使能DAC)1(选择DAC正参考电压源)1(DAC电平从DACOUT输出)
0(无)00(正电压源选择位-VDD)0(无)0(负电压源选择位-Vss)
0b01100000
DACCON1
:
000(无)
4-0(DAC电压输出选择位)
FVRCON:
固定参考电压控制寄存器(bit3-2)
CDAFVR<
比较器和DAC固定参考电压选择位
00
比较器和DAC固定参考电压外设输出关闭
01
比较器和DAC固定参考电压外设输出为1x(1.024V)
10
比较器和DAC固定参考电压外设输出为2x(2.048V)
11
比较器和DAC固定参考电压外设输出为4x(4.096V)
输出电压:
比较器模块:
两个模拟电压的大小并输出一个数字量以指示输入量的相对大小
CMxCON0
寄存器(见寄存器
17-1
)包含具有以下功能
的控制和状态位:
使能
输出选择
输出极性
速度/
功耗选择
滞回电压使能
输出同步
CMxCON1
17-2
的控制位:
中断允许
中断边沿极性
正输入通道选择
负输入通道选择
使能比较器:
的CxON位置1
中断:
每个
PORTB
引脚都带有一个上升沿检测器和一个下降沿检测器。
要使某个引脚检测上升沿,必须将IOCBP
寄存器中相应的
IOCBPx
要使某个引脚检测下降沿,必须将
IOCBN
IOCBNx
通过分别将IOCBP寄存器中相应的IOCBPx
位和IOCBN寄存器中相应的IOCBNx
位置1,可将某个引脚配置为同时检测上升沿和下降沿。
PIE1:
外设中断允许寄存器1
、PIR1、PIR2和PIR3寄存器
外部中断触发方式设置:
OPTION
(0x00)寄存器的INTEDG
位确定中断发生在哪个边沿。
当INTEDG
时,上升沿将触发中断。
当
INTEDG
位清零时,下降沿将触发中断。
外部中断标志:
INTF
INTCON(0x78):
0(禁止所有中断)1(允许外部中断)1(允许timer0中断)1(允许外部中断)1(允许电平变化中断)0(timer0中断标志未溢出)0(外部中断标志未发生)0(电平变化标志位-未发生)
串口中断:
只要EUSART接收器使能且接收FIFO
中存在未读字符,PIR1寄存器的RCIF中断标志位就会置1。
RCIF中断标志位是只读位,不能用软件置1
或清零。
将以下位置1
可允许RCIF中断:
寄存器的RCIE中断允许位
寄存器的PEIE外设中断允许位
全局中断允许位
当FIFO
中存在未读字符时,不管中断允许位的状态如何,RCIF中断标志位都会置1。
定时器:
8位定时器/计数器
用到寄存器:
OPTION_REG
(设置分频)、TMR0(定时值)、INTCON(设置中断,标志位)
//定时器0
InitTimer0()
0b110000000;
//Timer0选择位内部时钟源
TMR0CS
//TMR0工作于定时器方式
采用内部时钟
Fose/4
TMR0IE
//允许Timer0中断
TMR0
TMR0IF
//清除TMR0的中断标志
PSA
//TMR0不用分频
TMR0CS位清零可选择8位定时器模式
定时器1:
16位定时器/计数器
分别配置T1CON
寄存器中的TMR1ON位和T1GCON寄存器中的TMR1GE位可使能Timer1
TMR1ON
TMR1GETimer1
工作状态
0
关闭
始终开启
使能计数
时钟源选择:
引脚说明:
MCLR/Vpp:
复位
低电平有效
RA3/AN3/Vref:
AD参考电压输入
RB0/INT/:
外部中断
预分频:
T1CON
T1CKPS
位控制该预分频计数器。
寄存器的TMR1ON位
寄存器的TMR1IE
寄存器的PEIE位
在中断服务程序中将TMR1IF
清零可以清除中断。
捕捉/
比较/PWM
模块
捕捉模式:
该外设能对事件的持续时间计时
比较模式:
允许用户在达到预先设定的定时时间后触发一个外部事件
PWM
模式:
可产生频率和占空比都可变化的脉宽调制信号
配置标准PWM
TRISx设置对应PWM引脚为输出
PRx装PWM周期值
CCPxCON配置CCP模块工作于PWM模式
CCPRxL与CCPxCON寄存器的DCxBx位,存放PWM占空比值
CCPTMRSx中CxTSEL<
1,0>
,选择生成PWMTimer2/4/6资源
可编程死区延时模式:
避免直通电流损坏桥式功率开关
PWM脉冲转向模式:
可在多个引脚上同时输出同一PWM
信号
脉冲转向同步:
定义大数组的方法:
在定义数组时,最好将数组定义在一个BANK内。
如果数组的值是常数,可以将其声
明到程序存储区,如:
const
rom
ch[]={“Hello”};
MPLAB-C18支持大于256字节的数组,但需要修改连接文档(Linker
Script)
C:
\mcc18\lkr\18f452.lkr,数组的扩展必须是相邻的bank,Microchip
PICmicro单片机C语言程序设计
此区域必须加以保护以避免被其他的变量所使用,使用“PROTECTED”属性参数。
程序模块:
1.
IO口操作
TRISA
PORTA
2. 定时器:
OPTION=0x07;
INTCON=0xa0;
TMR0=61;
time0()
T0IF=0;
//清楚中断标志位
intnum++;
指令周期:
PIC单片机的时钟经过内部分频,实际的工作频率为晶振频率的四分之一,同时指令的执行采用流水线方式,大部分的指令的执行时间是一个周期,所以在用4MHz的晶振时,指令执行的最大速度为1MIPS,即指令周期为1微秒。
只有设置为异步计数器模式时,Timer1才能在休眠期间工作
PORTA:
是5位宽的双向端口
TRISA:
数据方向寄存器,
PORTA为输入
反之为输出
上电复位时引脚默认为模拟输入,读为0
PORTB:
8位双向端口
TRISB:
PORTB为输入
PORTB引脚有内部弱上拉,端口被配置为输出时,弱上拉会自动关闭
TMR0:
Timer0模块寄存器
只要有中断发生,相应中断标志位就会被置1
ADCON1:
低3位有效,
配置和使用ADC时必须考虑以下功能:
端口配置
通道选择
•ADC参考电压选择
•ADC转换时钟源
中断控制
ADC模块可在模数转换完成时产生中断。
ADC中断标
志位是PIR1寄存器中的ADIF位。
ADC中断允许位是
PIE1寄存器中的ADIE位。
ADIF位必须用软件清零。
器件运行或休眠时都可产生该中断。
要使能ADC模块,ADCON0寄存器的ADON
位必须设置为1
将ADCON0寄存器的GO/DONE
位设置为1将启动模数转换。
转换完成
转换完成时,ADC模块将:
清零GO/DONE
位
将ADIF标志位置1
用新的转换结果更新ADRES
如果必须在转换完成前终止转换,可用软件将
GO/DONE
位清零
以下是用
ADC执行模数转换的示例步骤:
禁止引脚输出驱动器(见TRIS寄存器)
将引脚配置为模拟
选择结果格式
开启ADC模块
等待所需采集时间
启动转换。
通过以下方式之一等待ADC转换完成:
等待ADC中断(已允许中断)
读取ADC结果
清零ADC中断标志(如果已允许中断则需要)
中断控制寄存器(INTCON
)用标志位记录各种中断请求。
同时还包括各个中断允许位和全局中断允许位
PICC可以实现C
语言的中断服务程序。
中断服务程序有一个特殊的定义方法:
ISR(void);
其中的函数名“ISR
”可以改成任意合法的字母或数字组合,但其入口参数和返回参数类型必须是“void
”型,亦即没有入口参数和返回参数,且中间必须有一个关键词“interrupt
”。
中断服务程序:
ISR(void)
//中断服务程序
{
if
(T0IE
T0IF)
//判TMR0
中断
T0IF
//
清除TMR0
中断标志
//在此加入TMR0
中断服务
}
(TMR1IE
TMR1IF)
//判TMR1
TMR1IF
//清除TMR1
//在此加入TMR1
//中断结束并返回
用“__CONFIG
”预处理指令定义芯片的配置位;
除了bank0
内的变量声明时不需特殊处理外,定义在其它bank
内的变量前面必须加上
相应的bank
序号,例如:
bank1
buffer[32];
//变量定位在bank1中
bank2
bit
flag1,flag2;
//变量定位在bank2中
bank3
float
val[8];
//变量定位在bank3中
PIC
单片机的位操作指令是非常高效
union
struct
b0:
b1:
b2:
b3:
b4:
b5:
:
2;
//最高两位保留
oneBit;
allBits;
myFlag;
定义位变量于同一字节
需要存取其中某一位时可以
myFlag.oneBit.b3=1;
//b3
一次性将全部位清零时可以
myFlag.allBits=0;
//全部位变量清0
当程序中把非位变量进行强制类型转换成位变量时,要注意编译器只对普通变量的最低
位做判别:
如果最低位是
,则转换成位变量
;
变量的绝对位置定位:
tmpData
@
0x20;
//tmpData定位在地址0x20
中档系列PIC
单片机的硬件堆栈深度为8
级
嵌入汇编代码:
一行代码:
asm(“clrwdt”);
多行代码:
#asm
movlw
0x20
movwf
_FSR
clrf
_INDF
incf
_FSR,f
btfss
_FSR,7
goto
$-3
#endasm
寄存器:
它包含TMR0
寄存器溢出、RB端口电平变化和外部RB0/INT
引脚中断等各种允许位和标志位
PIR1:
T1CON:
OPTION:
ADRES:
AD转换后的值放于此
C语言的位域:
用于指定结构体或者联合体中成员在内存存储时所占用的位数。
位域的使用主要出现在如下两种情况:
(1)当机器可用内存空间较少而使用位域可以大量节省内存时。
如,当把结构作为大数组的元素时。
(2)当需要把一结构或联合映射成某预定的组织结构时。
例如,当需要访问字节内的特定位时。
带位域的结构在内存中各个位域的存储方式取决于具体的编译程序;
它们既可以从左到右,也可以从右到左存储。
位域从低位开始书写
数字滤波:
在软件中对采集到的数据进行消除干扰处理,对数据进行平滑加工。
采用算术平均值与统计学数据融合
防脉冲干扰平均值滤波,去掉最高点和最低点
拿计数器的预分频器来说吧,假如你不使用分频器,那么可能1us计数器加1(有使用的晶振大小决定),但是使用预分频器后就变成2us加1了(假设分频比预先设置为1:
2的话),说到底就是为了增大计数的时间间隔。
分频器的使用很简单,只须注意两点:
1、决定用与不用,有的可以分配给其他的功能模块使用,而有的只能是把分频比设置为1:
2、分频比为多少,这要根据你的需要来决定。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PIC 学习 笔记