📄 ect--+
字号:
#include <hidef.h> /* common defines and macros */
#include <MC9S12XS128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
unsigned int number1=0,number2=0;
unsigned char flag=0; //定义标志位
void delay(){ //延时
unsigned int i,j;
for(i=0;i<500;i++){
for(j=0;j<1000;j++) ;
}
}
void SetBusCLK_80M(){ //设置总线时钟
CLKSEL=0X00; //disengage PLL to system
PLLCTL_PLLON=1; //turn on PLL
SYNR =0xc0 | 0x09;
REFDV=0xc0 | 0x01;
POSTDIV=0x00; //Fvco=2*osc*(1+SYNDIV)/(1+REFDIV);2*16*(1+9)/(1+1)=160MHz
//Fpll=Fvco/2*POSTDIV,but when POSTDIV=0,Fpll=Fvco=160MHz
_asm(nop); //BUSCLOCK=Fpll/2 =80MHz
_asm(nop);
while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;
CLKSEL_PLLSEL =1; //engage PLL to system;
}
void ECT_Init(void){ //计数器初始化
TIOS=0X02; //IOS7 IOS6 IOS5 IOS4 IOS3 IOS2 IOS1 IOS0
// 0 0 0 0 0 0 1 0
// IOSn=0,n为输入捕捉(IC)通道 用于计数
// IOSn=0,n为输出比较(OC)通道 用于定时
TSCR1=0X80; // TEN TSWAI TSFRZ TFFCA PRNT 0 0 0
// 1 0 0 0 0 0 0 0
// TEN=1 定时器使能 =0时禁止计时、计数
// TSWAI=1 进入中断等待模式时 禁止计数 =0时允许
//TSFRZ=0 冻结模式下允许计时器和计数器继续运行 =1时禁止
//PRNT =1 允许精确计时
TSCR2=0X07; //TOI 0 0 0 TCRE PR2 PR1 PR0
// 0 0 0 0 0 1 0 0
//TOI=0 禁止溢出中断 =1时 在TFLG2_TOF=1时发出中断请求
//TCRE=0 禁止计数器复位,自由计数 =1时通道7成功输出后计数器被复位
//PRn 预分频 Feci=Fbus/2^PR 这里是128分频
TCTL4=0X0a; //EDG3B EDG3A EDG2B EDG2A EDG1B EDG1A EDG0B EDG0A
// 0 0 0 0 1 0 1 0
//EDGnB=1,EDGnA=0 仅捕捉下降沿
TIE=0X03; //C7I C6I C5I C4I C3I C2I C1I C0I
// 0 0 0 0 0 0 0 0
//CnI=1允许标志位引起中断 =0时禁止
TFLG1=0X03; //C7F~C0F
//CnF=1说明该通道有动作。写1清除该标志位
TC1=0x00f0;
}
void Pulse(void){ //从A口输出一定频率的脉冲
PORTA_PA0=1; //PA0---IOC0
delay();
PORTA_PA0=0;
delay();
PORTA_PA1=1; //PA1---IOC1
delay();
delay();
PORTA_PA1=0;
delay();
}
void main(void) {
DisableInterrupts;
SetBusCLK_80M();
ECT_Init();
EnableInterrupts;
DDRA=0xff;
DDRB=0xff;
PORTB=0xff;
for(;;){
Pulse();
}
}
#pragma TRAP_PROC SEG_NEAR_SEG NON_BANKED //申明中断XS128
//#pragma CODE_SEG NON_BANKED、 //申明中断DB128
void interrupt 8 count2(){ //中断优先级高
TFLG1_C0F=1; //清中断标志位
number2++;
}
void interrupt 9 count1(){ //中断优先级低
DisableInterrupts;
TFLG1_C1F=1; //清中断标志位
number1++;
if(flag==0){
flag=1;
PORTB=0x55;
}
else{
flag=0;
PORTB=0xaa;
}
TC1=0x00f0;
EnableInterrupts;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -