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

📄 38k.lst

📁 51 红外发送程序 带仿真 数据格式可以修改程序来实现
💻 LST
字号:
C51 COMPILER V6.12  38K                                                                    01/01/2003 15:27:07 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE 38K
OBJECT MODULE PLACED IN .\38k.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\38k.c DEBUG OBJECTEXTEND

stmt level    source

   1          /*******************************************************
   2          38K载波发送程序 T1产生38K载波 T0用于精确定时           *
   3          数据格式  起始位(9ms 高 4.5ms 低)+8位数据(0.560ms 高  *
   4          0.565 低:0    1.685ms 高 0.565ms 低  :1)               *
   5          TR1控制载波发送        *
   6          write by wisdom           2008-8                       *
   7          *******************************************************/
   8          #include <AT89X51.h> 
   9          
  10          #define IR_OUT P3_4
  11          #define _MHz_ 12
  12          
  13          
  14          //T1 13us产生一次中断 用于产生38K载波
  15          //T0 方式1 16位  用于定时
  16          void Init_Timer(void)
  17          {
  18   1      	TMOD=0x21;		//T0 mode 1      T1 mode 2 
  19   1      
  20   1      	TH1=256-(1000*_MHz_/38.0/12)/2+0.5;
  21   1      	TL1=TH1;
  22   1      
  23   1      	ET1=1;
  24   1      	EA=1;
  25   1      }
  26          
  27          //发送引导码  发送方:9ms高电平 4.5ms低电平
  28          void Send_Start_Bit(void)    //TR1的值=发送的电平
  29          {
  30   1      //9ms 0
  31   1      		TH0=(65536-9000/12*_MHz_)/256; 
  32   1      		TL0=(65536-9000/12*_MHz_)%256;
  33   1      		TR0=1;
  34   1      		TR1=0;
  35   1      
  36   1      		while(!TF0);
  37   1      
  38   1      		TR1=0;
  39   1      		TF0=0;
  40   1      
  41   1      		IR_OUT=0;
  42   1      //4.5ms 1
  43   1      		TH0=(65536-4500/12*_MHz_)/256; 
  44   1      		TL0=(65536-4500/12*_MHz_)%256;
  45   1      		TR0=1;
  46   1      		TR1=1;
  47   1      
  48   1      		while(!TF0);
  49   1      
  50   1      		TR1=0;
  51   1      		TF0=0;
  52   1      
  53   1      		IR_OUT=0;
  54   1      }
  55          
C51 COMPILER V6.12  38K                                                                    01/01/2003 15:27:07 PAGE 2   

  56          //发送0 
  57          void Send_Bit_0(void)
  58          {
  59   1      //0.565ms 0
  60   1      		TH0=(65536-565/12*_MHz_)/256; 
  61   1      		TL0=(65536-565/12*_MHz_)%256;
  62   1      		TR0=1;
  63   1      		TR1=0;
  64   1      
  65   1      		while(!TF0);
  66   1      
  67   1      		TR1=0;
  68   1      		TF0=0;
  69   1      
  70   1      		IR_OUT=0;
  71   1      //0.565ms 1
  72   1      		TH0=(65536-565/12*_MHz_)/256; 
  73   1      		TL0=(65536-565/12*_MHz_)%256;
  74   1      		TR0=1;
  75   1      		TR1=1;
  76   1      
  77   1      		while(!TF0);
  78   1      
  79   1      		TR1=0;
  80   1      		TF0=0;
  81   1      
  82   1      		IR_OUT=0;
  83   1      }
  84          
  85          //发送1
  86          void Send_Bit_1(void)
  87          {
  88   1      //1.685ms 0
  89   1      		TH0=(65536-1685/12*_MHz_)/256; 
  90   1      		TL0=(65536-1685/12*_MHz_)%256;
  91   1      		TR0=1;
  92   1      		TR1=0;
  93   1      
  94   1      		while(!TF0);
  95   1      
  96   1      		TR1=0;
  97   1      		TF0=0;
  98   1      
  99   1      		IR_OUT=0;
 100   1      		
 101   1      //0.565ms 1
 102   1      		TH0=(65536-565/12*_MHz_)/256; 
 103   1      		TL0=(65536-565/12*_MHz_)%256;
 104   1      		TR0=1;
 105   1      		TR1=1;
 106   1      
 107   1      		while(!TF0);
 108   1      
 109   1      		TR1=0;
 110   1      		TF0=0;
 111   1      
 112   1      		IR_OUT=0;
 113   1      }
 114          
 115          //发送一字节 8位
 116          void Send_Char(unsigned char ir_data)
 117          {
C51 COMPILER V6.12  38K                                                                    01/01/2003 15:27:07 PAGE 3   

 118   1      unsigned char i,j;
 119   1      	j=ir_data;
 120   1      	Send_Start_Bit();
 121   1      	for(i=0;i<8;i++)
 122   1      	{
 123   2      		if(j&0x80)
 124   2      			Send_Bit_1();
 125   2      		else
 126   2      			Send_Bit_0();
 127   2      		j<<=1;
 128   2      	}
 129   1      
 130   1      
 131   1      }
 132          
 133          void Delay10ms(void)
 134          {
 135   1      		TH0=(65536-10000/12*_MHz_)/256; 
 136   1      		TL0=(65536-10000/12*_MHz_)%256;
 137   1      		TR0=1;
 138   1      		while(!TF0);
 139   1      		TF0=0;
 140   1      }
 141          
 142          void main(void)
 143          {
 144   1      	Init_Timer();
 145   1      	while(1)
 146   1      	{
 147   2      		Send_Char(0x55);
 148   2      		Delay10ms();
 149   2      	}
 150   1      }
 151          
 152          
 153          //-----------------------------------------------------------------------
 154          //T1 ISR
 155          void T1_ISR(void) interrupt TF1_VECTOR using 1
 156          {
 157   1      	IR_OUT=!IR_OUT;
 158   1      }
 159          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    187    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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