⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5_3_2.c

📁 用C语言写的用于微新公司数字信号控制器30F6014的
💻 C
字号:
//6.3.2  程序清单

#include <p30f6014.h>             //dsPIC30F6014标准头文件
/*配置位*/
 _FOSC(CSW_FSCM_OFF & XT_PLL4);   //4倍频晶振,Failsafe 时钟关闭
 _FWDT(WDT_OFF);                     //关闭看门狗定时器
 _FBORPOR(PBOR_OFF & MCLR_EN);    //掉电复位禁止,MCLR复位使能。
 _FGS(CODE_PROT_OFF);               //代码保护禁止

#define Fcy 7370000                 //7.37MHz外部晶振带4倍频,指令周期为7.37MIPs
#define SW1	!PORTAbits.RA12		  //按键SW1(RA12)低电位有效

int main(void)
{		
/*设置LED控制寄存器和定时器*/
//初始化LED端口和按键开关端口
LATD = 0xFFFF;                //关闭所有LED
TRISD = 0xFFF0;               //设定LED引脚为输出
TRISA = 0xFFFF;               //设定按键开关引脚为输入
/*设定CPU的优先级*/
SRbits.IPL = 4;               //设定CPU的优先级为4
/*初始化定时器1为1/10秒*/
T1CON = 0;                    //关闭定时器1
TMR1 = 0;                     //启动定时器1的计数寄存器为0
PR1 = (Fcy/256)/10;         //设定1/10秒延时时间 
T1CON = 0x8030;              //配置定时器1 (定时器开, 在空闲模式定时器继续作, 
//门控时间累加禁止, 预分频比是1:256, 内部时钟)
/**设定定时器1的中断优先级并使能中断/
  IPC0bits.T1IP = 3; 		  //设定定时器1的中断优先级为3 
IFS0bits.T1IF = 0;      	  //清定时器1的中断标志
   IEC0bits.T1IE = 1;          //使能定时器1中断
/*初始化定时器2为1秒*/
   T2CON = 0;                   //关闭定时器2
TMR2 = 0;                    //启动定时器2的计数寄存器为0
   PR2 = (Fcy/256);            //设定1秒延时时间 
T2CON = 0x8030;            //配置定时器1 (定时器开, 在空闲模式定时器继续工作, 
//门控时间累加禁止, 预分频比是1:256, 内部时钟)
/*设定定时器2的中断优先级并使能中断*/
   IPC1bits.T2IP = 5;		    //设定定时器2的中断优先级为5
   IFS0bits.T2IF = 0;            //清定时器2的中断标志
   IEC0bits.T2IE = 1;            //使能定时器2中断

   while(!SW1);						 // 等待按键SW1按下
/*按键SW1按下,则改变CPU的中断优先级*/
   while (1)
   {
      if(!SW1) 				    //如果SW1没有按下
		  {
         LATDbits.LATD3 = 1;     //LED4关闭
         SRbits.IPL = 2;          //设定CPU的优先级为2
      }
      else                           //如果SW1按下
		  {
         LATDbits.LATD3 = 0;      // LED4 开
         SRbits.IPL = 6;           //设定CPU的优先级为 6
      }
	 }
}

/*定时器1中断服务程序*/
void _ISR _T1Interrupt(void)
{
   IFS0bits.T1IF = 0;             //清除定时1中断标志
	   LATDbits.LATD0 = 0;            //LED1开
   while(IFS0bits.T1IF == 0);	//等待下一个定时器1中断 
   IFS0bits.T1IF = 0;            //清除定时1中断标志
	   LATDbits.LATD0 = 1;           // LED1关
}

/*定时器2中断服务程序*/
void _ISR _T2Interrupt(void)
{
   IFS0bits.T2IF = 0;            //清除定时2中断标志
	   LATDbits.LATD1 = 0;           // LED2开
   while(IFS0bits.T2IF == 0);   //等待下一个定时器2中断
   IFS0bits.T2IF = 0;            //清除定时2中断标志
	   LATDbits.LATD1 = 1;           // LED2关
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -