请教各位,刚接触飞思卡尔单片机,这个让LED灯闪烁的程序有什么问题?编译时出现Fixup overflow的问题

请教各位,刚接触飞思卡尔单片机,这个让LED灯闪烁的程序有什么问题?编译时出现Fixup overflow的问题,第1张

中断服务函数要放在非分页区

#include <hidefh> / common defines and macros /

#include <MC9S12XS128h> / derivative-specific definitions /

void initPIT(void)

{

PITMTLD0=199; //设定8-bit MICRO Timer0寄存器,它每次从199降到0,花费时

//间为2000125us=25us

PITCFLMT|=0x83; /0x83=1(PITE)000 0011(PFLMT[1:0]);PITE:使能PIT

PFLMT强制加载8位计数器值/

PITMUX&=0xfe; /定时器0对应8位计数器0/

PITLD0=15999; //定时周期=(15999+1)25us=400ms

PITINTE|=0x01; /使能定时器0的time-out中断/

PITFLT|=0x01; //强制加载

PITCE|=0x01; /使能定时器0,开始定时/

}

void main(void)

{

DDRB=0xff;

initPIT();

for(;;) ;

}

#pragma CODE_SEG NON_BANKED

//////////////////////就是上面这句话

void interrupt 66 PIT0_RE(void)

{

PITTF=0x01; /清除中断标志位/

PORTB =~PORTB; /改变led 状态/

}

#pragma CODE_SEG __NEAR_SEG NON_BANKED //中断函数置于非分页区内

interrupt VectorNumber_Vtimch7 void ICU_Ch7Int(void)

{

TFLG1_C7F = 1; //清中断标志位

}

#pragma CODE_SEG DEFAULT //后续代码置于默认区域内

我一般是用上述方式声明中断函数。

由于飞思卡尔16位单片机的中断向量是16位,所以中断函数只有被置于非分页区内才能被寻址到,这就是第一行的作用。

第二行中“VectorNumber_Vtimch7”是中断号,它是由文件“MC9S12XS128h”中定义的宏,这个中断号在它的技术手册中找到,但是我建议你采用这种宏的形式,因为这个宏不容易出错,可读性较高,比如“VectorNumber_Vtimch7”即为定时器(TIM)通道7(CH7)所对应的中断号。中断函数名“ICU_Ch7Int”可任意取,没有影响。

由于单片机内部非分页区大小有限,非中断函数一般置于分页区内,最后一行即为此作用。

// ---------------------------------ADC0-------------------------

ADC0_DP0,

ADC0_DP1,

PGA0_DP, //不支持ADC,需要配置 ADC PGA register 设置放大增益

ADC0_DP3,

//软件触发不支持B通道

ADC0_SE4b, // PTC2 不支持软件ADC

ADC0_SE5b, // PTD1 不支持软件ADC

ADC0_SE6b, // PTD5 不支持软件ADC

ADC0_SE7b, // PTD6 不支持软件ADC

ADC0_SE8, // PTB0

ADC0_SE9, // PTB1

ADC0_SE10, // PTA7

ADC0_SE11, // PTA8

ADC0_SE12, // PTB2

ADC0_SE13, // PTB3

ADC0_SE14, // PTC0

ADC0_SE15, // PTC1

ADC0_SE16, // ADC0_SE16

ADC0_SE17, // PTE24

ADC0_SE18, // PTE25

ADC0_DM0, // ADC0_DM0

ADC0_DM1, // ADC0_DM1

RES0, // 保留

RES1, // 保留

DAC0_OUT, // DAC0输出 不支持ADC

RES2, // 保留

RES3, // 保留

Temp0_Sensor, // Temperature Sensor,内部温度测量,可用ADC函数

Bandgap0, // 温度补偿结构带隙基准源 不支持ADC

RES4, // 保留

VREFH0, // 参考高电压,可用ADC函数 ,结果恒为 2^n-1

VREFL0, // 参考低电压,可用ADC函数 ,结果恒为 0

Module0_Dis, // 不支持 ADC

// ---------------------------------ADC1-------------------------

ADC1_DP0,

ADC1_DP1,

PGA1_DP, // 不支持 ADC

ADC1_DP3,

ADC1_SE4a, // PTE0

ADC1_SE5a, // PTE1

ADC1_SE6a, // PTE2

ADC1_SE7a, // PTE3

ADC1_SE4b = ADC1_SE4a, // PTC8 不支持软件ADC ,传递 ADC1_SE4b 到软件ADC函数里,会当作 ADC1_SE4a 处理。

ADC1_SE5b = ADC1_SE5a, // PTC9 不支持软件ADC

ADC1_SE6b = ADC1_SE6a, // PTC10 不支持软件ADC

ADC1_SE7b = ADC1_SE7a, // PTC11 不支持软件ADC

ADC1_SE8, // PTB0

ADC1_SE9, // PTB1

ADC1_SE10, // PTB4

ADC1_SE11, // PTB5

ADC1_SE12, // PTB6

ADC1_SE13, // PTB7

ADC1_SE14, // PTB10

ADC1_SE15, // PTB11

ADC1_SE16, // ADC1_SE16

ADC1_SE17, // PTA17

VREF_OUTPUT, // VREF Output

ADC1_DM0, // ADC1_DM0

ADC1_DM1, // ADC1_DM1

RES5, //保留

RES6,

DAC1_OUT,

RES7, //保留

RES8,

Temp1_Sensor,

Bandgap1, // 温度补偿结构带隙基准源 不支持ADC

RES9,

VREFH1, // 参考高电压,可用ADC函数 ,结果恒为 2^n-1

VREFL1, // 参考低电压,可用ADC函数 ,结果恒为 0

Module1_Dis, // 不支持 ADC

、、、、、、、、、、、、、、、、

/!

COPYRIGHT NOTICE

Copyright (c) 2013,山外科技

All rights reserved

技术讨论:山外论坛 http://wwwvcan123com

除注明出处外,以下所有内容版权均属山外科技所有,未经允许,不得用于商业用途,

修改内容时必须保留山外科技的版权声明。

@file mainc

@brief 山外K60 平台主程序

@author 山外科技

@version v50

@date 2013-08-28

/

#include "commonh"

#include "includeh"

/!

@brief main函数

@since v51

@note 山外 ADC 实验

/

void main()

{

uint16 var;

adc_init(ADC1_SE16); //ADC初始化

while(1)

{

var = adc_once (ADC1_SE16, ADC_8bit);

printf("\nADC采样结果为:%d",var);

printf(" 相应电压值为%dmV",(3300var)/((1<<8)-1));

DELAY_MS(500);

}

}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12183328.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存