PIC单片机三个定时器中断同时定时

来源:本站
导读:目前正在解读《PIC单片机三个定时器中断同时定时》的相关信息,《PIC单片机三个定时器中断同时定时》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《PIC单片机三个定时器中断同时定时》的详细说明。
简介:16F877A有三个定时器,中断方式都调试出来了,想把它们整合到一块同时工作,可搞了半天,就是不干。最后整明白了,PIC16系列单片机的中断入口中有一个。PIC的功能是很强大,外围模块也多,速度也较快,但PIC的这个中断方案不好,应该改进。以下是三个定时中断同时工作的调试代码。

#include<pic.h>

#define uchar unsigned char

#define uint unsigned int

__CONFIG(0x3B31);

void init();

uint Timer0Num,Timer1Num,Timer2Num;//

void timer0();

void timer1();

void timer2();

void main()

{

init();

while(1)

{

if(Timer0Num>=20)

{

Timer0Num = 0;

RD0 = ~RD0;

}

if(Timer1Num >= 4)

{

Timer1Num = 0;

RD2 = !RD2;

}

if(Timer2Num >= 50)

{

Timer2Num = 0;

RD4 = !RD4;

}

}

}

void init(void)

{

TRISD = 0;

PORTD = 0;

OPTION = 0x07;//256分频

TMR0 = 56;

PIE1 |= 0x01 | 0x02;

TMR1H = (65536-50000)/256;

TMR1L = (65536-50000)%256;

T1CON = 0x21;//4分频

TMR2 = 0;

PR2 = 100;

T2CON = 0x1D;

INTCON = 0xE0;

}

void interrupt Ints()

{

if(T0IE&&T0IF) timer0();

if(TMR1IE&&TMR1IF) timer1();

if(TMR2IE&&TMR2IF) timer2();

}

void timer0()

{

T0IF = 0;

TMR0 = 56;

Timer0Num++;

}

void timer1()

{

TMR1IF = 0;

TMR1H = (65536-50000)/256;

TMR1L = (65536-50000)%256;

Timer1Num++;

}

void timer2()

{

TMR2IF = 0;

TMR2 = 0;

PR2 = 200;

Timer2Num++;

}

提醒:《PIC单片机三个定时器中断同时定时》最后刷新时间 2024-03-14 01:09:40,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《PIC单片机三个定时器中断同时定时》该内容的真实性请自行鉴别。