?? main.lst
字號:
C51 COMPILER V8.05a MAIN 08/19/2008 15:20:43 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "main.h"
2 /******************************
3 微控電子 www.mcuc.cn
4 modbus RTU 的C51程序
5 單片機89S52
6 通信波特率 9600 8位數據 1位停止位 偶校驗 485通位接口
7 單片機控制板地址 localAddr(變量)
8 通信可設置數據的地址:
9 字地址 0 - 255 (只取16位的低8位)
10 位地址 0 - 255 (只取16位的低8位)
11 *******************************/
12 uint8 sendBuf[16],receBuf[16]; //發送接收緩沖區
13 uint16 a;
14 uint8 checkoutError; // ==2 偶校驗錯
15 uint8 receTimeOut; //接收超時
16 uint8 c10ms; //10ms 計時
17 bit b1ms,bt1ms,b10ms,bt10ms,b100ms,bt100ms; //定時標志位
18
19 // 串行中斷程序
20 void commIntProc() interrupt 4
21 {
22 1 if(TI)
23 1 {
24 2 TI = 0;
25 2 if(sendPosi < sendCount)
26 2 {
27 3 sendPosi++;
28 3 //ACC = sendBuf[sendPosi];
29 3 //TB8 = P; //加上校驗位
30 3 SBUF = sendBuf[sendPosi];
31 3 }
32 2 else
33 2 {
34 3 //b485Send = 0; //發送完后將485置于接收狀態
35 3 receCount = 0; //清接收地址偏移寄存器
36 3 checkoutError = 0;
37 3 }
38 2 }
39 1 else if(RI)
40 1 {
41 2 RI = 0;
42 2 receTimeOut = 10; //通訊超時值
43 2 receBuf[receCount] = SBUF;
44 2 //ACC = receBuf[receCount];
45 2 //if(P != RB8)
46 2 //checkoutError = 2; //偶校驗出錯
47 2 receCount++; //接收地址偏移寄存器加1
48 2 receCount &= 0x0f; //最多一次只能接收16個字節
49 2 }
50 1 }
51
52 //定時器0 1ms 中斷
53 void timer0IntProc() interrupt 1
54 {
55 1 TL0 = TIMER_LOW;
C51 COMPILER V8.05a MAIN 08/19/2008 15:20:43 PAGE 2
56 1 TH0 = TIMER_HIGHT;
57 1 bt1ms = 1;
58 1 c10ms++;
59 1 if(c10ms >= 10)
60 1 {
61 2 c10ms = 0; //10ms計時器清零
62 2 bt10ms = 1;
63 2 }
64 1 }
65
66 //外部中斷0
67 void intEx0Proc(void) interrupt 0
68 {
69 1
70 1 }
71 //定時處理
72 void timeProc(void)
73 {
74 1 static uint8 c200ms;
75 1 b1ms = 0;
76 1 b10ms = 0;
77 1 b100ms = 0;
78 1
79 1 if(bt1ms)
80 1 {
81 2 bt1ms = 0;
82 2 b1ms = 1;
83 2
84 2 if(receTimeOut>0)
85 2 {
86 3 receTimeOut--;
87 3 if(receTimeOut==0 && receCount>0) //判斷通訊接收是否超時
88 3 {
89 4 b485Send = 0; //將485置為接收狀態
90 4 receCount = 0; //將接收地址偏移寄存器清零
91 4 checkoutError = 0;
92 4 }
93 3 }
94 2 }
95 1
96 1 if(bt100ms)
97 1 {
98 2 bt100ms = 0;
99 2 b100ms = 1;
100 2 }
101 1 if(bt10ms) //判斷中斷10ms標志位是否1
102 1 {
103 2 bt10ms = 0; //清中斷10ms標志位
104 2 b10ms = 1;
105 2
106 2 c200ms++; //200ms計時器加1
107 2 if(c200ms >= 100) //判斷是否計時到200ms
108 2 {
109 3 c200ms = 0; //清200ms計時器
110 3 bRunLED = ~bRunLED; //取反運行指示燈
111 3 a++;
112 3 }
113 2 }
114 1 }
115
116 //初始化中斷
117 void initInt(void)
C51 COMPILER V8.05a MAIN 08/19/2008 15:20:43 PAGE 3
118 {
119 1 //WDT_CONTR=0x34;//啟動看門狗
120 1 SCON = 0x50; //串口方式1,允許接收
121 1
122 1 TMOD=0x21;//定時/計數器為16位、1為8位自動重裝模式
123 1 TH0 = TIMER_HIGHT;
124 1 TL0 = TIMER_LOW;
125 1 PCON=0x00;
126 1 TH1=0xFD; //11.0592M.19200
127 1 TL1=0xFD;
128 1 TCON=0x55;//外中斷0、1均為下降沿觸發
129 1 IE=0xF3;//允許定時器0,外中斷0中斷,并打開總中斷
130 1 }
131
132 //初始化
133 void initProg(void)
134 {
135 1 initInt();
136 1 //b485Send = 0;
137 1 }
138
139 void main(void)
140 {
141 1 initProg();
142 1
143 1 while(1)
144 1 {
145 2 timeProc();
146 2 checkComm0Modbus();
147 2 }
148 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 216 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 38 ----
IDATA SIZE = ---- ----
BIT SIZE = 6 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -