中级会员
- 积分
- 248
- 威望
- 134
- 贡献
- 64
- 兑换币
- 67
- 注册时间
- 2012-11-25
- 在线时间
- 25 小时
- 毕业学校
- ancai
|
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include <MC9S12XS128.h>
#define uchar unsigned char
#define uint unsigned int
uchar SampleFlag;
#define ROW 38
#define COLUMN 80
#define ROW_START 20
#define ROW_END 235
#define _NOP_()\
_asm(nop);\
_asm(nop);\
_asm(nop);\
_asm(nop);\
_asm(nop);\
_asm(nop);\
_asm(nop);
unsigned char Interval;
unsigned char THRESHOLD=80;
uchar Interval=4;//用来控制采集的行数的间隔
uchar Buffer[ROW][COLUMN];//porta口采集的数据
uchar Buffer_Temp[ROW][COLUMN]; //二值化的数据
uchar flag[241]={0};
uint mm=0;
//uint nn=0;
uint Line=0;
void PLL_Init(void)
{
CLKSEL=0x00; //48Mhz(总线)
PLLCTL_PLLON=1;
SYNR=0XC0 | 0X07;
//(48/8-1=0x05)
REFDV=0X80 | 0X01;
//预分频(16/(0x01+1)=8MHz)
POSTDIV=0X00;
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
while(0==CRGFLG_LOCK);//锁相环锁定
CLKSEL_PLLSEL=1;//选定外部时钟
}
void SCI_Init(void)
{
SCI0BD=417; //9600bps Baud Rate=BusClock/(16*SCIBD)
SCI0CR1=0; //正常8位模式,无奇偶校验
SCI0CR2=0X2C; //发送允许 接受中断允许
}
/**************************************************
** 函数名称: SCI_Read
** 功能描述: 从串口中读入一个字节数据
** 输 入:
** 输 出: 无
** 说明:
***************************************************/
uint SCI_Read()
{
if(SCI0SR1_RDRF == 1) //RDRF:接收数据就绪标志。当收到的字符已经在SCIDR中就绪时,RDRF置 1,
//顺次读取 SCISRl 和 SCIDR将会自动清除 RDRF。该位被清除后,必须等到 RxD
//线变为活动,然后重新变成空闲以后,IDLE位才会被再次置位,这一步不能省
{
SCI0SR1_RDRF=1;
return SCI0DRL;
}
}
/**************************************************
** 函数名称: SCI_Write
** 功能描述: 给串行口写一个字符数据
** 输 入: SendChar为写入字符
** 输 出: 无
** 说明:
***************************************************/
void SCI_Write(uchar SendChar)
{
while (!(SCI0SR1&0x80));
SCI0DRH=0;
SCI0DRL=SendChar;
}
void TIM_Init(void)
{
TIOS=0x00; //外部输入捕捉 0,1 通道
TCTL4=0x09; //通道0上升沿触发,通道 1 下降沿触发
TSCR1=0x80; //使能
TIE=0x03; //通道 0,1 中断使能
TFLG1=0xFF; //清中断标志位
}
/**************************************************
** 函数名称: 有效行使用初始化函数
** 功能描述: 对特定的使用行进行状态标识
** 输 入: 无
** 输 出: 无
** 说明:
***************************************************/
void Init_Lineflag(void)
{
uint i;
//实际位置 行标
for(i=100;i<=240;i++) //130~240 0~35
{
if(i%Interval==0)
flag[i]=1;
}
}
void Process()
{
unsigned char i,j;
for(i=0;i<ROW;i++)
{
for(j=0;j<COLUMN;j++)
{
if(Buffer[i][j]>THRESHOLD)
SCI_Write('1') ;
else SCI_Write('0') ;
}
SCI_Write(0x0D);
SCI_Write(0X0A);
}
}
void main(void)
{
PLL_Init();
TIM_Init();
SCI_Init();
DDRA=0x00;
Init_Lineflag();
EnableInterrupts;
for( ; ; )
{ Process();
_FEED_COP(); /* feeds the dog */
}
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 8 PT0_Interrupt() //每一行扫描中断
{
TFLG1_C0F=1;//已发生0通道输入捕捉有效动作
Line++;
if(SampleFlag==0)
return;
if(flag[Line]|| Line<ROW_START || Line>ROW_END)
{
Buffer[mm][0]=PORTA; _NOP_();
Buffer[mm][0]=PORTA; _NOP_();
Buffer[mm][0]=PORTA; _NOP_();
Buffer[mm][0]=PORTA; _NOP_();
Buffer[mm][0]=PORTA; _NOP_();
Buffer[mm][0]=PORTA; _NOP_();
Buffer[mm][0]=PORTA; _NOP_();
Buffer[mm][0]=PORTA; _NOP_();
Buffer[mm][0]=PORTA; _NOP_();
Buffer[mm][0]=PORTA; _NOP_();
Buffer[mm][0]=PORTA; _NOP_();
Buffer[mm][0]=PORTA; _NOP_();
Buffer[mm][1]=PORTA; _NOP_();
Buffer[mm][2]=PORTA; _NOP_();
Buffer[mm][3]=PORTA; _NOP_();
Buffer[mm][4]=PORTA; _NOP_();
Buffer[mm][5]=PORTA; _NOP_();
Buffer[mm][6]=PORTA; _NOP_();
Buffer[mm][7]=PORTA; _NOP_();
Buffer[mm][8]=PORTA; _NOP_();
Buffer[mm][9]=PORTA; _NOP_();
Buffer[mm][10]=PORTA; _NOP_();
Buffer[mm][11]=PORTA; _NOP_();
Buffer[mm][12]=PORTA; _NOP_();
Buffer[mm][13]=PORTA; _NOP_();
Buffer[mm][14]=PORTA; _NOP_();
Buffer[mm][15]=PORTA; _NOP_();
Buffer[mm][16]=PORTA; _NOP_();
Buffer[mm][17]=PORTA; _NOP_();
Buffer[mm][18]=PORTA; _NOP_();
Buffer[mm][19]=PORTA; _NOP_();
Buffer[mm][20]=PORTA; _NOP_();
Buffer[mm][21]=PORTA; _NOP_();
Buffer[mm][22]=PORTA; _NOP_();
Buffer[mm][23]=PORTA; _NOP_();
Buffer[mm][24]=PORTA; _NOP_();
Buffer[mm][25]=PORTA; _NOP_();
Buffer[mm][26]=PORTA; _NOP_();
Buffer[mm][27]=PORTA; _NOP_();
Buffer[mm][28]=PORTA; _NOP_();
Buffer[mm][29]=PORTA; _NOP_();
Buffer[mm][30]=PORTA; _NOP_();
Buffer[mm][31]=PORTA; _NOP_();
Buffer[mm][32]=PORTA; _NOP_();
Buffer[mm][33]=PORTA; _NOP_();
Buffer[mm][34]=PORTA; _NOP_();
Buffer[mm][35]=PORTA; _NOP_();
Buffer[mm][36]=PORTA; _NOP_();
Buffer[mm][37]=PORTA; _NOP_();
Buffer[mm][38]=PORTA; _NOP_();
Buffer[mm][39]=PORTA; _NOP_();
Buffer[mm][40]=PORTA; _NOP_();
Buffer[mm][41]=PORTA; _NOP_();
Buffer[mm][42]=PORTA; _NOP_();
Buffer[mm][43]=PORTA; _NOP_();
Buffer[mm][44]=PORTA; _NOP_();
Buffer[mm][45]=PORTA; _NOP_();
Buffer[mm][46]=PORTA; _NOP_();
Buffer[mm][47]=PORTA; _NOP_();
Buffer[mm][48]=PORTA; _NOP_();
Buffer[mm][49]=PORTA; _NOP_();
Buffer[mm][50]=PORTA; _NOP_();
Buffer[mm][51]=PORTA; _NOP_();
Buffer[mm][52]=PORTA; _NOP_();
Buffer[mm][53]=PORTA; _NOP_();
Buffer[mm][54]=PORTA; _NOP_();
Buffer[mm][55]=PORTA; _NOP_();
Buffer[mm][56]=PORTA; _NOP_();
Buffer[mm][57]=PORTA; _NOP_();
Buffer[mm][58]=PORTA; _NOP_();
Buffer[mm][59]=PORTA; _NOP_();
Buffer[mm][60]=PORTA; _NOP_();
Buffer[mm][61]=PORTA; _NOP_();
Buffer[mm][62]=PORTA; _NOP_();
Buffer[mm][63]=PORTA; _NOP_();
Buffer[mm][64]=PORTA; _NOP_();
Buffer[mm][65]=PORTA; _NOP_();
Buffer[mm][66]=PORTA; _NOP_();
Buffer[mm][67]=PORTA; _NOP_();
Buffer[mm][68]=PORTA; _NOP_();
Buffer[mm][69]=PORTA; _NOP_();
Buffer[mm][70]=PORTA; _NOP_();
Buffer[mm][71]=PORTA; _NOP_();
Buffer[mm][72]=PORTA; _NOP_();
Buffer[mm][73]=PORTA; _NOP_();
Buffer[mm][74]=PORTA; _NOP_();
Buffer[mm][75]=PORTA; _NOP_();
Buffer[mm][76]=PORTA; _NOP_();
Buffer[mm][77]=PORTA; _NOP_();
Buffer[mm][78]=PORTA; _NOP_();
Buffer[mm][79]=PORTA; _NOP_();
mm++;
}
}
/**************************************************
** 函数名称: PT1中断处理函数
** 功能描述: 场中断处理函数
** 输 入: 无
** 输 出: 无
** 说明:
***************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 9 PT1_Interrupt() //每一帧扫描中断
{
TFLG1_C1F=1;
TFLG1_C0F=1; //主定时器中断寄存器1对相应通道位清零
mm=0;
// nn=0;
Line=0;
SampleFlag=1;
}
|
|