📄 uart.lst
字号:
C51 COMPILER V7.20 UART 11/03/2007 17:08:45 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN .\output\uart.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\driver\uart.c LARGE ORDER INCDIR(.\src\include) DEBUG OBJECTEXTEND PRIN
-T(.\output\uart.lst) OBJECT(.\output\uart.obj)
line level source
1 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&串口驱动&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
2 //*文件名称:uart.c
3
4 //*文件作用:串口驱动
5
6 //*文件作者:翟 鹏
7
8 //*创建日期:2004年5月
9 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
10
11
12
13 #include <include.h>
14
15
16
17 uchar idata uart_fifo[UART_BUFF_SIZE];//接收FIFO
18 uchar idata uart_fifo_in=0;//写指针
19 uchar idata uart_fifo_out=0;//读指针
20
21
22
23 //********************************************************************************************************
-***************
24 //函数作用:SP2349中断服务程序
25 //参数说明:无
26 //注意事项:注意中断号码和优先级设置
27 //返回说明:无
28 //********************************************************************************************************
-***************
29 static void uart_isr(void) interrupt IRQ_UART //using USE_UART
30 {
31 1 if(RI)
32 1 {
33 2 uart_fifo[uart_fifo_in++]=SBUF;//接收串口一个字符
34 2 if(uart_fifo_in>=UART_BUFF_SIZE)uart_fifo_in=0;//如果接收缓冲区满
35 2 RI=0;//清除中断标志
36 2 }
37 1 }
38
39 //********************************************************************************************************
-***************
40 //*函数作用:uart初始化---串口波特率设置 停止位设置
41 //*参数说明:
42 //*注意事项:
43 //*返回说明:无
44 //********************************************************************************************************
-***************
45 void uart_init(ulong baud)
46 {
47 1 ES=0;//关中断
48 1 PS=0;//串口中断--低优先级
49 1 SCON=0x58;//串口1方式1 8位数据位 1位停止位
50 1
C51 COMPILER V7.20 UART 11/03/2007 17:08:45 PAGE 2
51 1 ET1=0;//关闭timer1中断
52 1 PT1=0;//timer1中断--低优先级
53 1 TR1=0;//关闭timer1
54 1 TMOD|=0x20;//timer1方式2---波特率发生器
55 1
56 1 //波特率倍增
57 1 #ifdef DOUBLE_BAUDRATE
58 1 PCON=0x80;//设置波特率倍增寄存器
59 1 baud>>=1;//波特率倍增
60 1 #endif
61 1 TH1=256-((ulong)F_OSC)/32/CLOCK_COUNT/baud;//timer1设置计数初值---TH1=256-F_OSC/32/CLOCK_COUNT/baud
62 1 TL1=256-((ulong)F_OSC)/32/CLOCK_COUNT/baud;//timer1装载初始化值---TL1=256-F_OSC/32/CLOCK_COUNT/baud
63 1 TR1=1;//开启timer1
64 1
65 1 uart_flush();
66 1
67 1 ES=1;//开中断
68 1 }
69
70 //********************************************************************************************************
-***************
71 //函数作用:清除串口缓存的数据
72 //参数说明:无
73 //注意事项:
74 //返回说明:无
75 //********************************************************************************************************
-***************
76 void uart_flush(void)
77 {
78 1 uart_fifo_in=uart_fifo_out=0;
79 1 }
80
81 //********************************************************************************************************
-***************
82 //函数作用:查询串口 如果有数据读取一个字节
83 //参数说明:ch---读取字符存放地址
84 //注意事项:
85 //返回说明:如果有数据返回1
86 //********************************************************************************************************
-***************
87 uchar uart_read_char(uchar *ch)
88 {
89 1 if(uart_fifo_out==uart_fifo_in)return 0;
90 1 *ch=uart_fifo[uart_fifo_out];//得到当前要读取的字符
91 1 uart_fifo_out++;//指向下一个要读取的字符
92 1 if(uart_fifo_out==UART_BUFF_SIZE)uart_fifo_out=0;//如果到了fifo末尾 则重从头开始
93 1 return 1;
94 1 }
95
96 //********************************************************************************************************
-***************
97 //函数作用:向串口发送一个字符
98 //参数说明:ch---要发送的字符
99 //注意事项:
100 //返回说明:无
101 //********************************************************************************************************
-***************
102 void uart_write_char(uchar ch)
103 {
104 1 SBUF=ch;
105 1 while(TI==0);//如果TI=0说明还没有发送完毕---死等
106 1 TI=0;//发送完毕以后--TI清0
C51 COMPILER V7.20 UART 11/03/2007 17:08:45 PAGE 3
107 1 }
108
109 //********************************************************************************************************
-***************
110 //函数作用:向串口发送字符串
111 //参数说明:str---要发送的字符串
112 //注意事项:
113 //返回说明:无
114 //********************************************************************************************************
-***************
115 void uart_write_str(uchar *str)
116 {
117 1 while(*str)uart_write_char(*str++);
118 1 }
119
120 //********************************************************************************************************
-***************
121 //函数作用:向串口发送缓冲区的数据
122 //参数说明:
123 //注意事项:
124 //返回说明:无
125 //********************************************************************************************************
-***************
126 //void uart_write_buf(uchar *buffer, uint length)
127 //{
128 // while(length--)
129 // {
130 // uart_write_char(*buffer++);
131 // }
132 //}
133
134
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 226 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 7
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = 18 ----
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 + -