实例介绍
【实例截图】
** Function name: static void interrupt isr(void)
** Descriptions: 中断函数处理
** input parameters: none
** output parameters: none
** Returned value: none
*********************************************************************************************************/
static void interrupt isr(void)
{
// 定时器1中断执行函数
if(PIE1bits.TMR1IE & PIR1bits.TMR1IF) // 判断是否满足定时中断
{
PIR1bits.TMR1IF = 0; // TMR1 寄存器溢出(必须由软件清零)
TMR1 = 0xf63c; // 初值 = 65536 -(fose/4/分频值)*定时时间 预设定时为10ms
if ( time_flag == 1)
{
time_count ;
if(time_count>=100){time_count = 50;}
}
else {time_count = 0;}
}
}
/*********************************************************************************************************
** Function name: main
** Descriptions: 主函数
** input parameters: none
** output parameters: none
** Returned value: none
*********************************************************************************************************/
void main (void)
{
// 时钟配置
OSCCONbits.IRCF = 0x06; // 默认4M主频(内部时钟)
OSCCONbits.OSTS = 0x00; // 器件依靠内部振荡器 (HFINTOSC 或 LFINTOSC)运行
OSCCONbits.SCS = 0x01; // 内部振荡器用作系统时钟
NOP();
//看门狗配置
WDTCONbits.SWDTEN = 1; // 使能看门狗
WDTCONbits.WDTPS = 0x0B; // 65536/512 *17 =2.176S
NOP();
// 定时器1配置初始化
T1CONbits.T1CKPS0 = 0; // 10 = 1:4 预分频比
T1CONbits.T1CKPS1 = 1;
T1CONbits.TMR1CS = 0; // 内部时钟源(FOSC/4)
TMR1 = 0xf63c; // 初值 = 65536 -(fose/4/分频值)*定时时间 预设定时为10ms
T1CONbits.TMR1ON = 1; // 使能Timer1
PIR1bits.TMR1IF = 0; // TMR1 寄存器溢出(必须由软件清零)
PIE1bits.TMR1IE =1; // 允许Timer1 溢出中断
NOP();
// 全局中断使能
INTCONbits.PEIE = 1; // Enables all unmasked peripheral interrupts
INTCONbits.GIE = 1; // Enables all unmasked interrupts
NOP(); NOP(); NOP();
// 初始化PORTB端口
IOCB = 0x00; // 初始化禁止PORTB 电平变化中断
WPUB = 0x00; // 初始化禁止PORTB 弱上拉
TRISB = 0X00; // PORTB 初始化为输出端口 (FET CONTROL)
PORTB = 0X00; // 初始化PORTB,默认输出低电平
ANSELH = 0X00; // 初始化成I/O 端口
// 初始化PORTA端口
// TRISA = 0X00;
// PORTA = 0X00;
TRISA0 =0x01; // 设置RA0 是输入
ANSEL = 0x00; // 初始化成I/O口
EN_OFF;
time_count = 0x00; // 初始化定时计数器
time_flag = 0; // 按键按下计数器flag
time_over = 0; // 超时flag
while(1)
{
CLRWDT(); // 复位看门狗
if(RA0 == 0) // 有按键按下
{
__delay_ms(25);
time_flag = 1; // 开始计数标识
if(time_count>= 50) // 计数大于500ms 认为已经按下
{
if(time_over == 0) // 每次必须有松开才开启
{
time_over = 1;
EN_ON;
__delay_ms(27);
}
}
if( time_over == 1)EN_OFF; // 如果一直按着不开启
}else {time_flag = 0;EN_OFF; time_over = 0;} // 无按键按下,关闭开关
}
}
.
├── PIC16F887 基础实例
│ ├── Makefile
│ ├── User
│ │ ├── config.h
│ │ └── main.c
│ ├── build
│ │ └── default
│ │ └── production
│ │ └── User
│ │ ├── main.p1
│ │ ├── main.p1.d
│ │ └── main.pre
│ ├── code
│ ├── debug
│ │ └── default
│ ├── dist
│ │ └── default
│ │ └── production
│ │ ├── Burn_In_load.X.production.cmf
│ │ ├── Burn_In_load.X.production.elf
│ │ ├── Burn_In_load.X.production.hex
│ │ ├── Burn_In_load.X.production.hxl
│ │ ├── Burn_In_load.X.production.lst
│ │ ├── Burn_In_load.X.production.map
│ │ ├── Burn_In_load.X.production.mum
│ │ ├── Burn_In_load.X.production.obj
│ │ ├── Burn_In_load.X.production.rlf
│ │ ├── Burn_In_load.X.production.sdb
│ │ ├── Burn_In_load.X.production.sym
│ │ └── memoryfile.xml
│ └── nbproject
│ ├── Makefile-default.mk
│ ├── Makefile-genesis.properties
│ ├── Makefile-impl.mk
│ ├── Makefile-local-default.mk
│ ├── Makefile-variables.mk
│ ├── Package-default.bash
│ ├── configurations.xml
│ ├── private
│ │ ├── configurations.xml
│ │ └── private.xml
│ └── project.xml
└── 好例子网_PIC16F887 基础实例.zip
14 directories, 29 files
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论