📄 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收发控制:0-RS485接收使能(状态),1-RS485发送使能(状态)(方向:输入/出)
; sbit bWdiClr = P3 ^ 0; // 看门狗清零(方向:输出)
; sbit bRxdTTL = P3 ^ 2; // 接收电平
; sbit bRunLed = P3 ^ 7; // 运行指示LED(方向:输出)
;
; BYTE bHardMode; // 外部硬件接口模式
;
; #define cnRS485_RecvMode 0x00 // 使RS485处于接收状态
; #define cnRS485_SendMode 0xFF // 使RS485处于发送状态
;
; #define cnFull232 0 // 半双工232
; #define cnHalf485 1 // 半双工485
; #define cnFull422 2 // 半双工422
;
; //////////////
; // 时钟计数 //
; //////////////
; UINT uiUs10Count; // 用于10us计时
; UINT uiU10Sec250; // 用于250毫秒钟计时
; bit b250MilSecPassed; // 已经过了250毫秒, LED-RUN
;
; // 运行/调试状态指示LED:强制闪烁,使RUN状态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
;
; // 中断服务初始化
; void vInterruptInitialize()
RSEG ?PR?vInterruptInitialize?FIBER_232_485_422
vInterruptInitialize:
; SOURCE LINE # 41
; {
; SOURCE LINE # 42
; // =====================================================
; // IE:中断允许寄存器;复位后: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:定时器/计数器0、1(T/C0,T/C1)溢出中断允许位;
; // ES:串口中断允许位;
; // ET2:定时器/计数器2(T/C2)溢出中断允许位;
; // EA:CPU总的中断允许;
; // -----------------------------------------------------
;
; // =================================================
; // IP:中断优先级寄存器;复位后:IP = 0x00;1→高,0→低;
; // =================================================
; // D7 D6 D5 D4 D3 D2 D1 D0
; // -------------------------------------------------
; // PT2 PS PT1 PX1 PT0 PX0
; // -------------------------------------------------
; // PX0,PX1:外部中断0、1中断优先级控制位;
; // PT0,PT1:定时器/计数器0、1中断优先级控制位;
; // PS:串口中断优先级控制位;
; // PT2:定时器/计数器2(T/C2)中断优先级控制位;
; // -------------------------------------------------
;
; // ======================================================
; // TCON:定时器/计数器控制寄存器;复位后:TCON = 0x00
; // ======================================================
; // D7 D6 D5 D4 D3 D2 D1 D0
; // --------------------------------------------------------
; // TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
; // --------------------------------------------------------
; // TF1,TF0:定时器x溢出中断标志,当定时器x溢出时由内部硬件至置位,
; // 当CPU转向中断服务程序时,由内部硬件清除;
; // TR1,TR0:定时器运行控制位,由软件置位、清除来控制定时器开启、关闭;
; // IE1,IE0:外部触发中断请求标志;
; // IT1,IT0:外部中断触发方式,1-下降沿触发;0-低电平触发;
; // --------------------------------------------------------
;
; 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; // 串口中断优先级低
; 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优先级高
; SOURCE LINE # 93
SETB PX0
; PX1 = 0; // 外部中断0优先级低
; SOURCE LINE # 94
CLR PX1
; EA = 1; // 中断允许总控制
; SOURCE LINE # 95
SETB EA
;
; // =================================================
; // TMOD: 定时器工作方式控制寄存器,复位后TMOD = 0x00
; // =================================================
; // D7 D6 D5 D4 D3 D2 D1 D0
; // -------------------+---------------------------
; // GATE C//T M1 M0 | GATE C//T M1 M0
; // -------------------+---------------------------
; // ------ 定时器1 -----+--- 定时器0 ---------------
; // M1、M0:工作方式设置;
; // 00-13位计数器;
; // 01-16位计数器;
; // 10-可自动再装入的8位计数器(从THx中自动装到TLx中);
; // 11-把定时器分为两个8为的计数器或关闭定时器1;
; // C//T:1-计数器功能,0-定时器功能;
; // GATE:选通控制;1-同时/INTx为高电平且TRx为1时选通定时器x;
; // 0-每当TRx为1时就选通定时器x;
; // -----------------------------------------------------
;
; // 定时器/计数器0初始化
; TMOD = (TMOD & 0xF0) | 0x10; // T0工作于:10-可自动再装入的8位计数器(从THx中自动装到TLx中);
; SOURCE LINE # 116
MOV A,TMOD
ANL A,#0F0H
ORL A,#010H
MOV TMOD,A
; // 22.11824MHz / 12分频 = 计数频率为1.8432MHz,10个us的设置(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中断服务程序: 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:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -