123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- #include "public.h"
- __near_func __interrupt void t3_irq(void);
- __near_func __interrupt void t4_irq(void);
- __near_func __interrupt void P1INT_Exti_ISR(void);
- //32MHZ us延时函数;
- #pragma optimize=none
- void system_delay_us(unsigned int n)
- {
- n>>=1;
- while(n--)
- {
- asm("NOP");
- asm("NOP");
- asm("NOP");
- asm("NOP");
- asm("NOP");
- asm("NOP");
- asm("NOP");
- asm("NOP");
- asm("NOP");
- asm("NOP");
- asm("NOP");
- asm("NOP");
- asm("NOP");
- asm("NOP");
- asm("NOP");
- }
- }
- /****************************************************************************
- * 名 称: InitTimer3()
- * 功 能: 定时器初始化,系统不配置工作时钟时默认是2分频,即16MHz
- * 入口参数: 无
- * 出口参数: 无
- ****************************************************************************/
- void InitTimer3(void)
- {
- T3IE = 1; //开总中断和T3中断
- //T3CTL (0xCB)–定时器 3 控制 bit7:5 -->111: 标记频率/128
- T3CTL |= 0xE0; //128分频,F=16M/128=125000HZ T=1/F=8us 计数一次8us 计满溢出
- T3CTL |= 0x08 ; //开溢出中断 bit3 溢出中断屏蔽 0:中断禁止 1:中断使能
- // T3CTL &= ~0x03; // 自动重装 00->0xff bit1:0--->00: 自由运行,从0x00到0xFF反复计数
- T3CTL &= ~0x01; // //设置为 模模式 从0x00到T3CC0重复计数 bit1:0 -->10
- T3CC0 = 250; //设置最大计数值 这里设置250 2ms触发一次中断
- T3CCTL0 = 0x04;// bit2 选择定时器3通道0捕获或者比较模式 比较模式
- T3CTL |= 0x10; // bit4 启动定时器。正常运行时设置,暂停时清除
- //T3CTL bit2 清除计数器。写1到CLR复位计数器到0x00,并初始化相关通道所有的输出引脚。总是读作0。
- EA = 1; //开总中断
- //T3CNT (0xEA) – 定时器 3 计数器 定时器计数字节。包括8位计数器当前值。
- P1DIR=0xff;
-
- }
- /****************************/
- //定时器3中断函数
- /****************************/
- #pragma vector=T3_VECTOR
- __near_func __interrupt void t3_irq(void)
- {
- //T3STAT &= ~0x01;
- IRCON &= ~0x04; //T3IF clear //清除定时器3通道0中断标志
-
- }
- /****************************************************************************
- * 名 称: InitTimer4()
- * 功 能: 定时器初始化,系统不配置工作时钟时默认是2分频,即16MHz
- * 入口参数: 无
- * 出口参数: 无
- ****************************************************************************/
- void InitTimer4(void)
- {
- T4IE = 1; //开总中断和T4中断
- //T3CTL (0xCB)–定时器 3 控制 bit7:5 -->111: 标记频率/128
- T4CTL |= 0xE0; //128分频,F=16M/128=125000HZ T=1/F=8us 计数一次8us 计满溢出
- T4CTL |= 0x08 ; //开溢出中断 bit3 溢出中断屏蔽 0:中断禁止 1:中断使能
- // T3CTL &= ~0x03; // 自动重装 00->0xff bit1:0--->00: 自由运行,从0x00到0xFF反复计数
- T4CTL &= ~0x01; // //设置为 模模式 从0x00到T4CC0重复计数 bit1:0 -->10
- T4CC0 = 250; //设置最大计数值 这里设置250 2ms触发一次中断
- T4CCTL0 = 0x04;// bit2 选择定时器3通道0捕获或者比较模式 比较模式
- T4CTL |= 0x10; // bit4 启动定时器。正常运行时设置,暂停时清除
- //T3CTL bit2 清除计数器。写1到CLR复位计数器到0x00,并初始化相关通道所有的输出引脚。总是读作0。
- EA = 1; //开总中断
- //T3CNT (0xEA) – 定时器 3 计数器 定时器计数字节。包括8位计数器当前值。
- }
- /****************************/
- //定时器4中断函数
- /****************************/
- #pragma vector=T4_VECTOR
- __near_func __interrupt void t4_irq(void)
- {
- //T3STAT &= ~0x01;
- IRCON &= ~0x08; //T4IF clear //清除定时器4通道0中断标志
-
- static int cnt=0;
- if(++cnt>500)
- {
- cnt=0;
- P1^=0xff;
- }
- }
- /*===============P1端口外部中断初始化函数==================*/
- void Init_P1Prot_Exti(void)
- {
- IEN2 |= 0x10; //端口1中断使能
- P1IEN |= 0x04; //端口P1_2外部中断使能 端口P1.7到P1.0中断使能
- PICTL |= 0x02; //端口P1_0到P1_3下降沿触发 3到0输入模式下的中断配置。该位为所有端口1的输入选择中断请求条件0: 输入的上升沿引起中断1: 输入的下降沿引起中断
- EA = 1; //使能总中断
- }
- /*================外部中断1服务函数====================*/
- #pragma vector = P1INT_VECTOR //外部中断1的向量入口
- __near_func __interrupt void P1INT_Exti_ISR(void)
- {
- /*先清除引脚标志位,再清除端口标志位,否则会不断进入中断*/
- P1IFG &= ~ 0x04; //软件清除P1_2引脚的标志位
- P1IF = 0; //软件清除P1端口组的标志位
- }
|