?? serial.lst
字號:
C51 COMPILER V7.08 SERIAL 12/26/2003 07:27:16 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN serial.OBJ
COMPILER INVOKED BY: C:\Keil708\C51\BIN\C51.EXE serial.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 //**********************************************************************************
2 //楊屹 2002/08/20 第一版
3 //基于中斷的串口驅動及顯示程序
4 //聯系方法:gdtyy@ri.gdt.com.cn(2003/07/31以前有效)
5 //**********************************************************************************
6 //程序特點:
7 // 1.基于中斷,可并發執行
8 // 2.參數可配置(收發緩沖區大小,最大字符串長度,TAB鍵移動距離)
9 //**********************************************************************************
10 //使用方法:(此范例自包含,獨立于其他程序。)
11 // 先配制收發緩沖區大小等可變參數(在serial.h中的宏定義)
12 // 1.開頭加入#include <reg51.h>語句,一定要有。
13 // 2.初始化串口 InitSerial();//本例中為20MHz晶體,300波特率,模式2初始化
14 // 3.初始化串口緩沖區 InitSerialBuffer();
15 // 4.使用顯示字節,字,長字,字符,字符串,清屏函數。
16 //自包含
17 //**********************************************************************************
18 //波特率計算公式:
19 // TH1=256-(2^SMOD/32*Fosc/12*1/Bound)
20 // 其中:SMOD=0,1;Fosc=晶體或晶振頻率;Bound=波特率
21 // 本例中,SMOD=0;Fosc=20*10E6;Bound=300,所以TH1=0x52。
22 //Baud rate(20Mhz)
23 //300(52);1200(D5);2400(EA);4800(F5);9600(FB);19200(FD);38400(FF);
24 //**********************************************************************************
25 //書寫風格:
26 // 1.帶yy前綴標志的函數為楊屹改寫的等效C庫函數。
27 // 2.單個單詞用小寫,yy定義為前綴,不算一個單詞。
28 // 3.多個單詞(2個及以上),每個單詞首字母大寫。(有時變量名第一個單詞首字母小寫)
29 // 4.采用內縮風格,每次縮進一個TAB。
30 //**********************************************************************************
31 //應用舉例:(可在KEIL仿真環境下運行)
32 //源程序文件:serial.h/serial.c/main.c
33 //main.c內容:
34 #include "my.h"
35 #include "serial.h"//Note:It's ".c",not ".h"
36
37 unsigned char TxBuf[LenTxBuf],RxBuf[LenRxBuf];//收發緩沖區實體
38 unsigned char *inTxBuf,*outTxBuf,*inRxBuf,*outRxBuf;//收發緩沖區讀寫指針
39 bit TIflag=1;//Note:It must be 1.
40
41 void serial_init()//串口初始化
42 {
43 1 serial_baud_9600; //22.1184 mhz 19200bps
44 1 //serial_baud_9600; //22.1184Mhz 38400bps 這些宏定義在my.h文件里。
45 1 //serial_baud_38400;
46 1 //serial_baud_57600;
47 1 serial_uart_8; /*工作方式為8位數據 */
48 1 serial_receive_enable;/*允許接收*/
49 1 ti=1;
50 1
51 1 inTxBuf=TxBuf;outTxBuf=TxBuf;
52 1 inRxBuf=RxBuf;outRxBuf=RxBuf;
53 1 EA=1;ES=1;
54 1 }
55
C51 COMPILER V7.08 SERIAL 12/26/2003 07:27:16 PAGE 2
56 //串口中斷服務子程序
57 void serial(void) interrupt 4
58 {
59 1 unsigned char *t;
60 1
61 1 if(TI)
62 1 {
63 2 TI=0;
64 2 if(inTxBuf==outTxBuf) //TxBuf Empty
65 2 {
66 3 TIflag=1;
67 3 return;
68 3 }
69 2 SBUF=*outTxBuf;
70 2 outTxBuf++;
71 2 if(outTxBuf==TxBuf+LenTxBuf)
72 2 outTxBuf=TxBuf;
73 2 }
74 1 if(RI)
75 1 {
76 2 RI=0;
77 2 t=inRxBuf;t++;
78 2 if(t==RxBuf+LenRxBuf)
79 2 t=RxBuf;
80 2 if(t==outRxBuf) //RxBuf Full
81 2 return;
82 2 *inRxBuf=SBUF;
83 2 inRxBuf=t;
84 2 }
85 1 }
86
87 bit getchar(unsigned char *ch)//從串口緩沖區讀1字節數據
88 {
89 1 ES=0;
90 1 if(inRxBuf==outRxBuf)
91 1 {
92 2 ES=1;
93 2 return 0;
94 2 } //RxBuf Empty
95 1 *ch=*outRxBuf; outRxBuf++;
96 1 if(outRxBuf==RxBuf+LenRxBuf) outRxBuf=RxBuf;
97 1 ES=1;
98 1 return 1;
99 1 }
100
101 bit putchar(unsigned char ch)//顯示字符
102 {
103 1 unsigned char *t;
104 1
105 1 ES=0;
106 1 if(TIflag)
107 1 {
108 2 TIflag=0;
109 2 TI=1;
110 2 }
111 1 t=inTxBuf;t++;
112 1 ES=1;
113 1 if(t==TxBuf+LenTxBuf) t=TxBuf;
114 1 // if(t==outTxBuf) {ES=1;return 0;} //TxBuf Full
115 1 while(t==outTxBuf); //TxBuf Full 改為等待
116 1 *inTxBuf=ch;
117 1 inTxBuf=t;
C51 COMPILER V7.08 SERIAL 12/26/2003 07:27:16 PAGE 3
118 1 return 1;
119 1 }
120
121 unsigned char code hex_[]={"0123456789ABCDEF"};
122 void puthex(unsigned char Byte)//以十六進制格式顯示1個字節數據
123 {
124 1 unsigned char ch;
125 1 ch=(Byte>>4)&0x0f;
126 1 putchar(hex_[ch]);
127 1 ch=Byte&0x0f;
128 1 putchar(hex_[ch]);
129 1 }
130
131 void putword(unsigned int Word)//以十六進制格式顯示1個字數據
132 {
133 1 puthex(Word>>8);
134 1 puthex(Word&0xFF);
135 1 }
136
137 void putstring(unsigned char *str)//顯示字符串
138 {
139 1 for (;*str!=0;str++) //遇到停止符0結束
140 1 putchar(*str);
141 1 }
142
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 812 ----
CONSTANT SIZE = 17 ----
XDATA SIZE = 33 12
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -