📄 remote.lst
字号:
C51 COMPILER V7.00 REMOTE 03/25/2005 11:05:54 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE REMOTE
OBJECT MODULE PLACED IN remote.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE remote.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*********************************************************************/
2 // remote.c
3 // 学习型遥控器
4 // 使用keil c51 2004.10.12
5 /*********************************************************************/
6 //使用AT89C52单片机,12MHZ晶振,
7 //
8 //#pragma src(E:\remote.asm)
9 #include "reg51.h"
10 #include "intrins.h" //_nop_();延时函数用
11 //
12 #define uchar unsigned char
13 #define uint unsigned int
14 //
15 sbit studylamp=P1^6; //学习状态指示灯
16 sbit lamp=P1^7; //发射指示灯
17 sbit studykey=P3^2; //学习键(中断口)
18 sbit remotein=P3^4; //遥控信号输入口
19 sbit remoteout=P3^5; // 遥控输出口
20 sbit txkey=P1^0 ; //发射键
21 //
22 //
23 uint i,j,m=255,n,k,s;
24 uchar idata remotedata[206];//存肪冲宽度数据用
25 uint head; //存起始位用
26 uint remdata;
27 //
28 //
29 ////
30 /*********1毫秒延时程序**********/
31 delay1ms(uint t)
32 {
33 1 for(i=0;i<t;i++)
34 1 for(j=0;j<120;j++)
35 1 ;
36 1 }
37 //
38 //
39 /***********初始化函数**********/
40 clearmen()
41 {
42 1 studylamp=0; //关学习灯
43 1 lamp=0; //关发射指示
44 1 remoteout=0; //关遥控输出
45 1 remotein=1; //
46 1 for(i=0;i<206;i++) //清内存
47 1 {remotedata[i]=0x00;}
48 1 IE=0x00;
49 1 IP=0x01;
50 1 TMOD=0x22; //8位自动重装模式
51 1 PCON=0X00;
52 1 TH1=0xf3; //40KHZ初值
53 1 TL1=0xf3;
54 1 IT0=1;
55 1 EX0=1; //外中断允许
C51 COMPILER V7.00 REMOTE 03/25/2005 11:05:54 PAGE 2
56 1 EA=1; //开总中断
57 1 }
58 //
59 //
60 /**********键功能函数************/
61 keywork()
62 {
63 1 if(txkey==0)
64 1 {
65 2 while(txkey==0); //等待键释放
66 2 ET1=1;TR1=1; //发起始位
67 2 for(i=head;i>0;i--){;}
68 2 remoteout=0;ET1=0;TR1=0;
69 2 n=0;
70 2 while(1)
71 2 {
72 3 if(remotedata[n]==0x00){delay1ms(10);break;}//数据为0结束
73 3 for(i=remotedata[n];i>0;i--){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
74 3 lamp=~lamp;n++;//偶地址不发脉冲
75 3 //
76 3 ET1=1;TR1=1; //奇地址发调制脉冲
77 3 for(i=remotedata[n];i>0;i--){;}
78 3 remoteout=0;ET1=0;TR1=0;n++;
79 3 }
80 2 }
81 1 }
82 //
83 //
84 /***********主函数***************/
85 main()
86 {
87 1 clearmen(); //初始化
88 1 while(1)
89 1 {
90 2 keywork(); //按键扫描
91 2 }
92 1 }
93 //
94 //
95 /*********40KHZ发生器***********/
96 //定时中断T1
97 void time_intt1(void) interrupt 3
98 {
99 1 remoteout=~remoteout;
100 1 }
101 //
102 //
103 /***********学习函数 ***********/
104 //外中断0
105 void intt0(void) interrupt 0
106 {
107 1 ET1=0;TR1=0;EX0=0;EA=0;
108 1 head=0;studylamp=1;lamp=0;
109 1 while(studykey==0); //等待键释放
110 1 while(remotein==1); //等待遥控码输入
111 1 head=0; //读入起始位
112 1 while(remotein==0){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
-;_nop_();_nop_();_nop_();_nop_();head++;}
113 1 n=0;remdata=0x0000;
114 1 while(1)
115 1 {
116 2 while(remotein==1){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
C51 COMPILER V7.00 REMOTE 03/25/2005 11:05:54 PAGE 3
-_nop_();_nop_();_nop_();_nop_();_nop_();remdata++;}
117 2 if(remdata>m) //高电平>5毫秒退出
118 2 {remotedata[n]=0x00;EX0=1;EA=1;goto end;}
119 2 remotedata[n]=remdata;n++; //存高电平脉宽数据
120 2 remdata=0x0000; //脉宽计数器清零
121 2 while(remotein==0){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_no
-p_();_nop_();_nop_();_nop_();_nop_();remdata++;} //低电平计数
122 2 remotedata[n]=remdata;n++;remdata=0x00;//存低电平脉宽数据
123 2 }
124 1 end: lamp=1;studylamp=0;
125 1 }
126 //
127 //*********************结束**************************//
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 486 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 ----
IDATA SIZE = 206 ----
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 + -