//此程序利用TMR2与PR2,,完成了五个档次的调频,档数与频率大小可根据具体情况作具体的修改,为中断方式
//但是为了满足另外的模块的兼容性,所以打算把其改为查询方式,但是控制字的设置,我弄了几个小时也改不好,求指教,谢谢,打搅了
#include
#define uchar unsigned char
#define uint unsigned int
__CONFIG(0x3B31);
#define MHz *1000000
#define XTAL_FREQ 4
#define SW_X RD0 //X方向调速键
void DelayMS(unsigned int ms) //定义延时函数
{
int j = 0;
for(ms = 0;ms < 0;ms--)
for(j=27*XTAL_FREQ;j>0;j--) //1MHz时约是27,其他主频可酌情修改
{
}
}
void main()
{ TRISD0=1; // 调速按键输入
TRISC1=0;
RC1=0; T2CON=0X04; //后分频1:1,使能TMR2,前分频比1:1,,可修改,从而得到所需要的频率
TMR2=0X00; //初始值,理论上可以修改,但是为什么没有变化捏?????????????????
PR2=100;
while(1)
{
if (SW_X == 0)
{
DelayMS(30); //消除前沿抖动
if (SW_X == 0) //键真的按下去了
{
if (PR2>20)
PR2-=20; // 比较,初始值,可以改变,其值,来改变频率,值越小频率越高
else
PR2=100;
}
DelayMS(30); //消除后沿抖动
while (SW_X == 0) //如果按键未抬起,则循环等待
{
}
}
TMR2IF=0; //溢出标志位初始为0
TMR2IE=1; //使能
INTCON=0xC0; //0XC0:全局中断GIE使能允许中断,PEIE使能允许外设中断。为了 能同时满足TMR0,
while(1)
{
if(SW_X == 0)
break;
}
}
}
void interrupt TMR_2()
{
if(TMR2IF==1)
{
TMR2IF=0;
RC1=~RC1;
}
}
|