⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pt2262_decode.lst

📁 pt2262芯片解码,at89c51的,如果要用到产品用,需再增加一些软件滤波来提高其可靠性,供学习用,
💻 LST
📖 第 1 页 / 共 3 页
字号:
 502          ** 修改人:
 503          ** 日 期:
 504          **------------------------------------------------------------------------------------------------------
 505          ********************************************************************************************************/
 506          
 507          void	error() 
 508          {
 509   1      	
 510   1      	
 511   1      } 
 512          
 513          /*********************************************************************************************************
 514          ** 函数名称: time0interrupt
 515          ** 功能描述: 定时器0中断(中断时间为250us),检查是否irpin的信号,250us中断一次,ir没有用三极管,
 516          ** 			 直接接一个上拉电阻,接收到的波形出手册上的是反相的
 517          ** 输 入: 无
 518          ** 输 出: 无
 519          ** 全局变量: 
 520          ** 调用模块: 
 521          **
 522          ** 作 者: gl
 523          ** 日 期: 2007年01月15日
 524          **-------------------------------------------------------------------------------------------------------
 525          ** 修改人: gl
 526          ** 日 期: 2007年01月21日
 527          **------------------------------------------------------------------------------------------------------
 528          ********************************************************************************************************/
 529          
 530          void	time0interrupt() interrupt 1 using 2
 531          {
 532   1      
 533   1      	if(IRPIN)		
 534   1      	{
 535   2      
 536   2      		if(IRPINOLDFG)				//1--->1//不变为高
 537   2      		{
 538   3      			hightcount++;
 539   3      			lowcount = 0;
 540   3      			if(hightcount > _124AMAX)
 541   3      			{
 542   4      				_synbitokFG = 0;	//没有红外信号
 543   4      				hightcount     = 1;
 544   4      				lowcount       = 0;
 545   4      				hightcountold  = 0;
 546   4      				lowcountold    = 0;
 547   4      				bitcount1      = 0;
 548   4      				IRPINOLDFG     = 1;
 549   4      				ircode = 0;	
C51 COMPILER V6.12  PT2262_DECODE                                                          01/23/2007 00:22:16 PAGE 10  

 550   4      			}
 551   3      		}
 552   2      		else
 553   2      		{						//0--->1,要测
 554   3      			lowcountold = lowcount;
 555   3      			lowcount = 0;			
 556   3      			IRPINOLDFG = 1;	
 557   3      			hightcount = 1;
 558   3      		}
 559   2      
 560   2      	}
 561   1      	else
 562   1      	{
 563   2      		    				//有红外信号
 564   2      		if(IRPINOLDFG)		//1--->0
 565   2      		{
 566   3      
 567   3      			hightcountold = hightcount;
 568   3      			hightcount = 0;
 569   3      			IRPINOLDFG = 0;
 570   3      			lowcount = 1;
 571   3      
 572   3      			if((lowcountold >= _4AMIN && lowcountold < _4AMAX) && 
 573   3      				(hightcountold > _124AMIN && hightcount < _124AMAX))//1--->0
 574   3      			{
 575   4      				_synbitokFG = 1;			//检测到同步码
 576   4      				hightcountold  = 0;
 577   4      				lowcountold    = 0;
 578   4      				bitcount1      = 0;
 579   4      				ircode = 0;
 580   4      				
 581   4      			}
 582   3      			else
 583   3      			{
 584   4      				if(_synbitokFG)
 585   4      				{
 586   5      					if((lowcountold >= _4AMIN && lowcountold < _4AMAX) && 
 587   5      						hightcountold >= _12AMIN && hightcountold <_12AMAX)
 588   5      					{		
 589   6      						ircode &= 0xfffffffe;		//0					
 590   6      					}
 591   5      					else
 592   5      					{
 593   6      						if(lowcountold > _12AMIN && lowcountold < _12AMAX && 
 594   6      							hightcountold >= _4AMIN && hightcountold <_4AMAX)
 595   6      						{							//1
 596   7      							ircode |= 0x00000001;	//1
 597   7      						}
 598   6      					}
 599   5      
 600   5      					if(++bitcount1 <= 24)
 601   5      					{
 602   6      						ircode <<= 1;				//32位左移,低24位有效
 603   6      					}
 604   5      					if(bitcount1 == 24)
 605   5      					{
 606   6      
 607   6      						bitcount1 = 0;	//现在为同步位的低电平(与data上是反的,
 608   6      										//即data中同步位高电平)
 609   6      						ircode >>= 1; 	//左移进多移了一位
 610   6      						ircode &= 0x00ffffff;
 611   6      						i = 0;
C51 COMPILER V6.12  PT2262_DECODE                                                          01/23/2007 00:22:16 PAGE 11  

 612   6      						while(ircode != ircodetable[i])
 613   6      						{
 614   7      							if(i >= KEYS)
 615   7      							{
 616   8      								//i = 4;
 617   8      								ircode = 0;
 618   8      								break;
 619   8      												//出错处理
 620   8      							}
 621   7      							i++;
 622   7      						}
 623   6      						Count = ircode;
 624   6      						keys = i;
 625   6      						_synbitokFG = 0;
 626   6      						have_count++;
 627   6      					}
 628   5      				}
 629   4      			}
 630   3      		}
 631   2      		else
 632   2      		{
 633   3      			lowcount++;							//0--->0//不变为低	
 634   3      			hightcount = 0;
 635   3      		}		
 636   2      
 637   2      	}
 638   1      	
 639   1      	if(++_03UScount >= 2000)	//计0.5S
 640   1      	{
 641   2      		_03UScount = 0;
 642   2      		_1SFG = 1;		
 643   2      	
 644   2      	}
 645   1      /*
 646   1      								//这里为实时性要求高的任务,这部分执行时间最好不要太长
 647   1      */
 648   1      } 
 649          
 650          /*********************************************************************************************************
 651          ** 函数名称: main
 652          ** 功能描述: 主程序
 653          ** 输 入: 无
 654          ** 输 出: 无
 655          ** 全局变量: 
 656          ** 调用模块: 
 657          **
 658          ** 作 者: gl
 659          ** 日 期: 2007年01月15日
 660          **-------------------------------------------------------------------------------------------------------
 661          ** 修改人: gl
 662          ** 日 期: 2007年01月15日
 663          **------------------------------------------------------------------------------------------------------
 664          ********************************************************************************************************/
 665          void main()
 666          {	
 667   1      	unsigned char procylce = 0;
 668   1      
 669   1      	init();
 670   1      
 671   1          while(1)
 672   1      	{
 673   2      		if(++procylce > TASKS)	//TASKS为时间片里的任数
C51 COMPILER V6.12  PT2262_DECODE                                                          01/23/2007 00:22:16 PAGE 12  

 674   2      		{
 675   3      			procylce = 1;
 676   3      		}
 677   2      		switch(procylce)		//任务时间片处理
 678   2      		{
 679   3      			case 1 :			//任务1:读键
 680   3      			{
 681   4      				KeyScan();
 682   4      
 683   4      				break;
 684   4      			}
 685   3      
 686   3      			case 2 :			//任务2
 687   3      			{
 688   4      				Display();
 689   4      				break;
 690   4      			}
 691   3      
 692   3      			case 3 :			//任务3
 693   3      			{
 694   4      				GetAd();
 695   4      				break;
 696   4      			}
 697   3      
 698   3      			case 4 :			//任务4
 699   3      			{
 700   4      				function1();
 701   4      				break;
 702   4      			}
 703   3      
 704   3      			case 5 :			//任务5
 705   3      			{
 706   4      				
 707   4      				break;
 708   4      			}
 709   3      
 710   3      			case 6 :			//任务6
 711   3      			{
 712   4      				
 713   4      				break;
 714   4      			}
 715   3      
 716   3      			case 7 :			//任务7
 717   3      			{
 718   4      				
 719   4      				break;
 720   4      			}
 721   3      
 722   3      			case 8 :			//任务8
 723   3      			{
 724   4      				time();
 725   4      				break;
 726   4      			}
 727   3      			default :
 728   3      			{
 729   4      				error();		//出错处理
 730   4      			}
 731   3      		
 732   3      		}
 733   2      /*
 734   2      								//这里为实时性要求高的任务
 735   2      */
C51 COMPILER V6.12  PT2262_DECODE                                                          01/23/2007 00:22:16 PAGE 13  

 736   2      
 737   2      	}
 738   1      }
 739          /*********************************************************************************************************
 740          **                            End Of File
 741          ********************************************************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1500    ----
   CONSTANT SIZE    =    193    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     78      21
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -