好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

第四章PIC16F877A功能及其编程.pptx

110页
  • 卖家[上传人]:博****1
  • 文档编号:605797832
  • 上传时间:2025-05-22
  • 文档格式:PPTX
  • 文档大小:651.42KB
  • / 110 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第四章PIC16F877A功能及其功能及其编程程制作:王骞2015.94.1输入入输出端口出端口4.2中断中断4.3定定时/计数器数器TMR04.4定定时/计数器数器TMR14.5定定时/计数器数器TMR24.6A/D转换器器4.7CCP模模块(Capture/Compare/PWM)4.8异步串行通信(异步串行通信(USART)4.9EEPROM的的读写写4.10SLEEP工作方式工作方式结束4.1 输入入输出端口出端口 877A有有33根根IO引脚有A、B、C、D、E共共5个端个端口,其中口,其中A端口的有端口的有6个引脚,个引脚,B、C、D口各口各8个个引脚,引脚,E口口3个引脚各自端口的方向控制寄存器各自端口的方向控制寄存器TRISA、TRISB、TRISC、TRISD、TRISE,控制其相,控制其相应的端口是的端口是作作为输出出还是是输入0:输出;出;1:输入入所有的所有的I/O端口,上端口,上电复位默复位默认值均均为1,即,即为输入口每个每个IO引脚的最大引脚的最大输出出电流(拉流(拉电流)流)为20mA,最大,最大输入入电流(灌流(灌电流)流)为25mA端口端口A、B、E的最大的最大输入入电流流总和与和与输出出电流流总和均和均为200mA;端口端口C、D的最大的最大输入入电流流总和与和与输出出电流流总和也和也为200mA。

      对I/O端口的写操作是一个端口的写操作是一个读修改写修改写的的过程一条写一条写IO引脚的指令如引脚的指令如RB3=1,实际上是在指令上是在指令的开的开头读入整个入整个B端口,并在指令周期的末尾端口,并在指令周期的末尾时刻把刻把1写入写入RB端口端口3的的输出出锁存器如果立即如果立即对同一端口操作,如同一端口操作,如x=PORTB,在,在指令周期的开始指令周期的开始处,由于前一指令,由于前一指令产生在生在IO口的口的电平尚未平尚未稳定,定,读入的可能是引脚的前一个状入的可能是引脚的前一个状态而不是新状而不是新状态值因此因此连续对同一端口的操作同一端口的操作时,最好用一个,最好用一个NOP指令或者其他不指令或者其他不访问该I/O端口的指令隔开端口的指令隔开RA31;NOP();RA4=0;4.1.1 端口端口A因此因此,在使用,在使用RA口口时,除了要,除了要设置置TRISA外,有外,有时相关寄存器也要相关寄存器也要设置注意注意:在:在上上电复位复位时,与与AN有关的有关的端口的默端口的默认设置是作置是作为模模拟端口,端口,即即ADCON1(见4.6)中默)中默认值为0b00 xx0000,这个个值的的设置置结果是除果是除RA4外的外的所有的所有的RA引脚都引脚都作作为模模拟输入入。

      1、端口、端口B有有8个引脚个引脚:lRB0/INT:IO引脚、引脚、INT中断;中断;lRB1、RB2、RB4、RB5:IO引脚;引脚;lRB3/PGM:IO引脚、低引脚、低电压编程程电压引脚;引脚;lRB6/PGC:IO引脚、引脚、编程程时钟线;lRB7/PGD:IO引脚、引脚、编程数据程数据线2、如果使用、如果使用PICKIT3作作为调试工具,工具,RB6、RB7引脚将被引脚将被调试系系统占用,因此在占用,因此在调试时此二个引此二个引脚脚暂不能使用不能使用4.1.2 端口端口B3、8个引脚具有内部弱上拉使能个引脚具有内部弱上拉使能控制控制由由OPTION_REG寄存器寄存器的第的第7位位RBPU控制,如果控制,如果弱上拉使能,作弱上拉使能,作为输入入的的RB口在端口口在端口悬空空时将被上将被上拉到高拉到高电平以RB0为例,如下例,如下图所示:所示:4、RB0/INT具有外部中断功能具有外部中断功能5、RB的的高的的高4位位还具有具有电平平变化中断功能化中断功能当当RB4RB7引脚做引脚做为输入入时,只要有一,只要有一个引脚的个引脚的逻辑电平平发生生变化,就会使化,就会使RB电平中断平中断标志位置志位置1。

      这些功能的些功能的设置,与置,与OPTION、INTCON有关,参有关,参见相关各章相关各章节4.1.3 端口端口ClRC0/T1OSO/T1CKI:IO引脚、引脚、TMR1振振荡输出、出、TMR1外部脉冲外部脉冲输入;入;lRC1/T1OSI/CCP2:IO引脚、引脚、TMR1振振荡输入、入、CCP2;lRC2/CCP1:IO引脚、引脚、CCP1;lRC3/SCK/SCL:IO引脚、引脚、SPI的的时钟线、I2C的的时钟线;lRC4/SDI/SDA:IO引脚、引脚、SPI的数据的数据输入、入、I2C的数据的数据线;lRC5/SDO:IO引脚、引脚、SPI的数据的数据输出;出;lRC6/TX/CK:IO引脚、异步串行通信的引脚、异步串行通信的发送、同步串行送、同步串行通信的通信的时钟线;lRC7/RX/DT:IO引脚、异步串行通信的接收、同步串行引脚、异步串行通信的接收、同步串行通信的数据通信的数据线4.1.4 端口D端口端口D有有8个引脚,它除了作为普通个引脚,它除了作为普通IO口外,口外,还能作为并行从动口使用还能作为并行从动口使用4.1.5 端口端口E端口端口E只有只有3个引脚,它个引脚,它们都可以作都可以作为AD转换的模的模拟电压输入口,功能如下:入口,功能如下:lRE0/RD/AN5:IO引脚、并行从引脚、并行从动口的口的读控制、控制、模模拟电压输入通道入通道AN5;lRE1/WR/AN6:IO引脚、并行从引脚、并行从动口的写控制、口的写控制、模模拟电压输入通道入通道AN6;lRE2/CS/AN7:IO引脚、并行从引脚、并行从动口的片口的片选控控制、模制、模拟电压输入通道入通道AN7。

      返回目录4.2中断中断中断的概念:正常程序运行中断的概念:正常程序运行时发生了事先生了事先设定的定的事件,需要事件,需要暂停原来运行的程序而停原来运行的程序而转到到处理目前理目前需要需要马上上处理的事件理的事件中断的特点:可返回性中断中断的特点:可返回性中断处理理结束后必束后必须能能回到原先的程序,并且能回到原先的程序,并且能继续运行原先的程序,运行原先的程序,这就需要在中断就需要在中断时能能进行行现场保保护与恢复与恢复中断的中断的执行行过程程中断中断发生:生:程序程序执行到某行,突然事件(能行到某行,突然事件(能够产生中断的事件)生中断的事件)发生,生,产生中断断点保断点保护:CPU自自动将中断将中断时刻即将要刻即将要执行的下行的下一条指令的地址一条指令的地址压入堆入堆栈中断响中断响应:CPU自自动将将PC强制制设为0X0004,且,且GIE0执行中断服行中断服务程序程序(自自动完成完成现场保保护与与恢复,恢复,手手动清中断清中断标志位志位)中断返回:中断返回:程序程序执行到行到”RETFIE”时,按照后入,按照后入先出的原先出的原则,自,自动从堆从堆栈中中弹出地址出地址给PC,GIE1,程序返回到中断前要,程序返回到中断前要执行的程序,程序恢复行的程序,程序恢复中断前程序的运行状中断前程序的运行状态。

      PIC16F877A有有15个中断源,每个中断源都有个中断源,每个中断源都有自己的自己的使能控制位使能控制位(IE)和)和中断中断标志位志位(IF)中断中断逻辑示意示意图只有在只有在SLEEP状状态下能运行的模块态下能运行的模块产生中断才能唤醒产生中断才能唤醒SLEEP中断中断CPU当前的程序当前的程序唤醒唤醒CPU(如果当前处于睡眠模式如果当前处于睡眠模式)PEIE控制了控制了12个中断源个中断源与门:只有所有的输入为与门:只有所有的输入为1,输出才为,输出才为1或门:只要有一个输入为或门:只要有一个输入为1,输出就为,输出就为1EEIFEEIEPSPIFPSPIEADIFADIERCIFRCIETXIFTXIESSPIFSSPIECCP1IFCCP1IECCP2IFCCP2IETMR1IFTMR1IETMR2IFTMR2IEBCLIFBCLIET0IFT0IEINTFINTERBIFRBIE PEIEGIE+PSPIFPSPIEGIE控制所有的中断源控制所有的中断源bit7bit7bit6bit6bit5bit5bit4bit4bit3bit3bit2bit2bit1bit1bit0bit0GIEGIEPEIEPEIET0IET0IEINTEINTERBIERBIET0IFT0IFINTFINTFRBIFRBIF全局中全局中断使能断使能外围中外围中断使能断使能TMR0TMR0溢溢出中断出中断使能使能外部触外部触发中断发中断使能使能RBRB口的口的高高4 4位位电平变电平变化中断化中断使能使能TMR0TMR0溢溢出中断出中断标志标志外部触外部触发中断发中断标志标志RBRB口的口的高高4 4位位电平变电平变化中断化中断标志标志中断中断控制控制寄存器:寄存器:INTCONINTCON相应相应使能位为使能位为1 1,允许中断;为允许中断;为0 0,禁止中断。

      禁止中断相应相应标志位为标志位为1 1,表示有,表示有中断发生,必须用软件清中断发生,必须用软件清0 0bit7bit7bit6bit6bit5bit5bit4bit4bit3bit3bit2bit2bit1bit1bit0bit0PSPIEPSPIEADIEADIERCIERCIETXTETXTESSPIESSPIECCP1IECCP1IETMR2IETMR2IETMR1IETMR1IERDRD并行口并行口中断中断使能使能ADAD转换转换中断中断使能使能串行通串行通信接收信接收中断中断使能使能串行通串行通信发送信发送中断中断使能使能同步串同步串行通信行通信中断中断使能使能CCP1CCP1模块模块中断中断使能使能TMR2TMR2溢出溢出中断中断使能使能TMR1TMR1溢出溢出中断中断使能使能 第一第一外外围中断控制寄存器中断控制寄存器 PIE1:bit7bit7bit6bit6bit5bit5bit4bit4bit3bit3bit2bit2bit1bit1bit0bit0PSPIFPSPIFADIFADIFRCIFRCIFTXTFTXTFSSPIFSSPIFCCP1IFCCP1IFTMR2IFTMR2IFTMR1IFTMR1IFRDRD并行口并行口中断中断标志标志ADAD转换转换中断中断标志标志串行通串行通信接收信接收中断中断标志标志串行通串行通信发送信发送中断中断标志标志同步串同步串行通信行通信中断中断标志标志CCP1CCP1模块模块中断中断标志标志TMR2TMR2溢出溢出中断中断标志标志TMR1TMR1溢出溢出中断中断标志标志第一第一外外围中断中断标志寄存器志寄存器 PIR1:bit7bit7bit6bit6bit5bit5bit4bit4bit3bit3bit2bit2bit1bit1bit0bit0CMIECMIEEEIEEEIEBLCIEBLCIECCP2IECCP2IE比较器比较器中断中断使能使能EEPROMEEPROM写完成写完成中断中断使能使能I I2 2C C总线冲总线冲突中断突中断使能使能CCP2CCP2模块模块中断中断使能使能 第二外第二外围中断控制寄存器中断控制寄存器 PIE2:bit7bit7bit6bit6bit5bit5bit4bit4bit3bit3bit2bit2bit1bit1bit0bit0CMIFCMIFEEIFEEIFBLCIFBLCIFCCP2IFCCP2IF比较器比较器中断标中断标志位志位EEPROMEEPROM写完成写完成中断中断标志标志I I2 2C C总线冲总线冲突中断突中断标志标志CCP2CCP2模块模块中断中断标志标志第二外第二外围中断中断标志寄存器志寄存器 PIR2:Bit 7Bit 7Bit 6Bit 6Bit 5Bit 5Bit 4Bit 4Bit 3Bit 3Bit 2Bit 2Bit 1Bit 1Bit0Bit0RBPURBPUINTEDGINTEDGT0CST0CST0SET0SEPSAPSAPS2PS2PS1PS1PS0PS0选项寄存器寄存器OPTION_REG:与中断直接相关的位与中断直接相关的位为INTEDG,它涉及到,它涉及到外部中断(外部中断(RB0/INT)的中断)的中断边沿沿选择,0为下降沿。

      下降沿OPTION_REG=0b10111111;/等效等效 INTEDG=0进入中断后硬件自入中断后硬件自动屏蔽全局中断,即中断后屏蔽全局中断,即中断后GIE=0,中断返回后自,中断返回后自动恢复全局中断允恢复全局中断允许,GIE=1因此,因此,PIC16单片机不允片机不允许中断嵌套!也就是中断嵌套!也就是说,在,在中断服中断服务程序未退出程序未退出时,即使有新的中断,即使有新的中断发生,也不生,也不能能进入中断等当前的中断入中断等当前的中断处理完成退出中断后才能理完成退出中断后才能重新重新进入中断注意:注意:每按一次按键,每按一次按键,每按一次按键,每按一次按键,LEDLED翻转亮翻转亮翻转亮翻转亮/例例用用RB0/INT按按键,每按一下,每按一下,LED翻翻转亮亮#include_CONFIG(0 x3F39);#defineLEDRB7charA=0;/全局全局变量,保存量,保存LED状状态voidDELAY(unsignedint);voidinterruptISR(void);voidmain(void)OPTION_REG=0b00000000;/RB0为下降沿触下降沿触发中断中断TRISB=0b00000001;/设定定RB0为输入,入,RB7为输出出INTCON=0b10010000;/允允许RB0/INT中断中断LED=0;/初始状初始状态LED灭 while(1);/原地等待原地等待/=中断服中断服务程序程序voidinterruptISR(void)if(INTF=1)DELAY(30);/延延时30ms,躲过抖抖动时间INTF=0;/清中断清中断标志位,志位,须在延在延时之后!之后!LED=!LED;/=延延时(n)ms,4MHz晶振下晶振下voidDELAY(unsignedintn)unsignedintj;chark;for(j=0;j0;k-)NOP();以后此程序略,可参以后此程序略,可参见附附录:公用子程序。

      公用子程序返回目录4.3定定时/计数器数器TMR0lTMR0是个是个8位位计数数/定定时器器l自自带可可编程程预分分频器,可器,可对外部脉冲外部脉冲计数或数或对内部内部指令脉冲指令脉冲计数(数(1:11:256)l工作原理:工作原理:递加加计数数即由计数初数初值开始,每来若开始,每来若干个干个计数脉冲(和数脉冲(和预分分频比有关),比有关),计数数值+1,直,直到到255若再加1,溢出,溢出,同同时使使计数当前数当前值等于等于0lTMR0有溢出中断功能有溢出中断功能,T0IF将自将自动置置1l若要若要对外部脉冲外部脉冲计数,必数,必须编程程OPTION_REG,()置置1编程程TRISA,RA4/T0CKI引脚引脚设置置为输入入硬件硬件电路:符合一定要求的外部脉冲送路:符合一定要求的外部脉冲送RA4/T0CKI与与TMR0有关的寄存器有关的寄存器寄存器寄存器名称名称地址地址各位定义各位定义bit7bit6bit5bit4bit3bit2bit1bit0TMR001H101H8位累加计数器位累加计数器OPTION_REG81H181HT0CS源选择源选择T0SE沿选择沿选择PSAPS2PS1PS0INTCON0BHGIET0IET0IFTRISA85HTRISA4TMR0、OPTION_REG、INTCON、TRISA初初值控制字控制字中断中断端口端口OPTION_REG分分频器倍率器倍率选择位位 PS2-PS0PS2-PS0TMR0TMR0倍率倍率WDTWDT倍率倍率0 0 00 0 01:021:021:011:010 0 10 0 11:041:041:021:020 1 00 1 01:081:081:041:040 1 10 1 11:161:161:081:081 0 01 0 01:321:321:161:161 0 11 0 11:641:641:321:321 1 01 1 01:1281:1281:641:641 1 11 1 11:2561:2561:1281:128TMR0的预分频系数范围为2-256,如何获得1:1的倍率?采用采用4MHz晶晶振,用振,用TMR0最大延时多少最大延时多少?例:假例:假设晶振振晶振振荡频率率fosc=4MHz,求,求TMR0最大最大延延时时间是多少?是多少?解:解:则指令周期指令周期Tcy=1usTMR0的最大延的最大延时时间为:256256Tcy=65536Tcy=65536us。

      TMR0延延时常数常数计算示例算示例例:假例:假设现要延要延时12ms,即,即12000us.1.1.首先要先首先要先计算算预分分频系数系数K:256KTcy=12000,得,得K=48.9,取比其大的取比其大的预分分频系数系数642.2.再再计算延算延时常数常数X:(256X)KTcy=12000,得得X=68.5,四舍五入取整,四舍五入取整X=69即:即:TMR0=69在允在允许的情况下,分的情况下,分频比倍率越小越好,分辨率越高!比倍率越小越好,分辨率越高!编程程举例!例!注意:在初始化注意:在初始化编程中程中TMRO须赋初初值!在程!在程序适当的地方(如中断服序适当的地方(如中断服务子程序中)子程序中)还必必须重装初重装初值!福州大学电气工程与自动化学院福州大学电气工程与自动化学院4.4定定时/计数器数器TMR1lTMR1是由是由2个个8位寄存器位寄存器TMR1H(0FH)、TMR1L(0EH)组成的成的16位位计数数/定定时器器l自自带可可编程程预分分频器,可器,可对外部脉冲外部脉冲计数或数或对内内部指令脉冲部指令脉冲计数数(分分频比比1、2、4、8)l工作原理:工作原理:递加加计数。

      数其其计数数值由由0000H到到0FFFFH循循环增加,当它从增加,当它从0FFFFH加加1时变为0000HlTMR1有溢出中断功能,有溢出中断功能,PIR1.TMR1IF将自将自动置置1l相关的寄存器有:相关的寄存器有:TRISC、TMR1H、TMR1L、T1CON、INTCONl若要若要对外部脉冲外部脉冲计数,必数,必须编程程T1CON,()置置1编程程TRISC,RC0/T1CKI引脚引脚设置置为输入入硬件硬件电路:符合一定要求的外部脉冲送路:符合一定要求的外部脉冲送RC0/T1CKIl与与TMR0不同的不同的还有,它有一个有,它有一个控制定控制定时器走器走/停停的控制位的控制位T1CON.TMR1ONlTMR1还是是CCP模模块中的比中的比较和捕捉工作的和捕捉工作的时基基(参参见4.7)bit7bit7bit6bit6bit5bit5bit4bit4bit3bit3bit2bit2bit1bit1bit0bit0T1CKPS1T1CKPS1T1CKPS0T1CKPS0T1OSCENT1OSCENT1SYNCT1SYNCTMR1CSTMR1CSTMR1ONTMR1ON预分频系数预分频系数00001:11:101011:21:210101:41:411111:81:8自带振自带振荡器工荡器工作使能作使能同步控同步控制设置制设置P184P184时钟源时钟源选择选择0 0为内为内部时钟部时钟停止或停止或工作工作1:1:开始开始0:0:计时计时TMR1控制寄存器控制寄存器T1CONTMR1延延时常数的常数的计算算 例:假例:假设单片机使用的晶振片机使用的晶振为4M,要求延,要求延时100ms。

      解:解:先求先求预分分频系数系数K:65536KTcy=1001000us,得得K=1.52,取取K=2再求延再求延时常数常数X:(65536-X)2Tcy=1001000,得得X=15536=3CB0H即即TMR1H3CH,TMR1L0B0H计算出初算出初值后,要后,要转换为十六十六进制制TMR1H=155368;TMR1L=15536;读取取TMR1当前当前值时要特要特别注意的注意的问题:在在读取取TMR1H、TMR1L的的值时,要注意是否在,要注意是否在读期期间发生了从低字生了从低字节向高字向高字节进位假假设当前当前TRM1H、TMR1L0 x01FF,则在在读取取TMR1时就可能就可能发生生错误:如先如先读低字低字节,得到,得到0 xFF,假,假设此此时发生生进位,位,则再再读高字高字节时得到得到0 x02,总的的结果是果是0 x2FF,显然是然是错误的如先如先读高字高字节,得到,得到0 x01,假,假设此此时发生生进位,位,则再再读低字低字节得到得到0 x00,总的的结果是果是0 x100,也,也是是错误的1.1.如果允如果允许的的话,在,在读之前之前让TMR1停止停止计数;数;2.2.如果不允如果不允许停止停止计数,数,则先先读高字高字节,再,再读低字低字节,再再读一次高字一次高字节,如果前后,如果前后2次次读的高字的高字节不同,不同,说明在明在读期期间发生了生了进位位A=TMR1H;/先先读高字高字节B=TMR1L;/再再读低字低字节C=TMR1H;/再再读高字高字节if(A=C)/判断判断读期期间是否是否发生从低字生从低字节向高字向高字进位位X=(A8)+B;/没有没有进位,就用第一次位,就用第一次读高字高字节的的结果果elseX=(C=1.6us,PIC16系列系列单片机的片机的AD采集采集时间lAD转换过程:先打开程:先打开AD通道,被通道,被转换电压对AD模模块的保持的保持电容充容充电,待,待电容充容充满电,才能,才能进行行AD转换lAD采采样时间Tsamp=(采集采集时间Tacq)+(AD转换时间)采集采集时间Tacq:即充:即充电时间,是由于内部的保持,是由于内部的保持电容充容充电所要求的,所要求的,Tacq要求在要求在20us(AD转换时间)=(N+2)Tad=12Tad,N为AD位数位数,N=10l除了以除了以RC作作为采采样时钟外,外,Tad最小最小为1.6us。

      即在即在选择AD时钟时,要根据,要根据单片机的工作片机的工作频率率选取常用用4M晶振,晶振,选8TOSC=2us1.6us,满足要求!足要求!TAD与与PIC单片机的最大工作片机的最大工作频率率(标准准F型型)ADAD时钟时钟时钟时钟TadTad最大工作频率最大工作频率最大工作频率最大工作频率状态状态ADCS2-ADCS02Tosc0001.25MHz4Tosc1002.5MHz8Tosc0015MHz16Tosc10110MHz32Tosc01020MHz64Tosc11020MHz内部内部RC(1、2、3)X11注注1注注1:RC方式方式AD具有典型的具有典型的4us,但其值在,但其值在26us之间变化之间变化注注2:当器件的频率超过:当器件的频率超过1MHz时,时,RC只推荐在只推荐在sleep下进行下进行AD转换注注3:对于低压器件(:对于低压器件(LF),应查阅相关资料应查阅相关资料bit7bit6bit5bit4bit3bit2bit1bit0ADFMADCS2PCFG3PCFG2PCFG1PCFG0D结果格式果格式0:左左对齐1:右右对齐D时钟选择位位AD转换器引脚功能及参考器引脚功能及参考电压选择,见下下页。

      控制寄存器控制寄存器ADCON1AD结果对齐示例结果对齐示例PCFGAN7/RE2AN6/RE1AN5/RE0AN4/RA5AN3/RA3AN2/RA2AN1/RA1AN0/RA0Vref+Vref-通道数通道数/参考数参考数0000AAAAAAAAVddVss8/00001AAAAVref+AAARA3Vss7/10010DDDAAAAAAA5/00011DDDAVref+AAARA3Vss4/10100DDDDADAAVddVss3/00101DDDDVref+DAARA3Vss2/1011XDDDDDDDD-0/01000AAAAVref+Vref-AARA3RA26/21001DDAAAAAAVddVss6/01010DDAAVref+AAARA3Vss5/11011DDAAVref+Vref-AARA3RA24/21100DDDAVref+Vref-AARA3RA23/21101DDDDVref+Vref-AARA3RA22/21110DDDDDDDAVddVss1/01111DDDDVref+Vref-DARA3RA21/2显然,上表的然,上表的设计不是很合理,它不能由用不是很合理,它不能由用户任意任意选定哪些引脚做定哪些引脚做AD转换,哪些引脚做普通,哪些引脚做普通IO口,在口,在PIC16F887中已中已经对此此进行了改行了改进。

      对AD参考参考电压与与输入入电压的要求,的要求,单位位V名称名称说明说明最小值最小值最大值最大值VrefVref=(Vref+)(Vref-)2.0Vdd+0.3Vref+参考电压正端参考电压正端Vdd2.5Avdd+0.3Vref-参考电压负端参考电压负端Vss0.3(Vref+)2.0VAIN模拟输入电压模拟输入电压Vss0.3Vref+0.3A/D转换步步骤(采用采用查询的方法的方法)1 1禁止禁止A/DA/D中断中断(PIE1.ADIE=0)(PIE1.ADIE=0);2 2设置有关的置有关的I/OI/O口口:TRISATRISA或或TRISETRISE设置置为输入;入;3 3设置置ADCON1:ADCON1:对模模拟引脚引脚/基准基准电压/数字数字I/OI/O进行行设置置,选择A/DA/D结果格式果格式;4 4设置置ADCON0:ADCON0:选择A/DA/D通道、通道、时钟,A/DA/D模模块使能;使能;5 5延延时约20us:20us:使得使得输入入电压对保持保持电容充容充电达到达到稳定;定;6 6启启动A/DA/D转换:(GO=1GO=1););7 7等待等待A/DA/D转换结束:束:查询(PIR1.ADIF=0(PIR1.ADIF=0或或GO=1),GO=1),PIR1.ADIFPIR1.ADIF软件清零,件清零,GOGO自自动清零;清零;8 8读A/DA/D转换结果:果:(ADRESHADRESH、ADRESLADRESL)AD转换值输入模入模拟电压Vin1023(Vref+Vref-)例:某一例:某一输入的模入的模拟电压为2V,如果参考,如果参考电压是是VddGND,解:若解:若Vdd=5V,AD值210235409 Vdd=2.5V,AD值 210232.5818结论:同:同样的的输入入电压,若参考,若参考电压不同,不同,计算得到算得到的数的数值(理(理论值)也不同。

      所以,要求参考)也不同所以,要求参考电压要要稳定!定!返回目录编程程举例例4.7 CCP模模块(CAPTURE/COMPARE/PWM)共有两个共有两个CCPCCP模模块:CCP1CCP1、CCP2CCP2CCPCCP模模块对应的引脚的引脚为CCP1CCP1RC2RC2,CCP2CCP2RC1RC1CCPCCP模模块各有一个各有一个1616位的可位的可读写的寄存器写的寄存器CCPRxHCCPRxH、CCPRxL,CCPRxL,且各有相且各有相应的控制寄存器的控制寄存器为CCPxCONCCPxCON与与CCP有关的寄存器有:有关的寄存器有:TRISC、PORTC、CCP1CON、CCP2CON、CCPR1H、CCPR1L、CCPR2H、CCPR2L、中断相关的寄存器、以及中断相关的寄存器、以及TMR1,TMR2相关的寄存器相关的寄存器CCP1和和CCP2,除了,除了触触发特殊事件特殊事件不同外,两者不同外,两者在功能上没有其他不同因此,以下内容常以在功能上没有其他不同因此,以下内容常以CCP1为例例说明!明!CCP模模块的的时钟源源CCP模式模式时钟源时钟源捕捉捕捉(Capture)TMR1比较比较(Compare)TMR1脉宽调制脉宽调制(PWM)TMR2bit7bit7 bit6bit6 bit5bit5 bit4bit4bit3bit3bit2bit2bit1bit1bit0bit0CCP1XCCP1X CCP1YCCP1YCCP1M3CCP1M3CCP1M2CCP1M2CCP1M1CCP1M1CCP1M0CCP1M0PWMPWM中的比较参中的比较参数中的最低数中的最低2 2位,位,其它模式未用。

      其它模式未用CCP模块的工作方式选择,见下页模块的工作方式选择,见下页控制寄存器控制寄存器CCP1CON/CCP2CONCCP模模块工作方式工作方式设置置CCP1M3-CCP1M0工作方式工作方式设定条件设定条件响应状态响应状态0000关闭关闭CCP1复位复位0100捕捉捕捉每个脉冲下降沿每个脉冲下降沿0101捕捉捕捉每个脉冲上升沿每个脉冲上升沿0110捕捉捕捉每每4个脉冲上升沿个脉冲上升沿0111捕捉捕捉每每16个脉冲上升沿个脉冲上升沿1000比较比较输出匹配输出匹配CCP1置高置高1001比较比较输出匹配输出匹配CCP1置低置低1010比较比较输出匹配输出匹配软件中断软件中断1011比较比较特殊事件触发特殊事件触发TMR1清零清零11XX脉冲调制脉冲调制条件匹配条件匹配4.7.1 捕捉模式捕捉模式工作原理:有事先工作原理:有事先设定的事件在定的事件在RC2/CCP1RC2/CCP1上上发生生时,CCPR1HCCPR1H、CCPR1LCCPR1L就捕捉就捕捉1616位寄存器位寄存器TMR1TMR1的的值可以捕捉的事件可以捕捉的事件为以下之一:以下之一:每个下降沿每个下降沿 每个上升沿每个上升沿每每4 4个上升沿个上升沿每每1616个上升沿个上升沿所所谓捕捉,就是把当捕捉,就是把当设定的事件定的事件发生生时的的TMR1HTMR1H、TMR1LTMR1L的的值自自动送送给CCPR1HCCPR1H、CCPR1LCCPR1L。

      在此在此过程中,程中,定定时器器1 1一直保持工作一直保持工作捕捉方式结构图CCP1引脚输入引脚输入捕捉开始,捕捉开始,TMR1开始开始计时计时硬件自动把此时硬件自动把此时TMR1的值复的值复制到制到CCPR1中,且中,且CCP1IF1例:每例:每4个上升沿捕捉一次的工作情况个上升沿捕捉一次的工作情况l当当产生一次捕捉生一次捕捉时,相,相应的中断的中断标志位被置志位被置1 1,必,必须由由软件清件清0 0l如果在一个捕捉未如果在一个捕捉未读取取时又又产生一个捕捉,生一个捕捉,则前前一个捕捉一个捕捉值被取消l在捕捉模式中,必在捕捉模式中,必须把把RC2/CCP1RC2/CCP1(PC1/CCP2PC1/CCP2)定)定义成成输入入l而而TMR1TMR1必必须定定义为定定时器或同步器或同步计数器,如果定数器,如果定义为异步异步计数器,数器,则捕捉无法工作捕捉无法工作所所谓同步同步计数器,指的是在一个指令周期中的数器,指的是在一个指令周期中的4 4个个 节拍中,拍中,TMR1TMR1可以在任何可以在任何节拍拍时与外部脉冲同步与外部脉冲同步加加1 1,而异步,而异步计数数时,TMR1TMR1都要等到指令周期都要等到指令周期结束束时才加才加1 1。

      说明:明:l如果如果CCPxCCPx从捕捉模式改从捕捉模式改变为其它模式其它模式时,会,会产生生一个一个错误的捕捉中断,因此用的捕捉中断,因此用户要先屏蔽其中断,要先屏蔽其中断,即即对CCPxIECCPxIE清清0 0且在捕捉模式改且在捕捉模式改变后后对CCPxIFCCPxIF清清0 0l如果用如果用户程序改程序改变捕捉捕捉预分分频率,也会率,也会产生一个生一个错误的中断的中断请求,且求,且预分分频器不会清器不会清0 0以下的程以下的程序可以清序可以清预分分频器并且不会引起器并且不会引起错误的中断的中断请求:求:CCP1CON=0;CCP1CON=0;/关关闭CCP1CCP1模模块(CCP1CCP1复位)复位)CCP1CON=NEW_CAPT_PS;CCP1CON=NEW_CAPT_PS;/选择新的新的预分分频系数系数编程程举例例4.7.2 比比较模式模式工作原理:工作原理:CCPRxHCCPRxH、CCPRxLCCPRxL不停地与不停地与TMR1HTMR1H、TMR1LTMR1L进行比行比较,当二者相等,当二者相等时,将在,将在CCPx(RC2/CCP1,RC1/CCP2)CCPx(RC2/CCP1,RC1/CCP2)产生以下的事件:生以下的事件:1000:1000:CCPxCCPx引脚引脚输出高出高电平,平,CCPxIFCCPxIF置置1 1 1001:1001:CCPxCCPx引脚引脚输出低出低电平,平,CCPxIFCCPxIF置置1 1 1010:1010:CCPxCCPx引脚状引脚状态不不变,CCPxIFCCPxIF置置1 1 1011:1011:触触发特殊事件特殊事件CCP1:CCP1:复位复位TMR1TMR1,CCP1IF CCP1IF置置1 1CCP2:CCP2:复位复位TMR1TMR1,自自动启启动A/DA/D转换(注:复位(注:复位TMR1TMR1,即将,即将TMR1H,TMR1LTMR1H,TMR1L清零)清零)4.7.2 比比较模式模式CCP2触触发特殊事件特殊事件应用:要求在此之前先使能用:要求在此之前先使能 A/D模模块(ADON位置位置 1)。

      触触发时,GO/DONE位被自位被自动置置1,启,启动A/D转换自动复位复位TMR1可可实现A/D采集周期的自采集周期的自动重复在比在比较模式中,必模式中,必须把把RC2/CCP1RC2/CCP1(PC1/CCP2PC1/CCP2)定)定义成成输出出在本模式下,在本模式下,对TMR1TMR1的要求同捕捉模式的要求同捕捉模式,即要做即要做为定定时器或同步器或同步计数器编程程举例例4.7.3 PWM PWM模式模式在在PWMPWM模式下,模式下,TMR2TMR2为其其时基根据不同的基根据不同的设置置值,从从CCPxCCPx脚脚输出周期和脉出周期和脉宽一定的矩形波一定的矩形波周期周期 Tp=(PR2)+1*4Tosc*(TMR2Tp=(PR2)+1*4Tosc*(TMR2预分分频值)脉脉宽 Td=DC1*Tosc*(TMR2Td=DC1*Tosc*(TMR2预分分频值)其中其中DC1DC1=(CCPR1L:CCP1CON)=(CCPR1L:CCP1CON)1010位的数位的数PWMPWM模式参数模式参数计算算周期周期 Tp=(PR2)+1*4Tosc*(TMR2Tp=(PR2)+1*4Tosc*(TMR2预分分频值)脉脉宽 Td=DC1*Tosc*(TMR2Td=DC1*Tosc*(TMR2预分分频值)其中其中DC1=(CCPR1L:CCP1CON)DC1=(CCPR1L:CCP1CON)已知:周期已知:周期TpTp和脉和脉宽TdTd解:解:第一步第一步计算周期:先假定算周期:先假定PR2=255PR2=255,TMR2TMR2预分分频值查表表选择略大于略大于计算算值的可的可选项再再计算算PR2=?PR2=?第二步第二步计算脉算脉宽:利用上步:利用上步计算得到的算得到的预分分频值代入脉代入脉宽公式公式计算算DC1DC1(1010位的数)位的数)PWMPWM编程步程步骤:1.1.将将PWMPWM的周期的周期值写入写入PR2PR2。

      2.2.将将PWMPWM的脉的脉宽值写入写入(CCPRxL(CCPRxL和和CCPxCONCCPxCON)3.3.设置置TRISC,TRISC,使得使得CCPxCCPx为输出4.4.设置置TMR2TMR2预分分频值,置,置T2CON.TMR2ON=1,T2CON.TMR2ON=1,TMR2TMR2开始开始计时5.5.设置置CCPxCON,CCPxCON,定定义CCPxCCPx为PWMPWM模式编程程举例例4.8 异步串行通信(异步串行通信(USART)l可在可在单片机与片机与单片机之片机之间,单片机与片机与计算机之算机之间进行通信,异步串行通信是最常用的通信方法行通信,异步串行通信是最常用的通信方法l“异步异步”指的是在通信的每个字指的是在通信的每个字节之之间的的间隔隔时间可以不一可以不一样,但每一位的,但每一位的时间宽度是度是严格按照格按照通信波特率要求的通信波特率要求的而同步通信要有一个同步脉而同步通信要有一个同步脉冲信号冲信号,每个字,每个字节中的每一位是要中的每一位是要严格按通信格按通信时钟的上下沿的有关的上下沿的有关规定定进行的l“串行串行”指的是指的是进行通信的每个字行通信的每个字节是由一位一是由一位一位位发出或接收的。

      出或接收的l它只需要它只需要RXRX,TXTX,GNDGND三根三根线就可以就可以进行通信lRC7/RX,RC6/TXRC7/RX,RC6/TX是是877A877A的异步串行通信脚的异步串行通信脚与异步串行通信有关的寄存器有:与异步串行通信有关的寄存器有:TRISC、PORTCRCSTA、TXSTA、SPBRG、RCREG、TXREG及中断相关的寄存器及中断相关的寄存器INTCON、PIE1(RCIE,TXIE)、PIR1(RCIF,TXIF)上上图为发送一个送一个0XEA(0B11101010),采用偶校,采用偶校验的情况偶校偶校验:即即发送的送的为1的位数必的位数必须为偶数,通偶数,通过改改变校校验位位使得整个使得整个帧中中为1的位数的位数为偶数奇校奇校验:就是就是调整校整校验位,使得位,使得发送的送的1帧数中数中为1的位数的位数为奇数也可以采用校也可以采用校验位恒位恒1,恒恒0等方式例例4.14 奇偶校奇偶校验程序程序例:要求奇校例:要求奇校验,有一个字符型,有一个字符型变量量A,判断其二,判断其二进制数中制数中1的个数的个数N,如,如N为奇数,奇数,令令TX9D=0,反之,反之为1。

      N=PARITY_CHECK(A);If(N=1)TX9D=0;elseTX9D=1;/奇偶校奇偶校验,实际是是计算字符型算字符型变量中量中1的个数的个数CharPARITY_CHECK(charX)chari,j=0;for(i=0;i1;/计算算1位后整个数右移位后整个数右移1位,下次仍判断位,下次仍判断0位位if(j&0 x01)=0return(0);/j是偶数,返回是偶数,返回0elsereturn(1);/j是奇数,返回是奇数,返回1波特率波特率设置置l异步模式下,在异步模式下,在低速低速时,即,即TXSTA.BRGH=0TXSTA.BRGH=0时,波,波特率特率计算公式算公式为:波特率波特率=Fosc/(64(X+1)=Fosc/(64(X+1)l高速高速即即TXSTA.BRGH=1TXSTA.BRGH=1时,波特率,波特率计算公式算公式为:波特率波特率=Fosc/(16(X+1)=Fosc/(16(X+1)l这里里X X为波特率因子,即波特率因子,即SPBRGSPBRG之之值,FoscFosc为晶振晶振的振的振荡频率l应用:已知波特率,通用:已知波特率,通过计算波特率因子,算波特率因子,选择采用高速或低速方式(采用高速或低速方式(导致精度不同)致精度不同)波特率波特率计算示例算示例例:已知晶振的振例:已知晶振的振荡频率率为4MHz,拟采用采用9600波特率波特率解:解:低速方式:低速方式:9600=4000000/(64(X+1),得得X=5.51,取取6验证:4000000/(64*(6+1)=8928.6高速方式:高速方式:9600=4000000/(16(X+1),得得X=25.04,取,取25验证:4000000/(16*(25+1)=9615.4比比较二者的二者的误差:差:低速:低速:(8928.6-9600)/9600=-6.99%高速:高速:(9615.4-9600)/9600=0.16%对这种情况,种情况,选高速高速。

      bit7bit7bit6bit6bit5bit5bit4bit4bit3bit3bit2bit2bit1bit1bit0bit0CSRCCSRCTX9TX9TXENTXENSYNCSYNC-BRGHBRGHTRMTTRMTTX9DTX9D时钟源时钟源选择选择异步未用异步未用发送发送9位位数据数据0:8位位1:9位位发送使能发送使能0:0:禁止禁止1:1:使能使能同步异步同步异步选择选择0:0:异步异步1:1:同步同步高速波特高速波特率选择率选择0:0:低速低速1:1:高速高速发送移位发送移位寄存器寄存器状态位状态位0:0:满满1:1:空空发送的第发送的第9 9位数据位数据0:0:数数0 01:1:数数1 1TXSTATXSTA:发送状态和控制寄存器:发送状态和控制寄存器bit7bit7bit6bit6bit5bit5bit4bit4bit3bit3bit2bit2bit1bit1bit0bit0SPENSPENRX9RX9SRENSRENCRENCRENADDENADDENFERRFERROERROERRRX9DRX9D串口使能串口使能0:禁止禁止1:使能使能接收接收9位位数据数据0:8位位1:9位位异步不用异步不用连续接收连续接收使能使能0:0:禁止禁止1:1:使能使能地址检测地址检测使能位,使能位,只选用于只选用于9位数据位数据0:禁止禁止1:使能使能数据帧错数据帧错误标志误标志0:0:无错误无错误1:1:发生错发生错误误溢出错误溢出错误标志标志0:0:无错误无错误1:1:发生错发生错误误接收的第接收的第9 9位数据位数据0:0:数数0 01:1:数数1 1RCSTARCSTA:接收状态和控制寄存器:接收状态和控制寄存器注意:即便一个程序中不是同注意:即便一个程序中不是同时包含接收和包含接收和发送送程序(也就是程序(也就是说只有接收或者只有只有接收或者只有发送功能),送功能),但是在程序中仍然要但是在程序中仍然要对RCSTA和和TXSTA都都进行定行定义!福州大学电气工程与自动化学院福州大学电气工程与自动化学院发送接收步送接收步骤(发送:送:查询方式;接收:中断方式方式;接收:中断方式)1.1.禁止禁止发送中断,允送中断,允许接收中断;接收中断;2.2.由所要求的波特率由所要求的波特率计算、算、选择高速、低速方式高速、低速方式 (TXSTA.BRGH)(TXSTA.BRGH)及波特率因子及波特率因子SPBRG;SPBRG;3.3.将将0b0X100Y000b0X100Y00送送给TXSTA,TXSTA,设置置结果是果是发送允送允许,其中,其中X X根据要根据要发送的数据位数送的数据位数(8(8或或9 9位位)决定,决定,Y Y由波特率由波特率计算算误差判断决定差判断决定是高速是高速还是低速是低速;4.4.将将0b1X0100000b1X010000送送给RCSTARCSTA,设置置结果是串口使能,允果是串口使能,允许接收,接收,其中其中X X根据要根据要发送的数据位数送的数据位数(8(8或或9 9位位)决定;决定;5.5.如如为9 9位数据,先把第位数据,先把第9 9位数送入位数送入TXSTA.TX9D,TXSTA.TX9D,再把要再把要发送的数送的数送入送入TXREGTXREG,开始,开始发送;送;6.6.查询发送是否送是否结束(束(PIR1.TXIF=0PIR1.TXIF=0或或TXSTA.TRMT=0TXSTA.TRMT=0),如如结束,清束,清PIR1.TXIFPIR1.TXIF;7.7.查询是否有接收中断是否有接收中断标志志(PIR1.RCIF),(PIR1.RCIF),如有,如有,则读入入RCREGRCREG,如如为9 9位数据,位数据,还要要读入第入第9 9位位(在在RCSTA.RX9D),RCSTA.RX9D),清接收中断清接收中断标志。

      志编程示例程示例返回目录lEEPROM是是单片机片机应用中一个重要的用中一个重要的资源,它源,它的主要特点是在掉的主要特点是在掉电时数据数据仍能保持不仍能保持不变,通常作,通常作为保存保存仪器、器、设备的各种的各种设定定值Microchip公司所公司所给的的PIC16F877A的的EEPROM的参数是保的参数是保证100万次的万次的擦除,数据保存擦除,数据保存时间大于大于40年l并非所有的并非所有的单片机都有片机都有EEPROMlPIC16F877A有有256个字个字节的的EEPROM,地址,地址为0255(00FFH)4.9 EEPROM的的读写写下面是下面是“PIC.H”中的中的EEPROM_READ宏定宏定义#defineEEPROM_READ(addr)(EEADR=(addr),(EECON1&=0 x7F),(RD=1),EEDATA)#else/elsedoesntwriteflash#defineEEPROM_WRITE(addr,value)dowhile(WR)continue;EEADR=(addr);EEDATA=(value);CARRY=0;if(GIE)CARRY=1;GIE=0;WREN=1;EECON2=0 x55;EECON2=0 xAA;WR=1;WREN=0;if(CARRY)GIE=1;while(0)lEEPROM的的读、写的宏定、写的宏定义调用格式如下:用格式如下:EEPROM_WRITE(addr,value);X=EEPROM_READ(addr);l其中的其中的“addr”为要要读或写的或写的EEPROM的地址的地址(0255),“value”为要写入要写入EEPROM的数据。

      的数据l 例:例:EEPROM_WRITE(0 x34,0 x9A);X=EEPROM_READ(0 x34);l可以使用下列可以使用下列语句句对EEPROM的数据的数据进行初始化,行初始化,即将相关的数据在芯片即将相关的数据在芯片烧写写时写入写入EEPROM:_EEPROM_DATA(D0,D1,D2,D3,D4,D5,D6,D7);l其中的其中的D0D7为要写入的常数,要写入的常数,这些数据分些数据分别被被写入写入EEPROM的的单元元0单元元7此方法只能按此方法只能按顺序从序从EEPROM的的单元元0开始逐一定开始逐一定义如果要在如果要在EEPROM后面的后面的单元定元定义初初值,则也要从也要从0单元元开始定开始定义还可以可以对程序存程序存储器器进行行读写,同写,同样也是用也是用PICC中的宏定中的宏定义,可参考本,可参考本书中的相关内容中的相关内容返回目录4.14.2 SLEEP工作方式工作方式 l在在SLEEPSLEEP工作方式下,可以工作方式下,可以节省省电源,特源,特别适合于适合于使用使用电池的池的场合在5V5V工作工作电压,4M4M晶振下晶振下,不考不考虑外外围电路的工作路的工作电流,正常的工作流,正常的工作电流流约为1.5-4mA,1.5-4mA,而在而在SLEEPSLEEP工作方式下工作方式下,工作工作电流流约为1.5-20uA(WDT1.5-20uA(WDT不工作不工作)或或10-40uA(WDT10-40uA(WDT工作工作)。

      l在在SLEEPSLEEP工作模式下,可以提高工作模式下,可以提高A/DA/D转换的精度l为了降低工作了降低工作电流,在流,在进入入SLEEPSLEEP之前,必之前,必须将所将所有的有的I/OI/O口置口置为高高电平或低平或低电平可以可以唤醒醒SLEEP的事件:的事件:lWDT溢出溢出(如果如果WDT使能的使能的话)lINT(RB0)引脚中断引脚中断lUSART同步从属模式的同步从属模式的发送与接收中断送与接收中断lA/D转换(采用内部采用内部RC振振荡)中断中断lTMR1溢出中断溢出中断(必必须在异步模式在异步模式)lEEPROM写操作完成中断写操作完成中断l。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.