高级会员
- 积分
- 963
- 威望
- 435
- 贡献
- 438
- 兑换币
- 0
- 注册时间
- 2010-1-11
- 在线时间
- 45 小时
|
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//************ad图像采集并通过串口发给电脑显示程序****************//
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
#include <hidef.h> /* common defines and macros */
#include <MC9S12XS128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
/***********变量声明*******/
#define START_COW 25
#define MAX_COW 600
#define COLUMN_MAX 40
#define HIGH 50
#define WIDTH 40
#define COW_SPACE 8
unsigned char img[HIGH][WIDTH],img_temp,chang_flag=0;
unsigned int rel_cow,puls_data;
int i,j;
unsigned char del,count0,count1;
void dly_ms(int ms)
{
int ii,jj;
if (ms<1) ms=1;
for(ii=0;ii<ms;ii++)
for(jj=0;jj<5470;jj++); //32MHz--1ms
}
//--------------初始化函数----------------//
//*******总线时钟初始化************//
void PLL_Init(void) //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{ //锁相环时钟=2*16*(3+1)/(1+1)=64MHz
CLKSEL=0X00;
REFDV=1; //总线时钟=64/2=32MHz
SYNR=3;
POSTDIV=0X00;
asm(nop);
asm(nop);
while(!(CRGFLG&0x08));
CLKSEL=0x80; //选定锁相环时钟
}
//******AD初始化******//
void AD_Init(void)
{
ATD0CTL1=0X00; //8位精度,转换前不放电
ATD0CTL2=0x00; // 快速清零, 无等待模式, 禁止外部触发, 中断禁止
ATD0CTL3=0x88; // 右对齐无符号,转换序列长度为1, No FIFO, Freeze模式下继续转换
ATD0CTL4=0x00; // 为确定值 转换4个时钟, ATDClock=[BusClock*0.5]/[PRS+1]=0.83MHz;
// PRS=18,每隔约1.2us采集一点
ATD0CTL5=0x20; //单通道采样,持续采样,选择通道0
ATD0DIEN=0x0000; // 禁止数字输入
}
//********ECT输入捕捉中断接入***********//
void ECT23_Init(void)
{
//TSCR2=0x07; //禁止溢出中断,分频系数2,一个计数16us
TIOS_IOS2=0; //通道2为输入捕捉
TIOS_IOS3=0; //通道3为输入捕捉
TCTL4=0X90; //通道2上升沿捕捉行中断,通道3下降沿捕捉场中断;
TIE_C2I=1; //通道2输入捕捉中断允许
TIE_C3I=1; //通道3输入捕捉中断允许
TSCR1=0x80; //使能定时器
}
//********初始化SCI0************//
/*void Sci0Init()
{
SCI0BD=52; //9600bps Baud Rate=BusClock/(16*SCIBD)
SCI0CR1=0; //正常8位模式,无奇偶校验
SCI0CR2=0X2C; //发送允许 接受中断允许
} */
//**********写发送SCI数据*******//
/*void SciWrite(unsigned char sendchar)
{
while (!(SCI0SR1&0x80));//表明此时保持器数据为空,可以写入新数据
SCI0DRH=0;
SCI0DRL=sendchar;
} */
//**********图像发送函数*********/
/*void Send_img(void)
{
unsigned int i,j;
for(i=0;i<HIGH;i++)
for(j=0;j<WIDTH;j++)
{
if(ATD0STAT0_SCF==1){
// img_temp=ATD0DR0L;
img_temp=img[j];
SciWrite(img_temp);
}
}
}*/
//*****************主函数*******************//
void main(void) {
/* put your own code here */
PLL_Init();
// Sci0Init();
//Pacn_init();
AD_Init();
ECT23_Init();
DDRB=0XFF;
// Ect0_init();
EnableInterrupts;
for(;;) {
PORTB=img[0][10];
//if(chang_flag==1)
// {
// chang_flag=0;
/* for(j=0;j<COLUMN_MAX;j++)
{
while(ATD0STAT0_SCF==0);
img[j]=ATD0DR0L;
// SciWrite(img[j]);
} */
// SciWrite(0X55);
/* i++;
if(i==50)i=0;
// TIE_C2I=1;*/
// }
_FEED_COP();} /* wait forever */
/* please make sure that you never leave this function */
}
//+++++++++++++++中断函数+++++++++++//
#pragma CODE_SEG NON_BANKED
void interrupt 10 Timer2_cow(void) //行中断
{ TIE_C3I=0;
TFLG1_C2F=1; //清中断标志位
rel_cow++;
for(del=0;del<3;del++)
{
asm(nop);
}//消除行效应
if((rel_cow>START_COW)&&(rel_cow<=MAX_COW))
{
if(rel_cow%COW_SPACE==0) //间隔10后取行数据
{
for(j=0;j<COLUMN_MAX;j++)
{
while(ATD0STAT0_SCF==0);
img[j]=ATD0DR0L;
}
i++;
}
}TIE_C3I=1;
}
void interrupt 11 timer3_chang(void) //场中断到来
{
TIE_C2I=0;
TFLG1_C3F=1;
rel_cow=0;
i=0;
chang_flag=1;
count0++;
TIE_C2I=1;
}
帮忙看看这个程序,为什么下载到xs128后,单击绿色箭头运行,只一会儿就停住了,在点还是这样?为什么呢?
|
|