📄 red_tran.lst
字号:
C51 COMPILER V7.50 RED_TRAN 06/19/2007 08:00:05 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE RED_TRAN
OBJECT MODULE PLACED IN red_tran.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE red_tran.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /****************************************************************************************************/
2 #include <REG2051.H>
3 /****************************************************************************************************/
4 //端口定义
5 sbit led =P1^6; //指示灯
6 sbit wave_bit=P1^7; //红外载波输出端
7 sbit key_1 =P3^2; //按键一
8 sbit key_2 =P3^3; //按键二(高级按键)
9 /****************************************************************************************************/
10 //标志位及全局变量
11 bit key1_bit=0; //按键1(普通用户)标志位
12 bit key2_bit=0; //按键2(高级用户)标志位
13 unsigned char normal_user_code[3]={0x55,0x03,0xaa}; //普通用户红外代码
14 unsigned char senior_user_code[3]={0x00}; //高级用户红外代码
15 /****************************************************************************************************/
16 //函数名称:ini_51
17 //函数功能:对51单片机的初始状态进行设置,供监控程序调用
18 //入口参数:无
19 //出口参数:无
20 //****备注:本函数中对51单片机初始状态进行设置的有:SCON,T0,T1,INT0,INT1
21 void ini_51(void)
22 {
23 1 wave_bit=0; //初始状态中不产生载波
24 1 PCON = PCON&0x7f; //取消波特率倍增位
25 1 SCON = 0x40; //串口工作在模式1
26 1 TMOD = 0x22; //T0,T1均工作在自重装的方式下
27 1 TL0 = 0xf4; //T0产生40KHz载波
28 1 TH0 = 0xf4;
29 1 TL1 = 0xe8; //波特率为1200
30 1 TH1 = 0xe8;
31 1 ET0 = 1 ; //允许T0中断
32 1 EX0 = 1 ; //允许外部中断0中断
33 1 EX1 = 1 ; //允许外部中断1中断
34 1 EA = 1 ; //开中断
35 1 TR1 = 1 ; //启动定时器1
36 1 }
37 /****************************************************************************************************/
38 //函数名称:t0_sev
39 //函数功能:定时器0中断服务程序
40 //入口参数:无
41 //出口参数:无
42 //****备注:用于产生40KHz载波
43 void t0_sev(void) interrupt 1
44 {
45 1 wave_bit=!wave_bit; //在单片机模拟载波的端口上产生40KHz的载波
46 1 }
47 /****************************************************************************************************/
48 //函数名称:int0_sev
49 //函数功能:外部中断0的中断服务函数
50 //入口参数:无
51 //出口参数:无
52 //****备注:用来将按键1(普通用户)标志位置位
53 void int0_sev(void) interrupt 0
54 {
55 1 EA=0;
C51 COMPILER V7.50 RED_TRAN 06/19/2007 08:00:05 PAGE 2
56 1 key1_bit=1; //置按键1(普通用户)位
57 1 EA=1;
58 1 }
59 /****************************************************************************************************/
60 //函数名称:int1_sev
61 //函数功能:外部中断1的中断服务函数
62 //入口参数:无
63 //出口参数:无
64 //****备注:用来将按键2(高级用户)标志位置位
65 void int1_sev(void) interrupt 2
66 {
67 1 EA=0;
68 1 key2_bit=1; //置按键2(高级用户)位
69 1 EA=1;
70 1 }
71 /****************************************************************************************************/
72 //函数名称:delay
73 //函数功能:软件产生延迟时间
74 //入口参数:具体需要延时时间的参数
75 //出口参数:无
76 //****备注:无
77 void delay(unsigned int N)
78 {
79 1 unsigned int i;
80 1 for(i=0;i<N;i++);
81 1 }
82 /****************************************************************************************************/
83 //函数名称:uart_tran
84 //函数功能:串口数据发送
85 //入口参数:指向地址的指针
86 //出口参数:无
87 //****备注:无
88 void uart_tran(unsigned char *p)
89 {
90 1 SBUF=*p; //发送数据
91 1 while(TI==0) //未发送完成,等待
92 1 {;}
93 1 if(TI) //发送完成
94 1 {
95 2 TI=0; //清发送中断标志位
96 2 }
97 1 }
98 /****************************************************************************************************/
99 //函数名称:key1_manage
100 //函数功能:按键1(普通用户)处理程序
101 //入口参数:无
102 //出口参数:无
103 //****备注:无
104 void key1_manage(void)
105 {
106 1 unsigned char i,j;
107 1 unsigned char start_byte=0x55; //数据包的开始字节,用于同步数据的传送
108 1 unsigned char end_byte=0xaa; //数据包的结束字节,用于结束数据的传送
109 1 normal_user_code[0]=start_byte;
110 1 normal_user_code[2]= end_byte;
111 1 led=0; //点亮指示灯
112 1 for(j=0;j<3;j++) //按键一次发送三次
113 1 {
114 2 for(i=0;i<3;i++)
115 2 {
116 3 EA =1; //允许中断,制造载波
117 3 TR0=1; //启动T0,制造载波
C51 COMPILER V7.50 RED_TRAN 06/19/2007 08:00:05 PAGE 3
118 3 uart_tran(normal_user_code+i); //一次发送三个字节
119 3 TR0=0; //一个字节的数据发送完毕,停止载波的制造
120 3 EA =0; //关中断,避免按键中断的触发
121 3 wave_bit=0; //禁止红外的输出
122 3 }
123 2 delay(1500); //延时约30MS
124 2 }
125 1 led=1; //动作完毕后,关闭指示灯
126 1 }
127 /****************************************************************************************************/
128 //函数名称:key2_manage
129 //函数功能:按键2(普通用户)处理程序
130 //入口参数:无
131 //出口参数:无
132 //****备注:无
133 void key2_manage(void)
134 {
135 1 ;
136 1 }
137 /****************************************************************************************************/
138 //函数名称:main
139 //函数功能:监控程序
140 //入口参数:无
141 //出口参数:无
142 //****备注:无
143 void main(void)
144 {
145 1 ini_51();
146 1 while(1)
147 1 {
148 2 if(key1_bit)
149 2 {
150 3 EA=0; //关中断,禁止按键的再次中断
151 3 key1_bit=0; //清按键1(普通用户)标志位
152 3 delay(1000); //延时20MS左右
153 3 if(key_1==0) //若此时按键1(普通用户)的状态仍为0,表示确实有键按下
154 3 {
155 4 while(key_1==0)
156 4 {;} //在按键松开前一直等待
157 4 key1_manage(); //在按键松开后即执行按键相应的处理程序
158 4 }
159 3 else {break;} //无键按下,空动作
160 3 EA =1; //一次按键的动作执行完毕,开中断等待下次中断的到来
161 3 }
162 2 if(key2_bit)
163 2 {
164 3 key2_bit=0; //清按键2(高级用户)标志位
165 3 }
166 2 }
167 1 }
168 /****************************************************************************************************/
169
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 176 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 1
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
C51 COMPILER V7.50 RED_TRAN 06/19/2007 08:00:05 PAGE 4
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -