tomatoyyh 发表于 2012-5-8 14:56:36

飞思卡尔 s12g128 按键中断程序

PAD 4567 作为按键中断输入
PT 4567 作为LED输出
最简单的中断实验,放在这里方便以后自己查看


#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

void main(void) {

ATDDIEN =(ATDDIEN & 0xff0f) | (0xf<<4);      //ad口输入使能。读取-修改-回写,保护原数据0xf<<4就是0x00f0

DDR1AD = (DDR1AD & 0x0f) | 0x00;         //设置输入
PER1AD = (PER1AD & 0x0f) | 0xf0;         //上下拉使能
PPS1AD = (PPS1AD & 0x0f) | 0x00;            //设置上拉,下降沿触发
PIE1AD = (PIE1AD & 0x0f) | 0XF0;             //中断使能
PIF1AD = 0xff;                               //清除中断标志位

DDRT = (DDRT & 0x0f) | 0xf0;                //设置输出
PTT = (PTT & 0x0f) | 0XA0;                  //led 1010

        EnableInterrupts;

for(;;) {
    _FEED_COP(); /* feeds the dog */
} /* loop forever */
/* please make sure that you never leave main */
}

#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 62U key(void)
{

PIF1AD = 0xff;
PTT = ~PTT;

}
#pragma CODE_SEG DEFAULT

dfchen 发表于 2012-5-17 23:04:53

该类单片集资料不多,学习了!

tomatoyyh 发表于 2012-7-26 19:40:05

定时器比较输出,通道4翻转输出 50Hz

文件main.c

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */



void main(void) {
/* put your own code here */

TIMER_Init();

        EnableInterrupts;


for(;;) {
    _FEED_COP(); /* feeds the dog */
} /* loop forever */
/* please make sure that you never leave main */
}

文件 time.c

#include <mc9s12dg128.h>   

void TIMER_Init(void)
{
TIOS_IOS4 = 1;         //设置通道4为输出
TC4 = 0X9C41;          //设置比较值
TCTL1 = 0X01;      //设置通道4翻转
TSCR2 = 0X80;      //计数器溢出中断使能,被置位时发出硬件中断请求。64 分频   
TSCR1 = 0X80;      //TEN使能
TIE_C4I = 1;         //通道4中断使能
}

/*********中断函数***************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 16U TIMER_Ovf_interrupt(void)
{
TFLG2_TOF = 1;
}

void interrupt 12U TIMER_CH4_interrupt(void)
{
TFLG1_C4F = 1;
}
页: [1]
查看完整版本: 飞思卡尔 s12g128 按键中断程序