智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 971|回复: 0
打印 上一主题 下一主题

求助~大家看看我的采集程序给点意见吧

[复制链接]

4

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
248
威望
134
贡献
64
兑换币
67
注册时间
2012-11-25
在线时间
25 小时
毕业学校
ancai
跳转到指定楼层
1#
发表于 2013-4-23 15:26:30 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
#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;
}

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-1-13 03:32 , Processed in 0.057858 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表