⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fiber-232-485-422.src

📁 串口通信的光纤调制解调产品“光猫”的AT89C2051单片机完整源代码及其说明
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; .\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 + -