网站大量收购独家精品文档,联系QQ:2885784924

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

  1. 1、本文档共110页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 ;4.1 输入输出端口 4.2 中断 4.3 定时/计数器TMR0 4.4 定时/计数器TMR1 4.5 定时/计数器TMR2 4.6 A/D转换器 4.7 CCP模块(Capture/Compare/PWM) 4.8 异步串行通信(USART) 4.9 EEPROM的读写 4.10 SLEEP工作方式;4.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 端口的指令隔开。 RA3=1; NOP(); RA4=0;;4.1.1 端口A;1、端口B有8个引脚: RB0/INT:IO引脚、INT中断; RB1、RB2、RB4、RB5:IO引脚; RB3/PGM:IO引脚、低电压编程电压引脚; RB6/PGC:IO引脚、编程时钟线; RB7/PGD:IO引脚、编程数据线。 2、如果使用PIC KIT3作为调试工具,RB6、RB7引脚将被调试系统占用,因此在调试时此二个引脚暂不能使用。 ;3、8个引脚具有内部弱上拉使能控制 由OPTION_REG寄存器的第7位RBPU控制,如果弱上拉使能,作为输入的RB口在端口悬空时将被上拉到高电平。以RB0为例,如下图所示: ;4、RB0/INT具有外部中断功能。 5、RB的的高4位还具有电平变化中断功能 当RB4~RB7引脚做为输入时,只要有一个引脚的逻辑电平发生变化,就会使RB电平中断标志位置1。这些功能的设置,与OPTION、INTCON有关,参见相关各章节。 ;4.1.3 端口C;4.1.4 端口D;4.1.5 端口E;4.2 中断;中断的执行过程;PIC16F877A有15个中断源,每个中断源都有自己的使能控制位(IE)和中断标志位(IF)。 ;中断逻辑示意图;bit7;  ;bit7;bit7;bit7; ;进入中断后硬件自动屏蔽全局中断,即中断后GIE=0,中断返回后自动恢复全局中断允许,GIE=1。 因此,PIC16单片机不允许中断嵌套!也就是说,在中断服务程序未退出时,即使有新的中断发生,也不能进入中断。等当前的中断处理完成退出中断后才能重新进入中断。 ; 每按一次按键,LED翻转亮;//例 用RB0/INT按键,每按一下,LED翻转亮 #include pic.h __CONFIG(0x3F39); #define LED RB7 char A=0; //全局变量,保存LED状态 void DELAY(unsigned int); void interrupt ISR(void); void main(void) { OPTION_REG=0 //RB0为下降沿触发中断 TRISB =0 //设定RB0为输入,RB7为输出 INTCON=0 //允许RB0/INT中断 LED=0; //初始状态LED灭 while(1); //原地等待 } ;//========中断服务程序 void interrupt ISR(void) { if (INTF==1) { DELAY(30); //延时30ms,躲过抖动时间  INTF=0; //清中断标志位,须在延时之后! LED=!LED; } } ; //======延时(n)ms,4MHz晶振下 void DELAY(unsigned int n) { unsigned int j; char k; for (j=0;jn;j++) for (k=246;k0;k--) NOP(); } 以后此程序略,可参见附录:公用子程序。;4.3 定时/计数器TMR0; 若要对外部脉冲计数,必须 ①编程OPTION_REG ,(T0CS)置1 ②编程TRISA , RA4/T0CKI引脚设置为输入 ③硬件电路:符合一定要求的外部脉冲送RA4/T0CKI ;与TMR0有关的寄存器;OPTION_REGPS2-

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档