本帖最后由 NOKOL520 于 2019-8-22 15:37 编辑
新手学习16f917,定时器1给蜂鸣器提供波形!定时器2改变定时器1的频率,让蜂鸣器能发出类似的报警声!主函数里一个定时检测电压的,一个按键程序,现在出现的问题是,主函数跑不起来!测试发现,主函数跑了890次左右时就不跑了,然后就一直在定时器中断里打转!前面的这段时间定时器也是正常的在跑!如果把中断函数删掉,主函数就能正常跑起来!只是关掉定时器使能没用。。。。求论坛里的大神们帮忙看看,哪里出了问题!#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
#define low RD0
#define lbt RD3
#define high RD2
#define flt RD4
#define spk RD5
#define mot RD6
#define ctr RD7
#define keyin RB0
uint data[2]={64722,64436}; //蜂鸣器频率const
uint count=0,jcout=0,mode=0,lednum;
uint vba,isp,k,t,flagb,flagf,i,p,j,s;
__CONFIG(0xE0F1); //30F5
//void delay(uint x);
void init();
uint get_ad(uchar y);
void monitor();
void key_scan();
void sentchar(uchar data1);
void printcom(const uchar *dat);
void printdata(uint dat);
uint filter();
void main()
{
init();
while(1)
{
k++;
RD1=!RD1;
if(k>=1000)
{
k=0;
monitor();
//TMR1IE=!TMR1IE;
//TMR1ON=TMR1IE;
}
key_scan();
}
}
/*void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}*/
void init() //初始化:4MHZ,AD, PWM,uart,定时器012
{
OSCCON=0x67;
TRISA=0x0f;
TRISB=0x01;
TRISC=0xc0;
TRISD=0;
PORTA=0;
PORTB=0;
PORTC=0;
PORTD=0xE1;
TXSTA=0x24;
RCSTA=0x90;
SPBRG=25;
RCIE=1;
ANSEL=0x28;
ADIE=1;
ADCON0=0x05;
ADCON1=0x9e;
OPTION=0X07;
TMR0=61;
T0IE=1;
INTCON=0xa0;
GIE=1;
PEIE=1;
PIE1=0X03;
T2CON=0X1C;
//TMR2IE=0;
TMR2ON=1;
CCPR1L=0x5b; //C8
CCP1CON=0x0C;
//TMR2=0;
PR2=0x7C;
T1CON=0x01;
TMR1L=(65536-200)%256;
TMR1H=(65536-200)/256;
//delay(10);
T1CON=0;
PORTD=0x81;
}
uint get_ad(uchar y) //AN1---133,AN3---141
{--ADC--}
void monitor()
{--调用ADC和平均值+判定---}
void key_scan(){---按键扫描----}
void sentchar(uchar data1){---发送数据---}
void printcom(const uchar *dat){----发送字符串----}
void printdata(uint dat){ ----发送变量值----}
uint filter(){----去除最大和最小后取平均值----}
void interrupt T1()
{
if(TMR1IF==1)
{
p=data[jcout];
TMR1H=p/256;
|