输出比较(OC)编程步骤:
初始化函数
TIOS---选择工作方式为OC
TCx---通道x的OC寄存器赋初值,经过N秒后进入第一次中断
TCTLx---设置对应位输入捕捉的方式(x=1、2,高四位是1,低四位是2)
TSCRx---控制寄存器设置,包括工作使能、确定工作方式(x=1)、中断允许、预分频
TIE---中断使能
中断函数
清除标志位---TFLG1
重新赋初值TCx
【例程4】
//---------------------------------------------------------------------------//
//功能说明:利用PT0的输出比较功能,定时进入中断
// 利用PORTB显示定时的时间
//程序设计:电子设计吧
//设计时间:2010.01.15
//---------------------------------------------------------------------------//
#include #include #pragma LINK_INFO DERIVATIVE "mc9s12dg128b" //利用定时器输出比较功能产生定时中断 //----------------------变量定义----------------------// static unsigned int waittime = 0; //---------------------时钟初始化-------------------// void PLL_Init(void) //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1) { //锁相环时钟=2*16*(2+1)/(1+1)=48MHz REFDV=1; //总线时钟=48/2=24MHz SYNR=2; while(!(CRGFLG&0x08)); CLKSEL=0x80; } //--------------------定时器初始化------------------// void ECT0_Init(void) { TIOS=0x01; //定时器通道0设置为输出比较 TC0=0x00ee; //赋初值,当TCNT从0计数到此值时第一次进入中断 TCTL2=0x02; //其他七路与定时器断开 执行的动作时:0通道输出清零 TSCR2=0x86 //溢出中断禁止 24M/64=2.67微秒,计一个数用2.67微秒 TSCR1=0x80; //使能定时器 TIE=0x01; //通道0输出比较中断允许 } //-----------------------主函数------------------------// void main(void) { PLL_Init(); ECT0_Init(); DisableInterrupts; DDRB=0xff; PORTB=0x00; for(;;) { EnableInterrupts; } } //-----------------------中断函数处理-------------------// #pragma CODE_SEG NON_BANKED void interrupt 8 Timer0_ISR(void) //8为定时器通道0的中断标号 { unsigned int m; TFLG1_C0F=1;//清中断标志位 DisableInterrupts; m=TCNT; TC0=m+37500; //37500*2.67us=10ms定时时间 waittime++; if(waittime>=255) { waittime=0; } PORTB=waittime; }
上一篇:PB口驱动的LED以每秒一次的频率循环闪烁
下一篇:手把手教你写S12XS128程序(17)--Timer模块介绍1
推荐阅读最新更新时间:2024-11-05 15:26
设计资源 培训 开发板 精华推荐
- iotSDR:多功能开发板,提供设计自定义物联网协议和网关所需的一切
- LTC2635-LMO10 四通道、10 位数模转换器的典型应用
- L78L24C正压稳压器Edit boost电路的典型应用
- L7808A 具有温度补偿的可调输出电压的典型应用
- AD5342 并行接口、双电压输出、12 位 DAC 的典型应用
- 使用 LO 2 分频调制器的宽带、低误差矢量幅度 (EVM) 直接转换发射器
- EVAL-ADXRS453Z-V,ADXRS453 评估板,±300 度/秒,1 轴数字输出速率陀螺仪
- FRDMFS6522LAEVM: FS6522, 系统基础芯片, DCDC 2.2A Vcore FS1B LDT CAN
- ESP8266 WiFI杀手
- ADP2442 降压型 DC 至 DC 稳压器,1 A 输出电压为 5 V