/* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
#define ENCODE1_PHA PTT_PTT1
#define ENCODE1_PHB PTT_PTT0
#define ENCODE2_PHA PTT_PTT4
#define ENCODE2_PHB PTT_PTT3
#define RIGHT 1
#define LEFT 0
#define EQUAL 3
#define HYPHEN 2
unsigned char Sci_Flag;
unsigned char Sci_Buffer[6];
unsigned char g_ucEncodeFlag;
unsigned char g_ucCurrentKey;
unsigned char g_ucEncodeCounter;
void Init_IO(void){
DDRP = 0x00;
}
void Init_Capture(void){
TSCR1 = 0X80; //enable time;
TSCR2 = 0X00; //prescale factor;
TSCR2 = 0x03; //分频系数为8,一次溢出时间为21ms,对应速度为0.1/s
//溢出中断禁止
TIOS = 0x00; //选择为输入捕捉
//TCTL3 = 0xff; //沿选择
//TCTL4 = 0x01; //沿选择
TCTL4 = 0x0F; //沿选择
//ICSYS = 0x0a; //00001010:两个有效沿之后中断,使能保持寄存器,队列模式
//ICOVW_NOVW0 = 0; //0为允许重写
//DLYCT = 0x01; //延时
//TFLG1 = 0x01; //清中断标志
TIE = 0x03; //中断使能
//ICSYS |= 0x0A;
TFLG1=0x03;
//TSCR1_TEN = 1; //定时器使能
//ICSYS=0x0E;//队列模式;
}
void main(void) {
/* put your own code here */
EnableInterrupts;
Init_IO();
Init_Capture();
//Sci_R();
for(;;) {
if(PTT_PTT3 ==0x00) {
//Sci_T(0xff);
}
if(PTT_PTT3 ==0x01) {
//Sci_T(0xf0);
}
} /* wait forever */
/* please make sure that you never leave this function */
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
/***********************************************************
函数名称:CAPTURE
函数功能:旋钮1中断处理程序
入口参数:无
出口参数:无
备 注:ENCDOE1 U3
***********************************************************/
interrupt void CAPTURE1(void)
{
int i;
TIE = 0x00;
TFLG1_C0F=1;
//TCNT = 0;
//TSCR1_TEN = 1; //定时器使能
g_ucEncodeFlag=0;
//for(i=0;i<10000;i++);
if( ENCODE1_PHA ==0) //下降沿引发中断
{
if(ENCODE1_PHB ==1) //B相为高发左旋代码
{
g_ucCurrentKey=LEFT;
//g_ucEncodeSta=1;
}
else if(ENCODE1_PHB==0) //B相为低右代码
{
g_ucCurrentKey=RIGHT;
//g_ucEncodeSta=2;
}
}
else //上升沿引发中断
{
if(ENCODE1_PHB==0) //B相为低发左旋代码
{
g_ucCurrentKey=LEFT;
//g_ucEncodeSta=1;
}
else if(ENCODE1_PHB==1) //B相为高发右旋代码
{
g_ucCurrentKey=RIGHT;
//g_ucEncodeSta=2;
}
}
g_ucEncodeFlag=1;
g_ucEncodeCounter=0xff;
//TFLG1 = 0x02;
//TFLG2 = 0x80; //清中断标志
TIE = 0x03;
}
/***********************************************************
函数名称:CAPTURE2
函数功能:旋钮2中断处理程序
入口参数:无
出口参数:无
备 注:ENCODE2 U2
***********************************************************/
interrupt void CAPTURE2(void)
{
TIE = 0x00;
TFLG1_C1F=1;
g_ucEncodeFlag=0;
if( ENCODE2_PHA==0) //下降沿引发中断
{
if(ENCODE2_PHB==1)
{
g_ucCurrentKey=HYPHEN; //B相为高发左旋代码
//g_ucEncodeSta=1;
Sci_T(0x03);
}
else if(ENCODE2_PHB==0)
{
g_ucCurrentKey=EQUAL; //B相为低发右旋代码
//g_ucEncodeSta=2;
}
}
else
{
if(ENCODE2_PHB==0) //B相为低发左旋代码
{
g_ucCurrentKey=HYPHEN;
//g_ucEncodeSta=1;
}
else if(ENCODE2_PHB==1) //B相为高发右旋代码
{
g_ucCurrentKey=EQUAL;
//g_ucEncodeSta=2;
}
}
g_ucEncodeFlag=1;
g_ucEncodeCounter=0xff;
// TFLG1 = 0xff;
// TFLG2 = 0x80;
TIE = 0x03;
}
#pragma CODE_SEG DEFAULT
//VECTOR ADDRESS 0XFFEE CAPTURE1
//VECTOR ADDRESS 0XFFEC CAPTURE2
都设置了.
[此贴子已经被作者于2008-4-17 11:37:05编辑过]
作者: gezi3328 时间: 2008-4-17 15:56
为什么PTT_PTT0 PTT_PTT1 输入捕捉能捕捉得到 PTT_PTT3 PTT_PTT4输入捕捉捕捉不到呢,这是什么原因,设置都是一样设置的
作者: jianw007 时间: 2008-4-18 08:42
3.4的TIE没有使能
作者: gezi3328 时间: 2008-4-18 09:29
3 4 用的不就是TIM1么 TIE=0X03;这已经使能了,我刚刚 把TIE设置成0XFF也同样都不好使
作者: strongchen 时间: 2008-4-18 10:52
那把旋钮2接到通道0又会怎样?
作者: jianw007 时间: 2008-4-18 11:36
你试试,把PORT T先设为普通输出,运行程序
再设为普通输入,运行程序
再试试你那个程序.
没见过这样的问题,看它是不是坏了.
昨天SCI模块出了问题,一直置高电平,结果弄好了.
我的方法是,设置复用口为普通输出或输入.运行程序.
完了再改为SCI就行了.
可能是片子自身的问题.
作者: gezi3328 时间: 2008-4-18 13:33
en 旋扭2接到通道0是正常工作的,
IO口输出高低,输入也都测过了,都正常,应该就是IO口的问题,现在我把PORT0 PORT4改接编码器1 , PORT1 PORT3改接编码器2,现在就都正常了.
[此贴子已经被作者于2008-4-18 13:33:28编辑过]
作者: jianw007 时间: 2008-4-18 14:05
正常就好
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) |
Powered by Discuz! 7.0.0 |