注册会员
- 积分
- 129
- 威望
- 177
- 贡献
- 22
- 兑换币
- 0
- 注册时间
- 2008-6-8
- 在线时间
- 0 小时
|
<>AD中断服务总是程序进不去</P><P>#include <hidef.h> /* common defines and macros */<BR>#include <mc9s12db128.h> /* derivative information */<BR>#pragma LINK_INFO DERIVATIVE "mc9s12db128b"</P><P><BR>int i,S25L,C10L,BUFFUL,SBEGIN,C25LF,NEW_FIELD;<BR>unsigned char buffer[500];<BR>int LLLL;<BR> </P><P>/************设置PLL对单片机超频40M**********<BR>void clk_Init(void)<BR>{<BR>REFDV=3;<BR>SYNR=4;<BR>while(CRGFLG_LOCK==0){CLKSEL=0x80;}<BR>}<BR>**********************/</P><P>/************端口初始化************/<BR>void Port_Init(void)<BR>{<BR>DDRB=0xFF;<BR>PORTB=0xF0;<BR>DDRA=0xFE; <BR>INTCR=0xC0;<BR>PEAR=0x00;<BR>DDRM=0xFB;<BR>}</P><P> </P><P>/************A/D初始化************/<BR>void AD_Init(void)<BR>{ buffer[5]=0x13;<BR>ATD0CTL2=0xC2;<BR>ATD0CTL3=0x0C;<BR>ATD0CTL4=0xE1; //采样时间为8微妙<BR>ATD0CTL5=0xA0;<BR>}</P><P>/**********AD复位***********/<BR>void RESET_AD(void)<BR>{<BR>ATD0CTL2=0x00;<BR>} <BR>/************IRQ中断***************/<BR>#pragma CODE_SEG NON_BANKED<BR>interrupt 6 void BEG_ADC() <BR>{ <BR>if(PORTA&0x01==0x01) //处于奇场时采集信号<BR> {LLLL++; //行数加1<BR> if(NEW_FIELD==0) //是否是新的奇场<BR> { C25LF++; //是则跳过30行<BR> if(C25LF<=30)<BR> { RESET_AD();<BR> NEW_FIELD=0;<BR> }<BR> else<BR> {RESET_AD();<BR> C25LF=0;<BR> SBEGIN=1; //已跳过30行则设置标志<BR> NEW_FIELD=1;<BR> }<BR> }<BR> else if(SBEGIN==1) <BR> { <BR>/***********隔10行采1行******************/<BR> if(C10L<=9) <BR> { RESET_AD();<BR> NEW_FIELD=1;<BR> C10L++;<BR> }<BR> else<BR> { RESET_AD();<BR> buffer<i>=0xEE; //设置行头标志<BR> S25L++; //记已采集的行数<BR> C10L=0;<BR> i++;<BR> NEW_FIELD=1;<BR> AD_Init(); //开AD中断<BR> }<BR> <BR> }<BR> }<BR>/***********隔10行采1行******************/<BR>else<BR> { i=0;<BR> C10L=0;<BR> S25L=0;<BR> NEW_FIELD=0;<BR> RESET_AD();<BR> LLLL=0;<BR> SBEGIN=0;<BR> }<BR>} <BR>/***********************AD中断转换***********/<BR>interrupt 22 void ADC_ISR()<BR>{ <BR> buffer<i>=ATD0DR0L; //存放AD转换后的数据<BR> if(S25L<=25)i++;<BR> else //采完25行则关外部中断及AD中断<BR> { INTCR=0x80;<BR> RESET_AD();<BR> LLLL=0;<BR> i=0;<BR> S25L=0;<BR> C10L=0;<BR> BUFFUL=1;<BR> SBEGIN=0;<BR> }<BR>}</P><P>#pragma CODE_SEG DEFAULT<BR>/**************************主程序*************/<BR> void main(void) <BR>{ <BR> LLLL=0;<BR> i=0;<BR> S25L=0;<BR> C10L=0;<BR> BUFFUL=0;<BR> SBEGIN=0;<BR> C25LF=0;<BR> NEW_FIELD=0;<BR> Port_Init();<BR> buffer[2]=0x1f;<BR> EnableInterrupts;<BR> while(BUFFUL=0);<BR> PORTB=0x11; <BR>}</P><P><BR> </P> |
|