📄 uart.lst
字号:
C51 COMPILER V7.06 UART 04/12/2006 14:55:28 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN .\HEX\uart.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE uart.c BROWSE DEBUG OBJECTEXTEND OBJECT(.\HEX\uart.obj)
stmt level source
1 #ifndef __UART_C__
2 #define __UART_C__
3 #endif
4
5 #include "head.h"
6 #include <reg52.h>
7 #include <string.h>
8 #include "uart.h"
9
10 extern uint8 eaCount;
11 //-----------------------------------
12 // 串行口通讯子程序
13 // 串行口初始化
14 // 晶振22.0592M, SMOD=1, 使用6T, 波特率115200
15 //波特率=晶振频率/(256-定时器计数)/(一条指令的机器周期)
16 //-----------------------------------
17 void ComInit(void)
18 {
19 1 TMOD = 0x21; //T1为方式2, t0模式1
20 1 TH0=0x00; //定时器0用于定时
21 1 TL0=0x00;
22 1 TH1 = 0xFe; //
23 1 TL1 = 0xFe;
24 1 PCON = PCON | 0x80; //SMOD=1
25 1 SCON = 0x50; //串行口工作在方式3
26 1 TR0 = 1;
27 1 TR1 = 1;
28 1 ET0=1;
29 1 EA = 1;
30 1 }
31 // 发送数据
32 void SendChar(unsigned char buff)
33 {
34 1 SBUF = buff;
35 1 while( !TI );
36 1 TI=0;
37 1 }
38
39 //发送数组
40 void uartPut(uint8 dat[], uint8 len)
41 {
42 1 uint8 i;
43 1 ENTER_CRITICAL();
44 1 for(i=0; i<len; i++)
45 1 {
46 2 SendChar(dat[i]);
47 2 }
48 1 EXIT_CRITICAL();
49 1 }
50
51 //--------------------------------
52 //发送字符串
53 //--------------------------------
54 void uartPutStr(uint8 *str)
55 {
C51 COMPILER V7.06 UART 04/12/2006 14:55:28 PAGE 2
56 1 uint8 len;
57 1 len = strlen(str);
58 1 uartPut(str, len);
59 1 }
60
61 //------------------------------------------
62 //把bsd码数据转换成ascii码的
63 //如:123转换为 49(1) 50(2) 51(3)
64 //dat[]是2个字节的数组,存放16进制返回数据
65 //原始数据放到dat[0]
66 //-------------------------------------------
67 void bcdToAscii(uint8 dat[])
68 {
69 1 uint8 idata temp;
70 1 temp = dat[0];
71 1 dat[0] = (temp>>4);
72 1 if(0<=dat[0] && dat[0]<10) //数字0-9
73 1 {
74 2 dat[0] += 48; //转换到数字对应的ascii码0(48)1(49)
75 2 }
76 1 else //数字10(a)-15(f)
77 1 {
78 2 dat[0] += 55; //转换到数字对应的ascii码10(a)(65)
79 2 }
80 1 dat[1] = (temp&0x0f);
81 1 if(0<=dat[1] && dat[1]<10) //数字0-9
82 1 {
83 2 dat[1] += 48; //转换到数字对应的ascii码0(48)1(49)
84 2 }
85 1 else //数字10(a)-15(f)
86 1 {
87 2 dat[1] += 55; //转换到数字对应的ascii码10(a)(65)
88 2 }
89 1 }
90
91 //-----------------------------------------------
92 //发送数字, 一个数字由两个ASCII码组成, 为16进制
93 //比如, 0xef发送为e和f两个字符
94 //----------------------------------------------
95 void uartPutNum(uint8 *num, len)
96 {
97 1 uint16 idata n;
98 1 uint8 idata temp[2];
99 1 if(NULL!=num)
100 1 {
101 2 for(n=0; n<len; n++)
102 2 {
103 3 *(temp) = *(num+n);
104 3 bcdToAscii(temp);
105 3 uartPut(temp, 2);
106 3 }
107 2 }
108 1 }
109
110 //---------------------------------------------------------
111 //函数功能:
112 //打印字符串, 和一个已知长度的数字数组
113 //参数说明:
114 //format 字符串, 在有%的地方打印数字
115 //num 数字数组指针
116 //len 数字数组长度
117 //---------------------------------------------------------
C51 COMPILER V7.06 UART 04/12/2006 14:55:28 PAGE 3
118 void uartPrint(const char *format, uint8 *num, uint8 len)
119 {
120 1 if(NULL!=format)
121 1 {
122 2 uint16 idata count, i;
123 2 i=strlen(format);
124 2 for(count=0; count<i; count++)
125 2 {
126 3 if('%'!=(*(format+count)))
127 3 {
128 4 uartPut(format+count, 1);
129 4 }
130 3 else
131 3 {
132 4 uartPutNum(num, len);
133 4 }
134 3 }
135 2 }
136 1 else
137 1 {
138 2 return;
139 2 }
140 1
141 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 363 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 18
IDATA SIZE = ---- 9
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 + -