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

📄 5_2_2.c

📁 用C语言写的用于微新公司数字信号控制器30F6014的
💻 C
字号:
//6.2.2  程序清单
/* 该程序采用定时器 1(Timer 1)闪亮LED,采用外部中断INT0和INT1使LED开关。 */
#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

int main(void)
{		
/*设置LED控制寄存器和定时器*/
/*初始化LED端口和按键开关端口*/
LATD = 0xFFFF;                   //关闭所有LED
TRISD = 0xFFF0;               //设定LED引脚为输出
TRISA = 0xFFFF;               //设定按键开关引脚为输入
/*初始化定时器1为1/2秒*/
T1CON = 0;                    //关闭定时器1
TMR1 = 0;                        //启动定时器1的计数寄存器为0
PR1 = (Fcy/256)/2;             //设定1/2秒延时时间 
T1CON = 0x8030;                 //配置定时器1 (定时器开, 在空闲模式定时器继续工作,
                                   //门控时间累加禁止, 预分频比是1:256, 内部时钟)
/*使能外部中断寄存器INT1和INT2*/
IEC1bits.INT1IE = 1;	   	   //使能INT1中断
	   IEC1bits.INT2IE = 1;	   	   //使能INT2中断
/*按1Hz的频率闪亮LED*/
   while (1)
{
      if(IFS0bits.T1IF == 1)        //检测定时器1的中断标志是否设定
	      {
         IFS0bits.T1IF = 0;             //清除定时器1中断标志
         LATDbits.LATD0 = !LATDbits.LATD0; // LED1闪亮
      }
	    }
}

/*INT1中断中断服务程序*/
void _ISR _INT1Interrupt(void) //声明INT1 中断函数
{
   IFS1bits.INT1IF = 0;	   //清除INT1中断标志
   LATDbits.LATD2 = 0;     // LED3开
   LATDbits.LATD3 = 1;     // LED4关
}
/*INT2中断中断服务程序*/
void _ISR _INT2Interrupt(void) //声明INT2 中断函数
{
   IFS1bits.INT2IF = 0;	   //清除INT2中断标志
   LATDbits.LATD2 = 1;     // LED3关
   LATDbits.LATD3 = 0;     // LED4开
}

⌨️ 快捷键说明

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