PIC学习笔记.doc_第1页
PIC学习笔记.doc_第2页
PIC学习笔记.doc_第3页
PIC学习笔记.doc_第4页
PIC学习笔记.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.串行异步通信将TXSTA寄存器的TXEN位置1可使能EUSART的发送器电路。清零TXSTA寄存器的SYNC位可将EUSART配置为异步操作。将RCSTA寄存器的SPEN位置1可使能EUSART并自动将TX/CKI/O引脚配置为输出。如果需要中断,将PIE1寄存器的TXIE中断允许位置1。如果INTCON寄存器的GIE和PEIE位也置1,则立即产生中断TXREG中有数据,而且串口还在传数据,这是TXIF才被清零,其他时间都为1TSR寄存器为空时,TRMT位置1,当有字符从TXREG传送到TSR寄存器时,该位清零TRISC=0;/设置IO通道,0-输出1-输入PORTC=0;/IO口赋值操作/串口初始化函数voidInitUart(void)/配置发送状态7=内部时钟6=8位数据5=使能发送4=异步2=高速(重要)TXSTA=0b10100110;/1=使能串口RCSTA=0b10000000;/波特率设置4=16位波特率(与TXSTA第2位对应)BAUDCON=0b00001000;SPBRG=103;/4MHz9600Baud/TXIE=1;/允许串口中断/串口发送数据voidSendUart(unsignedchardat)TXREG=dat;while(!TRMT);串口接收:自动波特率检测:总结:波特率必须准确,虽然只用发送功能,但是接受寄存器RCSTA也需设置,使能串口。PWM:标准PWM模式会在CCPx引脚上产生高达10位分辨率的脉宽调制(PWM)信号。由下列寄存器控制周期、占空比和分辨率:PRx寄存器TxCON寄存器CCPRxL寄存器CCPxCON寄存器对应位清零将放弃PWM控制权引脚需设置为输出配置CCPTMRSx寄存器的CxTSEL位可以选择要使用的Timer2/4/6定时器。CCPxM:CCPxCON:00(单输出)00(占空比低2位)1101(ECCPx模式选择位)0x0cCCPTMRSx:定时器0:可作为一个8位定时器或者8位计数器使用如果不使用预分频器,则Timer0模块在每个指令周期递增1。通过将选项寄存器的TMR0CS位清零可选择8位定时器模式。定时器2:8位定时器和周期寄存器(分别称为TMRx和:PRx)TMRx与相应的PRx分别匹配时中断TxCON寄存器TxCKPS选择预分频比TMRx在每个时钟边沿递增计数,从00h开始。该计数器可使PIRx寄存器中的TMRxIF即TMRx匹配中断标志位置1。将TMRx匹配中断允许位(PIEx寄存器的TMRxIE)置1来允许中断TxCON:Timer2控制寄存器0(无)0000(后分频比1:1)1(TMRxON,使能定时器)00(TxCKPS预分频选择:1)CCPxCON:CCPx控制寄存器INTCON:中断控制寄存器T2CON:设置分频,允许timer2/定时器初始化voidInitTimer2()INTCON=0x40;/允许外部中断PIE1=0x02;/1=允许Timer2与PR2匹配中断TMR2=0;/在每个时钟边沿递增计数,从00h开始PR2=100;/定时值T2CON=0x04;/后分频1:1预分频1:1允许Timer2定时器2中断函数unsignedintcnt;voidinterruptTimer2()unsignedintcnt;/把全局变量放在中断函数里定义定时器时间显得非常长if(TMR2IE&TMR2IF)/判断是否允许中断且定时器标志被置位TMR2IF=0;cnt+;if(5000=cnt)cnt=0;RA3=RA3;ADC:1.对应引脚配置为模拟引脚ADCON1寄存器的ADCS位进行选择。有以下7种时钟频率可供选择:2.ADC中断标志位是PIR1寄存器中的ADIF位。ADC中断允许位是PIE1寄存器中的ADIE位。必须用软件将ADIF位清零2.10位A/D转换的结果可采用两种格式:左对齐或右对齐。ADCON1寄存器的ADFM位控制输出格式。3.要使能ADC模块,必须将ADCON0寄存器的ADON位设置为1。将ADCN0寄存器的GO/DONE位设置为1可启动模数转换3.转换完成后,清零GO/DONE位、ADIF标志位置1、更新ADRESH和ADRESL4.选择FRC时钟源,ADC可工作于休眠状态5.15.2.6A/D转换步骤这是使用ADC执行模数转换的示例步骤:1.配置端口:禁用引脚输出驱动器(见TRIS寄存器)将引脚配置为模拟引脚(见ANSEL寄存器)2.配置ADC模块:选择ADC转换时钟配置参考电压选择ADC输入通道启动ADC模块3.配置ADC中断(可选):清零ADC中断标志允许ADC中断允许外设中断允许全局中断(1)4.等待所需的采集时间(2)。5.通过将GO/DONE位置1来启动转换。6.通过以下任一方式等待ADC转换完成:查询GO/DONE位等待ADC中断(中断被允许)7.读ADC结果。8.清零ADC中断标志(如果中断被允许的话,必需进行此操作)。ADCON0:0(无)01010(通道10,AN10)0(未进行转换)1(使能ADC)00101001ADCON1:1(右对齐,高6位被置0)000(时钟选择位)0(无)0(负参考电压,VSS相连)00(正参考电压,与VDD相连)10000000ADRESH:AD转换结果的高字节ADRESL:AD转换结果的低字节/ADCInitvoidInitADC(void)ADCON0=0b00101001;/RB1为ADC输入ADCON1=0b10000000;/RB1配置为输入TRISB=0b00000010;/读ADC的值unsignedcharReadVoltage(void)GO_nDONE=1;while(GO_nDONE)continue;returnADRESL;数模转换器(DAC)模块DACCON0寄存器的DACEN位置1来使能DACDACCON1:DAC有32种输出电压。这32种电压可使用寄存器的DACR位进行设置DACCON0:寄存器的DACLPS位置1可以禁止负电压源DACCON0:0(使能DAC)1(选择DAC正参考电压源)1(DAC电平从DACOUT输出)0(无)00(正电压源选择位-VDD)0(无)0(负电压源选择位-Vss)0b01100000DACCON1: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)包含具有以下功能的控制位:中断允许中断边沿极性正输入通道选择负输入通道选择使能比较器:CMxCON0的CxON位置1中断:每个PORTB引脚都带有一个上升沿检测器和一个下降沿检测器。要使某个引脚检测上升沿,必须将IOCBP寄存器中相应的IOCBPx位置1。要使某个引脚检测下降沿,必须将IOCBN寄存器中相应的IOCBNx位置1。通过分别将IOCBP寄存器中相应的IOCBPx位和IOCBN寄存器中相应的IOCBNx位置1,可将某个引脚配置为同时检测上升沿和下降沿。PIE1:外设中断允许寄存器1INTCON、PIR1、PIR2和PIR3寄存器外部中断触发方式设置:OPTION(0x00)寄存器的INTEDG位确定中断发生在哪个边沿。当INTEDG位置1时,上升沿将触发中断。当INTEDG位清零时,下降沿将触发中断。外部中断标志:INTFINTCON(0x78):0(禁止所有中断)1(允许外部中断)1(允许timer0中断)1(允许外部中断)1(允许电平变化中断)0(timer0中断标志未溢出)0(外部中断标志未发生)0(电平变化标志位-未发生)串口中断:只要EUSART接收器使能且接收FIFO中存在未读字符,PIR1寄存器的RCIF中断标志位就会置1。RCIF中断标志位是只读位,不能用软件置1或清零。将以下位置1可允许RCIF中断:PIE1寄存器的RCIE中断允许位INTCON寄存器的PEIE外设中断允许位INTCON寄存器的GIE全局中断允许位当FIFO中存在未读字符时,不管中断允许位的状态如何,RCIF中断标志位都会置1。定时器:定时器0:8位定时器/计数器用到寄存器:OPTION_REG(设置分频)、TMR0(定时值)、INTCON(设置中断,标志位)/定时器0初始化voidInitTimer0()OPTION_REG=0b110000000;/Timer0选择位内部时钟源TMR0CS=0;/TMR0工作于定时器方式采用内部时钟Fose/4TMR0IE=1;/允许Timer0中断TMR0=0;TMR0IF=0;/清除TMR0的中断标志PSA=1;/TMR0不用分频通过将选项寄存器的TMR0CS位清零可选择8位定时器模式定时器1:16位定时器/计数器分别配置T1CON寄存器中的TMR1ON位和T1GCON寄存器中的TMR1GE位可使能Timer1TMR1ONTMR1GETimer1工作状态00关闭01关闭10始终开启11使能计数时钟源选择:引脚说明:MCLR/Vpp:复位低电平有效RA3/AN3/Vref:AD参考电压输入RB0/INT/:外部中断预分频:T1CON寄存器的T1CKPS位控制该预分频计数器。中断:T1CON寄存器的TMR1ON位PIE1寄存器的TMR1IE位INTCON寄存器的PEIE位INTCON寄存器的GIE位在中断服务程序中将TMR1IF清零可以清除中断。捕捉/比较/PWM模块捕捉模式:该外设能对事件的持续时间计时比较模式:允许用户在达到预先设定的定时时间后触发一个外部事件PWM模式:可产生频率和占空比都可变化的脉宽调制信号由下列寄存器控制周期、占空比和分辨率:PRx寄存器TxCON寄存器CCPRxL寄存器CCPxCON寄存器配置标准PWM1.TRISx设置对应PWM引脚为输出2.PRx装PWM周期值3.CCPxCON配置CCP模块工作于PWM模式4.CCPRxL与CCPxCON寄存器的DCxBx位,存放PWM占空比值5.CCPTMRSx中CxTSEL,选择生成PWMTimer2/4/6资源可编程死区延时模式:避免直通电流损坏桥式功率开关PWM脉冲转向模式:可在多个引脚上同时输出同一PWM信号脉冲转向同步:定义大数组的方法:在定义数组时,最好将数组定义在一个BANK内。如果数组的值是常数,可以将其声明到程序存储区,如:constromcharch=“Hello”;MPLAB-C18支持大于256字节的数组,但需要修改连接文档(LinkerScript)C:mcc18lkr18f452.lkr,数组的扩展必须是相邻的bank,MicrochipPICmicro单片机C语言程序设计此区域必须加以保护以避免被其他的变量所使用,使用“PROTECTED”属性参数。程序模块:.口操作TRISA=0;/设置IO通道,0-输出1-输入PORTA=0;/IO口赋值操作.定时器:OPTION=0x07;INTCON=0xa0;TMR0=61;voidinterrupttime0()T0IF=0;/清楚中断标志位TMR0=61;intnum+;指令周期:PIC单片机的时钟经过内部分频,实际的工作频率为晶振频率的四分之一,同时指令的执行采用流水线方式,大部分的指令的执行时间是一个周期,所以在用4MHz的晶振时,指令执行的最大速度为1MIPS,即指令周期为1微秒。只有设置为异步计数器模式时,Timer1才能在休眠期间工作PORTA:是5位宽的双向端口TRISA:数据方向寄存器,TRISA=1PORTA为输入反之为输出上电复位时引脚默认为模拟输入,读为0PORTB:8位双向端口TRISB:数据方向寄存器,TRISB=1PORTB为输入反之为输出PORTB引脚有内部弱上拉,端口被配置为输出时,弱上拉会自动关闭TMR0:Timer0模块寄存器只要有中断发生,相应中断标志位就会被置1ADC:低位有效,配置和使用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位清零A/D转换步骤以下是用ADC执行模数转换的示例步骤:1.配置端口:禁止引脚输出驱动器(见TRIS寄存器)将引脚配置为模拟2.配置ADC模块:选择ADC转换时钟配置参考电压选择ADC输入通道选择结果格式开启ADC模块3.配置ADC中断(可选):清零ADC中断标志允许ADC中断允许外设中断允许全局中断4.等待所需采集时间5.通过将GO/DONE位置1启动转换。6.通过以下方式之一等待ADC转换完成:查询GO/DONE位等待ADC中断(已允许中断)7.读取ADC结果8.清零ADC中断标志(如果已允许中断则需要)中断:中断控制寄存器(INTCON)用标志位记录各种中断请求。同时还包括各个中断允许位和全局中断允许位PICC可以实现C语言的中断服务程序。中断服务程序有一个特殊的定义方法:voidinterruptISR(void);其中的函数名“ISR”可以改成任意合法的字母或数字组合,但其入口参数和返回参数类型必须是“void”型,亦即没有入口参数和返回参数,且中间必须有一个关键词“interrupt”。中断服务程序:voidinterruptISR(void)/中断服务程序if(T0IE&T0IF)/判TMR0中断T0IF=0;/清除TMR0中断标志/在此加入TMR0中断服务if(TMR1IE&TMR1IF)/判TMR1中断TMR1IF=0;/清除TMR1中断标志/在此加入TMR1中断服务/中断结束并返回用“_CONFIG”预处理指令定义芯片的配置位;除了bank0内的变量声明时不需特殊处理外,定义在其它bank内的变量前面必须加上相应的bank序号,例如:bank1unsignedcharbuffer32;/变量定位在bank1中bank2bitflag1,flag2;/变量定位在bank2中bank3floatval8;/变量定位在bank3中PIC单片机的位操作指令是非常高效unionstructunsignedb0:1;unsignedb1:1;unsignedb2:1;unsignedb3:1;unsignedb4:1;unsignedb5:1;unsigned:2;/最高两位保留oneBit;unsignedcharallBits;myFlag;定义位变量于同一字节需要存取其中某一位时可以myFlag.oneBit.b3=1;/b3位置1一次性将全部位清零时可以myFlag.allBits=0;/全部位变量清0当程序中把非位变量进行强制类型转换成位变量时,要注意编译器只对普通变量的最低位做判别:如果最低位是0,则转换成位变量0;如果最低位是1,则转换成位变量1变量的绝对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论