//求指教,为什么不能发出脉冲?、、
#include <pic.h>
#define uchar unsigned char
#define uint unsigned int
__CONFIG(0x3B31);
#define MHz *1000000
#define XTAL_FREQ 4
//外接晶振主频,单位MHz,定义单片机主频常数
//按键定义
#define SW_Z RD0 //调速键
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()
{
TRISD=0xFF; // 调速按键输入
TRISC=0;
RC1=0;//不能写为PORTC1=0;
T2CON=0; //0x04;//b10000110; //后分频1:1,使能TMR2,前分频比1:1,,可修改,从而得到所需要的频率
TMR2=0x00; //初始值,理论上可以修改,但是为什么没有变化捏?????????????????
// PR2=100;
//int m=2 ;
//TMR2=0X00;
int k=6 ;
while(1)
{
if (SW_Z == 0)
{
DelayMS(30); //消除前沿抖动
if (SW_Z == 0) //键真的按下去了
{
if (k >=2 ) //???
k--;
else
k=5;
}
//DelayMS(30);
// while(SW_Z==0) // 等待用户抬起PER_ADD
//{
// }
}
switch(k) //调速,,,频率小于100时才增加,开始计算新的方波周期预设值
{
case 1:
{
PR2=10;
break;
}
case 2:
{
PR2=40;
break;
}
case 3:
{
PR2=60;
break;
}
case 4:
{
PR2=80;
break;
}
case 5:
{
PR2=70;
break;
}
}
DelayMS(30);
while(SW_Z==0); // 等待用户抬起PER_ADD
TMR2IF=0; //溢出标志位初始为0
INTCON=0xC0; //0XC0:全局中断GIE使能允许中断,PEIE使能允许外设中断。为了 能同时满足TMR0
while(1)
{
if(TMR2IF==1) // 是CCP1中断
{
TMR2IF==0; // CCP1标志位清零
RC1=~RC1; // RC2取反后输出
}
if (SW_Z == 0)
{
DelayMS(30); //消除前沿抖动
if (SW_Z == 0)
{
break;
}
}
}
}
}
此帖出自
小平头技术问答
一周热门 更多>