常驻嘉宾
- 积分
- 3094
- 威望
- 873
- 贡献
- 1877
- 兑换币
- 184
- 注册时间
- 2011-10-16
- 在线时间
- 172 小时
|
10贡献
本帖最后由 带着飞翔的翅膀 于 2012-4-4 11:47 编辑
- #include <hidef.h> /* common defines and macros */
- #include "derivative.h" /* derivative-specific definitions */
- #include <MC9S12XS128.h>
- #define ROW 37 //采集到的矩阵像素点 37*108
- #define COLUMN 108
- //#define THERSHOLD 0x20 //设置阈值为3
- unsigned char hang[]={26,28,30,32,34,36,38,40,43,46,49,52,
- 55,58,61,64,67, 72,77,83,89,95,101,107,113,119,
- 125,133,141,150,159,170,181,193,205,217,230
- }; //采集的行数
- //unsigned char Buffer_Image[ROW][COLUMN]; //缓冲矩阵
- unsigned char Image_data[ROW][COLUMN]={0}; //图像数据
- unsigned char VSYN_C=0;
- unsigned int m=0;
- unsigned int Line=0;
- //时钟初始化
- void PLL_Init(void)
- { CLKSEL=0x00; //时钟选择寄存器,选定时钟来自外部晶振,关闭锁相环
- PLLCTL_PLLON=1; // 锁相环电路打开
- SYNR=0x40 | 0x04; //设置锁相环参数 Fvco=2*Fosc*(SYNR+1)/(REFDIV+1)==80MHZ;
- REFDV=0x80 |0x01;
- POSTDIV=0; //Fvco=Fpll so Fbus=Fpll/2=40MHZ;
- _asm(nop); // 等待锁相环稳定
- _asm(nop);
- while(!(CRGFLG_LOCK)==1); // LOCK=1 标志时钟频率已经稳定
- CLKSEL_PLLSEL=1; //选定时钟来自锁相环
- }
- //定时器初始化
- void ECT_Init(void)
- { TIOS=0x00; //设置定时器通道0,1为输入捕捉
- TCTL4=0x09; //通道0捕捉上升沿,通道1捕捉下降沿
- TSCR1=0x80; //定时器使能
- TFLG1=0xFF; // 清除标志位
- TIE=0x02; // 开场中断,关闭行中断
-
- }
- //串口通信初始化
- void SCI_Init(void )
- { SCI0BD=(byte)40000000/16/9600; //波特率Baut rate= BUScolck/(16*SCI0BD)=9600bps
- SCI0CR1=0; //正常8位模式,无奇偶校验
- SCI0CR2=0x2c; //发送允许 接受中断允许
- }
- //串口传输程序
- void SCI_Trasmit(unsigned char Sendchar)
- { while(!(SCI0SR1&0x80)); //SCI0SR1_RDRF 标志位
- SCI0DRH=0;
- SCI0DRL=Sendchar;
- }
- //图像数据处理
- void Process()
- { unsigned char i,j;
- for(i=0;i<ROW;i++)
- { for(j=0;j<COLUMN;j++)
- {
- SCI_Trasmit(Image_data[i][j]);
- /*
- if(Image_data[i][j]>THERSHOLD)
- SCI_Trasmit('1');
- else
- SCI_Trasmit('0');
- */
- }
- }
- }
- void main(void)
- { PLL_Init();
- ECT_Init();
- SCI_Init();
- DDRB=0x00; // 设置A口数据方向为输入
- EnableInterrupts;
- for( ; ; )
- {
- if (VSYN_C==1)
- Process();
- for(;;);
-
- }
- }
- //行中断处理函数 PT0
- #pragma CODE_SEG NON_BANKED
- interrupt 8 void PT0_Interrupt(void)
- {
- // unsigned char t=0 ;
- TFLG1_C0F=1; //清除行中断标志位
- Line++;
- // t=;
- if(Line == hang[m])
- {
- Image_data[m][0]=PORTB;
- Image_data[m][1]=PORTB;
- Image_data[m][2]=PORTB;
- Image_data[m][3]=PORTB;
- Image_data[m][4]=PORTB;
- Image_data[m][5]=PORTB;
- Image_data[m][6]=PORTB;
- Image_data[m][7]=PORTB;
- Image_data[m][8]=PORTB;
- Image_data[m][9]=PORTB;
- Image_data[m][10]=PORTB;
- Image_data[m][11]=PORTB;
- Image_data[m][12]=PORTB;
- Image_data[m][13]=PORTB;
- Image_data[m][14]=PORTB;
- Image_data[m][15]=PORTB;
- Image_data[m][16]=PORTB;
- Image_data[m][17]=PORTB;
- Image_data[m][18]=PORTB;
- Image_data[m][19]=PORTB;
- Image_data[m][20]=PORTB;
- Image_data[m][21]=PORTB;
- Image_data[m][22]=PORTB;
- Image_data[m][23]=PORTB;
- Image_data[m][24]=PORTB;
- Image_data[m][25]=PORTB;
- Image_data[m][26]=PORTB;
- Image_data[m][27]=PORTB;
- Image_data[m][28]=PORTB;
- Image_data[m][29]=PORTB;
- Image_data[m][30]=PORTB;
- Image_data[m][31]=PORTB;
- Image_data[m][32]=PORTB;
- Image_data[m][33]=PORTB;
- Image_data[m][34]=PORTB;
- Image_data[m][35]=PORTB;
- Image_data[m][36]=PORTB;
- Image_data[m][37]=PORTB;
- Image_data[m][38]=PORTB;
- Image_data[m][39]=PORTB;
- Image_data[m][40]=PORTB;
- Image_data[m][41]=PORTB;
- Image_data[m][42]=PORTB;
- Image_data[m][43]=PORTB;
- Image_data[m][44]=PORTB;
- Image_data[m][45]=PORTB;
- Image_data[m][46]=PORTB;
- Image_data[m][47]=PORTB;
- Image_data[m][48]=PORTB;
- Image_data[m][49]=PORTB;
- Image_data[m][50]=PORTB;
- Image_data[m][51]=PORTB;
- Image_data[m][52]=PORTB;
- Image_data[m][53]=PORTB;
- Image_data[m][54]=PORTB;
- Image_data[m][55]=PORTB;
- Image_data[m][56]=PORTB;
- Image_data[m][57]=PORTB;
- Image_data[m][58]=PORTB;
- Image_data[m][59]=PORTB;
- Image_data[m][60]=PORTB;
- Image_data[m][61]=PORTB;
- Image_data[m][62]=PORTB;
- Image_data[m][63]=PORTB ;
- Image_data[m][64]=PORTB ;
- Image_data[m][65]=PORTB;
- Image_data[m][66]=PORTB;
- Image_data[m][67]=PORTB;
- Image_data[m][68]=PORTB;
- Image_data[m][69]=PORTB ;
- Image_data[m][70]=PORTB;
- Image_data[m][71]=PORTB;
- Image_data[m][72]=PORTB;
- Image_data[m][73]=PORTB;
- Image_data[m][74]=PORTB;
- Image_data[m][75]=PORTB;
- Image_data[m][76]=PORTB;
- Image_data[m][77]=PORTB;
- Image_data[m][78]=PORTB;
- Image_data[m][79]=PORTB;
- Image_data[m][80]=PORTB;
- Image_data[m][81]=PORTB;
- Image_data[m][82]=PORTB;
- Image_data[m][83]=PORTB;
- Image_data[m][84]=PORTB;
- Image_data[m][85]=PORTB;
- Image_data[m][86]=PORTB;
- Image_data[m][87]=PORTB;
- Image_data[m][88]=PORTB;
- Image_data[m][89]=PORTB;
- Image_data[m][90]=PORTB;
- Image_data[m][91]=PORTB;
- Image_data[m][92]=PORTB;
- Image_data[m][93]=PORTB;
- Image_data[m][94]=PORTB;
- Image_data[m][95]=PORTB;
- Image_data[m][96]=PORTB;
- Image_data[m][97]=PORTB;
- Image_data[m][98]=PORTB;
- Image_data[m][99]=PORTB;
- Image_data[m][100]=PORTB;
- Image_data[m][101]=PORTB;
- Image_data[m][102]=PORTB;
- Image_data[m][103]=PORTB;
- Image_data[m][104]=PORTB;
- Image_data[m][105]=PORTB;
- Image_data[m][106]=PORTB;
- Image_data[m][107]=PORTB;
- m++;
- }
- if(m==36)
- {
- VSYN_C++;
- }
- }
- //场中断处理函数
- #pragma CODE_SEG NON_BANKED
- interrupt 9 void PT1_interrupt(void)
- {
- TFLG1_C1F=1; //清除场同步中断
- TFLG1_C0F=1; //
- TIE=0x01; //进入一场后开行中断,关闭场中断
- Line=0; //初始化采集行的下标
- m=0;
- }
- /*#pragma CODE_SEG NON_BANKED
- interrupt 11 void PT3_interrupt(void)
- {
- unsigned char j;
- for(j=0;j<1000;j++);
-
-
- } */
- 这个程序进的了场中断,就是进不去行中断。谁能帮忙看下这个程序,感激不尽啊!![qq]1259273440[/qq]
复制代码
|
|