原创 NTSC/PAL自动识别

2011-3-25 21:03 1570 4 6 分类: MCU/ 嵌入式

attachment download最近都在一个视频字符叠加的项目,做了个NTSC/PAL自动识别功能,发个demo程序和SCH,作个备份。因为有网络,找资料方便很多,感谢那些无私开源的人,他们是一群很可爱的人,他们应该得到更多理解和尊重。
#include <reg52.h>
#include <string.h>
#define uchar unsigned char


bit read_flag=0;
uchar int0_count;
uchar one_sec;
bit syst_flag;


void init_serialcomm(void)
{
 TMOD=0x20;
 TR1=1;
 TH1=0xfd;  //TH1=0xfa;  22.1184 MHz @9600;   TH1=0xfd; 11.0592 MHz
 TL1=0xfd;  //TL1=0xfa;  22.1184 MHz @9600;   TH1=0xfd; 11.0592 MHz
 SCON=0x50;
 EA=1;
 ES=1;
}
//向串口发送一个字符
void send_char_com(unsigned char ch)
{
    SBUF=ch;
    while(TI==0);
    TI=0;
}
//向串口发送一个字符串,strlen为该字符串长度
void send_string_com(unsigned char *str,unsigned int strlen)
{
    unsigned int k=0;
    do
    {
        send_char_com(*(str + k));
        k++;
    } while(k < strlen);
}
//串口接收中断函数
void serial () interrupt 4 using 3
{// uchar temp;
    if(RI)
    {
// temp=SBUF;
// send_char_com(temp);
    }
}


void init_ex()
{
 IT0=1;
 EX0=1; 
 RCAP2H =0x10; //赋T2的预置值0x1000,溢出30次就是1秒钟
 RCAP2L =0x00;
 ET2=1;    //打开定时器2中断 
 EA=1;
}


void Into() interrupt 0
{
 TR2=1;   //启动定时器
 int0_count++;
}


void syst()
{
 uchar syst_count,syst_a,syst_b,syst_c;
 if(one_sec)  //发现有时间溢出标记,进入处理
  {  
   one_sec=0;
   syst_count++;
   ET2=1;


   if(syst_count==1)
   {
   syst_a=int0_count;
   send_char_com(syst_a);   
   
   int0_count=0;
   }
   if(syst_count==2)
   {
   syst_b=int0_count;
   send_char_com(syst_b);      
   int0_count=0;
   }
   if(syst_count==3)
   {
   syst_c=int0_count;
   send_char_com(syst_c);      
   int0_count=0;
   }


   if((syst_b==0x19)&&(syst_c==0x19)) //0x19---即是25,50hz,pal
   { 
    send_string_com("pal ",4);
    send_char_com(0xaa);
   }
   if((syst_b==0x1e)&&(syst_c==0x1e)) //0x1e---即是30,60hz,ntsc
   { 
    send_string_com("ntsc ",5);
    send_char_com(0xbb);
   }


   if(syst_count>=3)
   { 
    ET2=0;
    EX0=0;
    int0_count=0;
   }   
  } 
}


//定时器2中断
timer2() interrupt 5 
{
 static uchar t;
 TF2=0;
 t++;
 if(t==15) //T2的预置值0x1000,溢出30次就是1秒钟,11.0592MHz
 {
  t=0;
  one_sec=1;//每次长时间的溢出,就置一个标记,以便主程序处理
  ET2=0;
 }
}


main()
{
 init_ex();  
    init_serialcomm();  //初始化串口   
    while(1)
    {
  syst();
    }
}

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户444315 2013-8-2 09:53

感谢分享

用户610474 2012-12-28 20:36

今天在看P制跟N制的自动识别,找到这个太好了,更容易理解
相关推荐阅读
我要评论
2
4
关闭 站长推荐上一条 /1 下一条