#include <hidef.h> #include <MC9S12XS128.h> /*************宏定义****************************/ #define uint unsigned int #define uchar unsigned char #define LINE_MAX 100 // 每行采集的点数,即列数 #define ROW_MAX 55 // 采集到的行数 /*************变量定义**************************/ uchar a,b,c,temp; uchar Image[ROW_MAX][LINE_MAX];//图像数据。 uchar row; //图像数组行数 uint row_count; uchar i; uchar j; uchar counter; /***************变量及数组初始化****************/ void InitVariable(void) { row=0; row_count=0; counter=0; } /*************主频设置**************************/ void Busclock(void) //72MHz { CLKSEL=0x00; PLLCTL_PLLON=1; SYNR=0xC0 | 0x08; REFDV=0xC0 | 0x01; POSTDIV=0x00; _asm(nop); _asm(nop); while(!(CRGFLG_LOCK==1)); CLKSEL_PLLSEL =1; } /*************定时器初始化**********************/ void InitEct(void) { TCTL4=0x09; //通道上升沿触发,通道下降沿触发 TSCR1=0x80; TIE_C1I = 1; //场中断使能 开 TIE_C0I = 0; //行中断使能 关 } /*************串口初始化*************************/ void InitSci(void) { SCI0CR1 =0x00; SCI0CR2 =0x2c; //enable Receive Full Interrupt,RX enable,Tx enable SCI0BD =0x1D5; //SCI0BDL=busclk/(16*SCI0BDL) //busclk 8MHz, 9600bps,SCI0BD=0x34 //busclk 16MHz, 9600bps,SCI0BD=0x68 //busclk 24MHz, 9600bps,SCI0BD=0x9C //busclk 32MHz, 9600bps,SCI0BD=0xD0 //busclk 40MHz, 9600bps,SCI0BD=0x106 //busclk 48MHz, 9600bps,SCI0BD=0x138 //busclk 56MHz, 9600bps,SCI0BD=0x16D //busclk 64MHz, 9600bps,SCI0BD=0x1A0 //busclk 72MHz, 9600bps,SCI0BD=0x1D5 } /**************发射端程序************************/ void SciTx(uchar text) { while (!(SCI0SR1&0x80)); SCI0DRH=0; SCI0DRL=text; } /*************I/O初始化*************************/ void InitIoport(void) { DDRA=0x00;//A口为输入口 DDRB=0xFF;//B口为输出口在指示中心位置 DDRM_DDRM0 = 1; DDRM_DDRM1 = 0; PTM_PTM0=0; asm(nop); asm(nop); } /**************延时******************************/ void Delay(int delay) { int i,j; for(i=0;i<delay;i++) {for(j=0;j<500;j++) asm nop; } } /**************求绝对值差************************/ uchar PlusAbsolute(uchar m,uchar n) { if(m>n) n=m-n; else n=n-m; return n; } /**************主函数*****************************/ void main() { DisableInterrupts; Busclock(); InitEct(); InitSci(); InitVariable(); InitIoport(); EnableInterrupts; for(;;){} Delay(4000); /* for(i=0;i<ROW_MAX;i++) { for(j=0;j<LINE_MAX;j++) { if(Image[j]<0x70) Image[j]=0xFF; else Image[j]=0x0; } } */ for(i=ROW_MAX-1;i>0;i--) for(j=LINE_MAX-20-1;j>19;j--) SciTx(Image[j]); } /**************行中断采集*************************/ #pragma CODE_SEG __NEAR_SEG NON_BANKED void interrupt 8 Port0_interrupt(void) { TFLG1=0x01; //清除行中断标志 row_count++; if(row_count%3==0) { for(i=0;i<41;i++) asm nop; for(i=0;i<LINE_MAX;i++) Image[row]=PORTA; row++; if(row==ROW_MAX) TIE_C0I = 0; } } /**********场中断处理******************************************/ #pragma CODE_SEG __NEAR_SEG NON_BANKED void interrupt 9 Port1_interrupt(void) { TFLG1=0x02; TIE_C0I = 1; //开行中断 row = 0; row_count=0; // if(counter==1) // TIE=0; // counter++; }
|