?? fiber-232-485-422.src
字號:
; .\FIBER-232-485-422.SRC generated from: .\FIBER-232-485-422.C
$NOMOD51
NAME FIBER_232_485_422
P1 DATA 090H
P3 DATA 0B0H
AC BIT 0D0H.6
T0 BIT 0B0H.4
T1 BIT 0B0H.5
EA BIT 0A8H.7
bRxdTTL BIT 0B0H.2
AIN0 BIT 090H.0
AIN1 BIT 090H.1
IE DATA 0A8H
P1_0 BIT 090H.0
FL BIT 0D0H.1
P1_1 BIT 090H.1
P3_0 BIT 0B0H.0
P1_2 BIT 090H.2
P3_1 BIT 0B0H.1
P1_3 BIT 090H.3
P3_2 BIT 0B0H.2
P1_4 BIT 090H.4
P3_3 BIT 0B0H.3
P1_5 BIT 090H.5
P3_4 BIT 0B0H.4
P1_6 BIT 090H.6
P3_5 BIT 0B0H.5
ES BIT 0A8H.4
P1_7 BIT 090H.7
IP DATA 0B8H
P3_7 BIT 0B0H.7
RI BIT 098H.0
CY BIT 0D0H.7
INT0 BIT 0B0H.2
INT1 BIT 0B0H.3
TI BIT 098H.1
PS BIT 0B8H.4
SP DATA 081H
OV BIT 0D0H.2
bWdiClr BIT 0B0H.0
bRunLed BIT 0B0H.7
SBUF DATA 099H
PCON DATA 087H
SCON DATA 098H
TMOD DATA 089H
TCON DATA 088H
AOUT BIT 0B0H.6
IE0 BIT 088H.1
IE1 BIT 088H.3
B DATA 0F0H
ACC DATA 0E0H
ET0 BIT 0A8H.1
ET1 BIT 0A8H.3
TF0 BIT 088H.5
ET2 BIT 0A8H.5
TF1 BIT 088H.7
RB8 BIT 098H.2
TH0 DATA 08CH
EX0 BIT 0A8H.0
IT0 BIT 088H.0
TH1 DATA 08DH
EX1 BIT 0A8H.2
TB8 BIT 098H.3
IT1 BIT 088H.2
P BIT 0D0H.0
SM0 BIT 098H.7
TL0 DATA 08AH
SM1 BIT 098H.6
TL1 DATA 08BH
SM2 BIT 098H.5
PT0 BIT 0B8H.1
RS0 BIT 0D0H.3
PT1 BIT 0B8H.3
RS1 BIT 0D0H.4
TR0 BIT 088H.4
TR1 BIT 088H.6
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
DPH DATA 083H
DPL DATA 082H
REN BIT 098H.4
RXD BIT 0B0H.0
TXD BIT 0B0H.1
F0 BIT 0D0H.5
PSW DATA 0D0H
b_RE485 BIT 090H.7
b485_232 BIT 090H.6
?PR?vHitWdFlashRunLed?FIBER_232_485_422 SEGMENT CODE INBLOCK
?PR?vInterruptInitialize?FIBER_232_485_422 SEGMENT CODE INBLOCK
?PR?timer0?FIBER_232_485_422 SEGMENT CODE INBLOCK
?PR?extINT0?FIBER_232_485_422 SEGMENT CODE INBLOCK
?PR?main?FIBER_232_485_422 SEGMENT CODE INBLOCK
?DT?main?FIBER_232_485_422 SEGMENT DATA OVERLAYABLE
?DT?FIBER_232_485_422 SEGMENT DATA
?BI?FIBER_232_485_422 SEGMENT BIT
EXTRN CODE (?C_STARTUP)
EXTRN CODE (?C?LMUL)
EXTRN CODE (?C?SLDIV)
EXTRN CODE (?C?SLCMP)
PUBLIC bHardMode
PUBLIC uiU10Sec250
PUBLIC b250MilSecPassed
PUBLIC uiUs10Count
PUBLIC main
PUBLIC extINT0
PUBLIC timer0
PUBLIC vInterruptInitialize
PUBLIC vHitWdFlashRunLed
RSEG ?DT?main?FIBER_232_485_422
?main?BYTE:
lCharDelay?440: DS 4
RSEG ?DT?FIBER_232_485_422
uiUs10Count: DS 2
uiU10Sec250: DS 2
bHardMode: DS 1
RSEG ?BI?FIBER_232_485_422
b250MilSecPassed: DBIT 1
; #include <CPU_AT89C2051.H>
;
; // 類型定義
; #define BYTE char
; #define UINT unsigned int
; #define BOOL char
;
; //////////////////////
; // 硬件引腳功能定義 //
; //////////////////////
; sbit b485_232 = P1 ^ 6; // 硬件接口模式檢測:0-RS232模式,1-RS485/422模式(方向:輸入)
; sbit b_RE485 = P1 ^ 7; // 全半雙工檢查,RS485收發(fā)控制:0-RS485接收使能(狀態(tài)),1-RS485發(fā)送使能(狀態(tài))(方向:輸入/出)
; sbit bWdiClr = P3 ^ 0; // 看門狗清零(方向:輸出)
; sbit bRxdTTL = P3 ^ 2; // 接收電平
; sbit bRunLed = P3 ^ 7; // 運行指示LED(方向:輸出)
;
; BYTE bHardMode; // 外部硬件接口模式
;
; #define cnRS485_RecvMode 0x00 // 使RS485處于接收狀態(tài)
; #define cnRS485_SendMode 0xFF // 使RS485處于發(fā)送狀態(tài)
;
; #define cnFull232 0 // 半雙工232
; #define cnHalf485 1 // 半雙工485
; #define cnFull422 2 // 半雙工422
;
; //////////////
; // 時鐘計數(shù) //
; //////////////
; UINT uiUs10Count; // 用于10us計時
; UINT uiU10Sec250; // 用于250毫秒鐘計時
; bit b250MilSecPassed; // 已經(jīng)過了250毫秒, LED-RUN
;
; // 運行/調(diào)試狀態(tài)指示LED:強制閃爍,使RUN狀態(tài)LED閃爍周期小于1.5s
; void vHitWdFlashRunLed()
RSEG ?PR?vHitWdFlashRunLed?FIBER_232_485_422
vHitWdFlashRunLed:
; SOURCE LINE # 34
; {
; SOURCE LINE # 35
; bRunLed = ~bRunLed; // 為程序運行指示,低電平亮;
; SOURCE LINE # 36
CPL bRunLed
; bWdiClr = ~bWdiClr; // 看門狗清零;
; SOURCE LINE # 37
CPL bWdiClr
; }
; SOURCE LINE # 38
RET
; END OF vHitWdFlashRunLed
;
; // 中斷服務(wù)初始化
; void vInterruptInitialize()
RSEG ?PR?vInterruptInitialize?FIBER_232_485_422
vInterruptInitialize:
; SOURCE LINE # 41
; {
; SOURCE LINE # 42
; // =====================================================
; // IE:中斷允許寄存器;復(fù)位后:IE = 0x00;1允許,0-禁止;
; // =====================================================
; // D7 D6 D5 D4 D3 D2 D1 D0
; // -----------------------------------------------------
; // EA ET2 ES ET1 EX1 ET0 EX0
; // -----------------------------------------------------
; // EX0,EX1:外部中斷0、1的中斷允許位;
; // ET0,ET1:定時器/計數(shù)器0、1(T/C0,T/C1)溢出中斷允許位;
; // ES:串口中斷允許位;
; // ET2:定時器/計數(shù)器2(T/C2)溢出中斷允許位;
; // EA:CPU總的中斷允許;
; // -----------------------------------------------------
;
; // =================================================
; // IP:中斷優(yōu)先級寄存器;復(fù)位后:IP = 0x00;1→高,0→低;
; // =================================================
; // D7 D6 D5 D4 D3 D2 D1 D0
; // -------------------------------------------------
; // PT2 PS PT1 PX1 PT0 PX0
; // -------------------------------------------------
; // PX0,PX1:外部中斷0、1中斷優(yōu)先級控制位;
; // PT0,PT1:定時器/計數(shù)器0、1中斷優(yōu)先級控制位;
; // PS:串口中斷優(yōu)先級控制位;
; // PT2:定時器/計數(shù)器2(T/C2)中斷優(yōu)先級控制位;
; // -------------------------------------------------
;
; // ======================================================
; // TCON:定時器/計數(shù)器控制寄存器;復(fù)位后:TCON = 0x00
; // ======================================================
; // D7 D6 D5 D4 D3 D2 D1 D0
; // --------------------------------------------------------
; // TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
; // --------------------------------------------------------
; // TF1,TF0:定時器x溢出中斷標(biāo)志,當(dāng)定時器x溢出時由內(nèi)部硬件至置位,
; // 當(dāng)CPU轉(zhuǎn)向中斷服務(wù)程序時,由內(nèi)部硬件清除;
; // TR1,TR0:定時器運行控制位,由軟件置位、清除來控制定時器開啟、關(guān)閉;
; // IE1,IE0:外部觸發(fā)中斷請求標(biāo)志;
; // IT1,IT0:外部中斷觸發(fā)方式,1-下降沿觸發(fā);0-低電平觸發(fā);
; // --------------------------------------------------------
;
; EA = 0; // 中斷允許總控制
; SOURCE LINE # 84
CLR EA
; ET0 = 1; // 定時器0允許中斷
; SOURCE LINE # 85
SETB ET0
; ET1 = 0; // 定時器1禁止中斷
; SOURCE LINE # 86
CLR ET1
; EX0 = 1; // 外部中斷0允許
; SOURCE LINE # 87
SETB EX0
; EX1 = 0; // 外部中斷1禁止
; SOURCE LINE # 88
CLR EX1
; PS = 0; // 串口中斷優(yōu)先級低
; SOURCE LINE # 89
CLR PS
; ES = 0; // 串口中斷禁止
; SOURCE LINE # 90
CLR ES
; IT0 = 1; // 外部中斷0外下降沿有效
; SOURCE LINE # 91
SETB IT0
; IT1 = 1; // 外部中斷1外下降沿有效
; SOURCE LINE # 92
SETB IT1
; PX0 = 1; // 外部中斷0優(yōu)先級高
; SOURCE LINE # 93
SETB PX0
; PX1 = 0; // 外部中斷0優(yōu)先級低
; SOURCE LINE # 94
CLR PX1
; EA = 1; // 中斷允許總控制
; SOURCE LINE # 95
SETB EA
;
; // =================================================
; // TMOD: 定時器工作方式控制寄存器,復(fù)位后TMOD = 0x00
; // =================================================
; // D7 D6 D5 D4 D3 D2 D1 D0
; // -------------------+---------------------------
; // GATE C//T M1 M0 | GATE C//T M1 M0
; // -------------------+---------------------------
; // ------ 定時器1 -----+--- 定時器0 ---------------
; // M1、M0:工作方式設(shè)置;
; // 00-13位計數(shù)器;
; // 01-16位計數(shù)器;
; // 10-可自動再裝入的8位計數(shù)器(從THx中自動裝到TLx中);
; // 11-把定時器分為兩個8為的計數(shù)器或關(guān)閉定時器1;
; // C//T:1-計數(shù)器功能,0-定時器功能;
; // GATE:選通控制;1-同時/INTx為高電平且TRx為1時選通定時器x;
; // 0-每當(dāng)TRx為1時就選通定時器x;
; // -----------------------------------------------------
;
; // 定時器/計數(shù)器0初始化
; TMOD = (TMOD & 0xF0) | 0x10; // T0工作于:10-可自動再裝入的8位計數(shù)器(從THx中自動裝到TLx中);
; SOURCE LINE # 116
MOV A,TMOD
ANL A,#0F0H
ORL A,#010H
MOV TMOD,A
; // 22.11824MHz / 12分頻 = 計數(shù)頻率為1.8432MHz,10個us的設(shè)置(115200bps)
; // (2^8 - TL) / (1.8432 * 10^6) = 10 * 10^(-6) ==> TL ≈ 238
; TH0 = TL0 = 238;
; SOURCE LINE # 119
MOV TL0,#0EEH
MOV TH0,#0EEH
; TR0 = 1; // T0使能
; SOURCE LINE # 120
SETB TR0
; }
; SOURCE LINE # 121
RET
; END OF vInterruptInitialize
CSEG AT 0000BH
AJMP timer0
;
; // T0中斷服務(wù)程序: 10us中斷一次
; void timer0() interrupt 1
RSEG ?PR?timer0?FIBER_232_485_422
USING 0
timer0:
PUSH ACC
PUSH PSW
; SOURCE LINE # 124
; {
; uiUs10Count ++; // 用于10us計時
; SOURCE LINE # 126
INC uiUs10Count+01H
MOV A,uiUs10Count+01H
JNZ ?C0025
INC uiUs10Count
?C0025:
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -