📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 12/03/2004 10:33:36 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <REG51.H>
2
3 #define F_CPU 11059200 //11.0592Mhz
4 #define UART_BAND_RATE 9600 // 9600 band
5
6 typedef unsigned char uint8_t;
7 //typedef signed char int8_t;
8 typedef unsigned int uint16_t;
9 //typedef signed int int16_t;
10 typedef unsigned long uint32_t;
11 //typedef signed long int32_t;
12
13 //接收数据
14 uint8_t receive_start,receive_number=0,bus_changed;
15 uint8_t receive_data[100];
16
17 uint8_t *uart_data_ptr;
18 uint8_t uart_counter;
19
20 void sei(void)
21 {
22 1 EA = 1;
23 1 }
24 /*
25 void cli(void)
26 {
27 EA = 0;
28 }
29 */
30
31 void uart_init(void)
32 /* initialize uart */
33 {
34 1 // TH1 = 256-((F_CPU*(SMOD+1))/(384*UART_BAND_RATE));//mode 1 baud (SMOD=0 OR 1)
35 1
36 1 SCON = 0x50; // mode 1: 8-bit UART, enable receiver
37 1 TMOD |= 0x20; // timer 1 mode 2: 8-Bit reload
38 1 PCON |= 0x80; //SMOD=1,baud*2
39 1 TH1 = 0xfA; // 11.0592M,value 9600 baud
40 1 TR1 = 1; // timer 1 run
41 1 ES = 1; // UART INTERRUPT open
42 1
43 1 }
44
45 void delay(uint8_t delay_time)
46 {
47 1 uint8_t i,j,k;
48 1 for(i=0;i<255;i++)
49 1 {
50 2 for(j=0;j<200;j++)
51 2 {
52 3 for(k=0;k<delay_time;k++)
53 3 ;
54 3
55 3 }
C51 COMPILER V7.06 MAIN 12/03/2004 10:33:36 PAGE 2
56 2 }
57 1 }
58
59 void uart_isr(void) interrupt 4
60 {
61 1 if (TI)
62 1 { // 输出中断
63 2 TI = 0;
64 2 uart_data_ptr++;
65 2 if (--uart_counter)
66 2 {
67 3 SBUF = *uart_data_ptr;
68 3 }
69 2 }
70 1 if (RI)
71 1 {//接收中断
72 2 uint8_t receive;
73 2 RI = 0;
74 2 receive = SBUF;
75 2 /* /////////////////////// 接收协议:开始,长度receive_data[1],没结束
76 2 if ((receive==0xAA)&&(receive_number==0)) receive_start=1;
77 2 if (receive_start==1)
78 2 {
79 2 receive_data[receive_number]=receive;
80 2 receive_number++;
81 2 }
82 2 if(receive_number == (receive_data[1]+2))//receive_data[1]存放有效数据的长度
83 2 {
84 2 receive_start=receive_number=0;
85 2 bus_changed=1;
86 2 }
87 2 */
88 2 /////////////////////////接收协议:开始,结束,没长度
89 2 if ((receive==0xDD)&&(receive_number==0)) receive_start=1;
90 2 if (receive_start==1)
91 2 {
92 3 receive_data[receive_number]=receive;
93 3 receive_number++;
94 3 }
95 2 if ((receive==0xEE)&&(receive_start==1)&&(receive_number>1))
96 2 {
97 3 receive_start=0;
98 3 bus_changed=1;
99 3 }
100 2 /////////////////////////
101 2
102 2 }
103 1 }
104
105
106
107 void uart_send(uint8_t *p,uint8_t size)
108 /* send buffer <buf> to uart */
109 {
110 1 uart_data_ptr = p;
111 1 uart_counter=size;
112 1 TI = 0;
113 1 SBUF = *uart_data_ptr;
114 1
115 1 }
116
117
C51 COMPILER V7.06 MAIN 12/03/2004 10:33:36 PAGE 3
118
119 void execute_cmd(void)
120 {
121 1 if(receive_data[2]==0x01)
122 1 {
123 2 P1 = 0x01; //p1.0=1;
124 2 }
125 1 if(receive_data[2]==0x02)
126 1 {
127 2 P1 = 0x02; //p1.1=1;
128 2 }
129 1 if(receive_data[2]==0x03)
130 1 {
131 2 P1 = 0x04; //p1.2=1;
132 2 }
133 1 if(receive_data[2]==0x04)
134 1 {
135 2 P1 = 0x08; //p1.3=1;
136 2 }
137 1 }
138
139
140 int main(void)
141 {
142 1
143 1 uart_init();
144 1 sei(); //允许中断
145 1 for (;;)
146 1 {
147 2 if(bus_changed == 1)//已接收
148 2 // if(receive_number >= 3)
149 2 {
150 3 execute_cmd(); // 执行命令
151 3 uart_send("ok",2);
152 3 delay(1);
153 3 //接收到数据,发送"ok"
154 3 uart_send(receive_data,receive_number);
155 3 bus_changed=0;
156 3 receive_number=0;
157 3 }
158 2 // uart_send("yes",3);
159 2 delay(1);
160 2 }
161 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 271 ----
CONSTANT SIZE = 3 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 107 1
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 + -