📄 38k.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 + -