?? slave.lst
字號:
C51 COMPILER V7.06 SLAVE 03/28/2005 18:51:49 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SLAVE
OBJECT MODULE PLACED IN slave.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE slave.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //-----------------------函數(shù)聲明,變量定義--------------------------------------------------------
2 #include <reg51.h>
3 sbit RE_DE=P1^0;
4
5 #define COUNT 10 // 定義接收緩沖區(qū)大小
6 #define ADD 5 //定義設(shè)備地址
7 unsigned char buffer[COUNT]; //定義接收緩沖區(qū)
8 unsigned char point; //定義接收數(shù)據(jù)個數(shù)指示變量
9
10 void UART_init(); //串口初始化函數(shù)
11 void COM_send(void); //串口接收函數(shù)
12 unsigned char CLU_checkdata(void);//計算校驗位函數(shù)
13 //--------------------------------------------------------------------------------------------------
14 // 函數(shù)名稱: UART_init()串口初始化函數(shù)
15 // 函數(shù)功能: 在系統(tǒng)時鐘為11.059MHZ時,設(shè)定串口波特率為9600bit/s
16 // 串口接收中斷允許,發(fā)送中斷禁止
17 //--------------------------------------------------------------------------------------------------
18 void UART_init()
19 {
20 1 //初始化串行口和波特率發(fā)生器
21 1 SCON =0x0F0; //選擇串口工作方式為3,打開接收允許
22 1 TMOD =0x21; //定時器1工作在方式2,定時器0工作在方式1
23 1 TH1 =0xfd; //實現(xiàn)波特率9600(系統(tǒng)時鐘11.0592MHZ)
24 1 TL1 =0xfd; //實現(xiàn)波特率9600(系統(tǒng)時鐘11.0592MHZ)
25 1 TR1 =1; //啟動定時器T1
26 1 ET1 =0;
27 1 ES=1; //允許串行口中斷
28 1 PS=1; //設(shè)計串行口中斷優(yōu)先級
29 1 EA =1; //單片機中斷允許
30 1 SM2=1; //設(shè)備處于地址監(jiān)聽狀態(tài)
31 1 }
32 //--------------------------------------------------------------------------------------------------
33 // 函數(shù)名稱: com_interrup()串口接收中斷處理函數(shù)
34 // 函數(shù)功能: 接收包括起始位0xFE,地址位和終止位0xEF在內(nèi)的十位數(shù)據(jù)到數(shù)據(jù)緩沖區(qū),
35 // 地址不匹配,則接收到的是無效數(shù)字,不寫到接收緩沖區(qū)
36 //--------------------------------------------------------------------------------------------------
37 com_interrupt(void) interrupt 4 using 3
38 {
39 1 unsigned char RECEIVR_buffer;
40 1 if(RI)
41 1 { //處理接收中斷
42 2 RI=0; //清除中斷標志位
43 2 RECEIVR_buffer=SBUF; //接收串口數(shù)據(jù)
44 2 if(point==0) //如果還沒有接收到起始位
45 2 {
46 3 if(RECEIVR_buffer==0xFE) //判斷是否起始標志位
47 3 buffer[point++]=RECEIVR_buffer;//起始正確,接收起始位
48 3 else
49 3 point=0; //不是,繼續(xù)等待起始位
50 3 }
51 2 else if(point==1) //是否地址位
52 2 {
53 3 if(RECEIVR_buffer==ADD) //判斷地址是否匹配
54 3 buffer[point++]=RECEIVR_buffer;//地址匹配,接收開始接收
55 3 else
C51 COMPILER V7.06 SLAVE 03/28/2005 18:51:49 PAGE 2
56 3 point=0; //不匹配,繼續(xù)下一個起始位
57 3 }
58 2 else if(point>0&&point<10) //判斷是否接收夠十位數(shù)據(jù)
59 2 buffer[point++]=RECEIVR_buffer; //不夠,把接收到的數(shù)據(jù)放入接收緩存區(qū)
60 2 else point=0; //緩沖區(qū)已滿,清除緩存區(qū)內(nèi)數(shù)據(jù)重新接收
61 2 }
62 1 if(TI) //串口發(fā)送中斷
63 1 {
64 2 TI=0; //清除發(fā)送中斷
65 2 }
66 1 }
67 //--------------------------------------------------------------------------------------------------
68 // 函數(shù)名稱: COM_send()串口發(fā)送函數(shù)
69 // 函數(shù)功能: 把數(shù)據(jù)緩沖區(qū)的十位數(shù)據(jù)發(fā)送出去
70 //--------------------------------------------------------------------------------------------------
71 void COM_send(void)
72 {
73 1 RE_DE=1; //設(shè)置MAX483進入發(fā)送狀態(tài)
74 1 for(point=0;point<=10,TI=1;point++) //連續(xù)發(fā)送十位數(shù)據(jù)
75 1 //把緩存區(qū)的數(shù)據(jù)都發(fā)送到串口
76 1 {
77 2 SBUF=buffer[point];
78 2 TI=0;
79 2 }
80 1 RE_DE=0; //設(shè)置MAX483進入接收狀態(tài)
81 1 }
82
83 //--------------------------------------------------------------------------------------------------
84 // 函數(shù)名稱: 主函數(shù)
85 // 函數(shù)功能: 調(diào)度個子函數(shù),完成通信過程
86 //--------------------------------------------------------------------------------------------------
87 void main(void)
88 {
89 1 UART_init(); //初始化串口
90 1
91 1 do
92 1 {
93 2 }
94 1 while(point!=10); //判斷數(shù)據(jù)是否接收完成
95 1 COM_send(); //地址匹配,數(shù)據(jù)完整接收,調(diào)用發(fā)送程序通知主機
96 1 SM2=0; //設(shè)置為點對點通信狀態(tài)
97 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 142 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -