📄 uart.lst
字号:
C51 COMPILER V8.02 UART 10/01/2007 00:33:27 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN .\obj\uart.obj
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE uart.c BROWSE DEBUG OBJECTEXTEND PRINT(.\lst\uart.lst) OBJECT(.\obj\uart.ob
-j)
line level source
1 //uart.c
2 //
3
4
5 #include "AppDefine.h"
6
7
8 bit bdata bFrameSt; //帧头
9
10 extern unsigned int Val_Mytime, Val_Uptime, Val_ad, Val_Actdata, Val_Actdir;
11 extern unsigned char Val_Mystatus;
12
13 extern unsigned char COMMFlag; //
14
15 unsigned char COMMInLenght; //
16 unsigned char COMMInIndex; //
17 unsigned char COMMInSum; //
18 unsigned char COMMInBuff[8]; //
19
20 extern unsigned char RUNflag; //
21
22 /*****************************通讯程序***********************************/
23 /**************************************************************************/
24 void Uart_Init(unsigned char smod, unsigned char ctime)
25 {
26 1 SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
27 1 TMOD = 0x20; //TMOD: timer 1, mode 2, 8-bit reload
28 1 switch(smod)
29 1 {
30 2 case 1:
31 2 PCON = 0x80; //SMOD=1;
32 2 break;
33 2 case 0:
34 2 default:
35 2 PCON = 0x00; //SMOD=0;
36 2 break;
37 2 }
38 1 TL1 = ctime;
39 1 TH1 = TL1;
40 1 TR1 = 1; // timer 1 run
41 1
42 1 //中断
43 1 ES = 1;
44 1 //
45 1 EN485 = 0;//RECEIVE
46 1 //
47 1 COMMInLenght = 0;
48 1 COMMInIndex = 0;
49 1 COMMInSum = 0;
50 1 bFrameSt = 0;
51 1
52 1 }
53
54
C51 COMPILER V8.02 UART 10/01/2007 00:33:27 PAGE 2
55 //向串口发送一个字符 data
56 void Uart_SendChar(unsigned char ch)
57 {
58 1 EN485 = T_EN485;
59 1 ES = 0;
60 1 SBUF = ch;
61 1 while(TI==0);
62 1 TI = 0;
63 1 ES = 1;
64 1 EN485 = R_EN485;
65 1 }
66
67 //向串口发送一帧数据 address + data
68 unsigned char Uart_SendFrame(unsigned char addr, unsigned char *ch, unsigned char datalen)
69 {
70 1 unsigned char i, sendlen=0, sum=0;
71 1
72 1 EN485 = T_EN485;
73 1 ES = 0;
74 1
75 1 SBUF = 0x7f;
76 1 while(TI==0);
77 1 TI = 0;
78 1 sendlen++;
79 1
80 1 SBUF = addr;
81 1 while(TI==0);
82 1 TI = 0;
83 1 sum += addr;
84 1 sendlen++;
85 1
86 1 for(i=0;i<datalen;i++)
87 1 {
88 2 sum += *ch;
89 2 SBUF = *ch++;
90 2 while(TI==0);
91 2 TI=0;
92 2 sendlen++;
93 2 }
94 1
95 1 SBUF = sum;
96 1 while(TI==0);
97 1 TI = 0;
98 1 sendlen++;
99 1
100 1 ES = 1;
101 1 EN485 = R_EN485;
102 1 return sendlen;
103 1 }
104
105 //串口接收中断函数,分为接收4字节和8字节
106 void Uart_INT () interrupt 4 using 1
107 {
108 1 if(RI)
109 1 {
110 2 unsigned char ch;//,i;
111 2 ES = 0;
112 2 RI = 0;
113 2 ch = SBUF;
114 2 if(bFrameSt == 0)//bFrameSt=0
115 2 {
116 3 if(ch == 0x7f){//帧头
C51 COMPILER V8.02 UART 10/01/2007 00:33:27 PAGE 3
117 4 bFrameSt = 1;
118 4 }
119 3 }
120 2 else{//bFrameSt=1
121 3 switch(COMMFlag)
122 3 {
123 4 case CMD_NO_FLAG:
124 4 if(ch == BG485ADDR){//广播地址
125 5 COMMFlag = CMD_RESET_FLAG;
126 5 COMMInLenght = CMD_RESET_NUM;
127 5 COMMInIndex = 0;
128 5 COMMInSum = 0;
129 5 COMMInBuff[COMMInIndex] = ch;
130 5 }
131 4 else if(ch == MY485ADDR){//data
132 5 if(RUNflag != RUN_NO_FLAG){
133 6 COMMFlag = CMD_DATA_FLAG;
134 6 COMMInLenght = CMD_DATA_NUM;
135 6 COMMInIndex = 0;
136 6 COMMInBuff[COMMInIndex] = ch;
137 6 }else{
138 6 COMMFlag = CMD_NO_FLAG;
139 6 COMMInLenght = 0;
140 6 COMMInIndex = 0;
141 6 COMMInBuff[COMMInIndex] = 0x0;
142 6 bFrameSt = 0;
143 6 }
144 5 }
145 4 break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -