飞思卡尔 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 该类单片集资料不多,学习了! 定时器比较输出,通道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]