📄 main.src
字号:
; MAIN.SRC generated from: MAIN.C
$NOMOD51
NAME MAIN
P0 DATA 080H
P1 DATA 090H
P2 DATA 0A0H
P3 DATA 0B0H
T0 BIT 0B0H.4
AC BIT 0D0H.6
T1 BIT 0B0H.5
EA BIT 0A8H.7
IE DATA 0A8H
RD BIT 0B0H.7
ES BIT 0A8H.4
IP DATA 0B8H
RI BIT 098H.0
INT0 BIT 0B0H.2
CY BIT 0D0H.7
TI BIT 098H.1
INT1 BIT 0B0H.3
PS BIT 0B8H.4
SP DATA 081H
OV BIT 0D0H.2
WR BIT 0B0H.6
SBUF DATA 099H
PCON DATA 087H
SCON DATA 098H
TMOD DATA 089H
TCON DATA 088H
IE0 BIT 088H.1
IE1 BIT 088H.3
B DATA 0F0H
TurnLed BIT 090H.0
ACC DATA 0E0H
ET0 BIT 0A8H.1
ET1 BIT 0A8H.3
TF0 BIT 088H.5
TF1 BIT 088H.7
RB8 BIT 098H.2
TH0 DATA 08CH
RunLed BIT 090H.7
EX0 BIT 0A8H.0
IT0 BIT 088H.0
TH1 DATA 08DH
TB8 BIT 098H.3
EX1 BIT 0A8H.2
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
PT1 BIT 0B8H.3
RS0 BIT 0D0H.3
TR0 BIT 088H.4
RS1 BIT 0D0H.4
TR1 BIT 088H.6
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
halfMinLed BIT 090H.5
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
?PR?init?MAIN SEGMENT CODE
?PR?initsys?MAIN SEGMENT CODE
?PR?main?MAIN SEGMENT CODE
?PR?intersvr1?MAIN SEGMENT CODE
?PR?time1?MAIN SEGMENT CODE
?PR?time0?MAIN SEGMENT CODE
?PR?_Delay?MAIN SEGMENT CODE
?DT?_Delay?MAIN SEGMENT DATA OVERLAYABLE
?PR?dlyus?MAIN SEGMENT CODE
?DT?MAIN SEGMENT DATA
EXTRN CODE (?C_STARTUP)
PUBLIC base
PUBLIC dlyus
PUBLIC _Delay
PUBLIC time0
PUBLIC time1
PUBLIC intersvr1
PUBLIC main
PUBLIC initsys
PUBLIC init
RSEG ?DT?_Delay?MAIN
?_Delay?BYTE:
dtime?60: DS 2
ORG 2
i?61: DS 1
j?61: DS 1
RSEG ?DT?MAIN
base: DS 2
; //说明:
; //曲轴脉冲信号进入ECU之前接入延时装置
; //中断TX1----曲轴脉冲信号 (输入)
; //P1^2----延时输出曲轴脉冲信号 (输出)
; //延时时间计算 360 X 角度(inputAngle)/256
; //作者:邓天民
; //时间:2005/07/26
; //补充;程序中有很多可以删除
;
; #include <reg51.h>
; #include <stdio.h>
; #include <intrins.h>
; #include <absacc.h>
;
; #define UINT unsigned int
; #define UCHAR unsigned char
;
; sbit RunLed = P1^7; //程序正常标志
; sbit halfMinLed = P1^5; //半秒信号
; sbit TurnLed = P1^0; //曲轴转动输出信号
;
; volatile UINT base; // 基本定时单元
;
; void Delay(int dtime); // 延时
; void dlyus();
; //--------------------------------------------------------------------------
; // 变量初始化子程序
; //--------------------------------------------------------------------------
; void init()
RSEG ?PR?init?MAIN
USING 0
init:
; SOURCE LINE # 29
; {
; SOURCE LINE # 30
; RunLed = 1;
; SOURCE LINE # 31
SETB RunLed
; TurnLed = 1;
; SOURCE LINE # 32
SETB TurnLed
; }
; SOURCE LINE # 33
RET
; END OF init
; //--------------------------------------------------------------------------
; // 系统初始化,初始化寄存器
; //--------------------------------------------------------------------------
; void initsys()
RSEG ?PR?initsys?MAIN
USING 0
initsys:
; SOURCE LINE # 37
; {
; SOURCE LINE # 38
; EA = 1; //全局中断允许
; SOURCE LINE # 39
SETB EA
; ET0 = 1; //定时器0中断允许
; SOURCE LINE # 40
SETB ET0
; ET1 = 1; //定时器1中断允许
; SOURCE LINE # 41
SETB ET1
; // PT1 = 1; //T1中断优先级最高
; TMOD = 0x11; //T0工作方式1,计时1ms
; SOURCE LINE # 43
MOV TMOD,#011H
; TH0=0xFC;
; SOURCE LINE # 44
MOV TH0,#0FCH
; TL0=0x21;
; SOURCE LINE # 45
MOV TL0,#021H
; TR0 = 1; //启动T0;
; SOURCE LINE # 46
SETB TR0
;
; //外部中断1
; IT1=1; //负跳变触发
; SOURCE LINE # 49
SETB IT1
; EX1=1; //外中断1允许
; SOURCE LINE # 50
SETB EX1
; PX1 = 1;
; SOURCE LINE # 51
SETB PX1
; }
; SOURCE LINE # 52
RET
; END OF initsys
; //--------------------------------------------------------------------------
; // 主程序
; //--------------------------------------------------------------------------
; void main(void)
RSEG ?PR?main?MAIN
USING 0
main:
; SOURCE LINE # 56
; {
; SOURCE LINE # 57
; init(); //变量初始化
; SOURCE LINE # 58
LCALL init
; initsys(); //系统初始化
; SOURCE LINE # 59
LCALL initsys
?C0003:
; while(1){
; SOURCE LINE # 60
; Delay(500);
; SOURCE LINE # 61
MOV R7,#0F4H
MOV R6,#01H
LCALL _Delay
; }
; SOURCE LINE # 62
SJMP ?C0003
; }
; SOURCE LINE # 63
RET
; END OF main
CSEG AT 00013H
LJMP intersvr1
; //--------------------------------------------------------------------------
; // 中断1子程序//点火信号检测
; //--------------------------------------------------------------------------
; void intersvr1(void) interrupt 2 using 1
RSEG ?PR?intersvr1?MAIN
USING 1
intersvr1:
; SOURCE LINE # 67
; {
; //曲轴转动信号处理
; TurnLed = 1;
; SOURCE LINE # 70
SETB TurnLed
; TH1=0xEC;
; SOURCE LINE # 71
MOV TH1,#0ECH
; TL1=0x77;
; SOURCE LINE # 72
MOV TL1,#077H
; TR1 = 1; //启动T1;
; SOURCE LINE # 73
SETB TR1
; }
; SOURCE LINE # 74
RETI
; END OF intersvr1
CSEG AT 0001BH
LJMP time1
; //--------------------------------------------------------------------------
; // T1中断子程序
; //--------------------------------------------------------------------------
; void time1(void) interrupt 3 using 1
RSEG ?PR?time1?MAIN
USING 1
time1:
; SOURCE LINE # 78
; {
; TurnLed = 0;
; SOURCE LINE # 80
CLR TurnLed
; TR1 = 0; //停止T1;
; SOURCE LINE # 81
CLR TR1
; }
; SOURCE LINE # 82
RETI
; END OF time1
CSEG AT 0000BH
LJMP time0
; //--------------------------------------------------------------------------
; // T0中断子程序
; //--------------------------------------------------------------------------
; void time0(void) interrupt 1 using 1
RSEG ?PR?time0?MAIN
USING 1
time0:
PUSH ACC
PUSH PSW
MOV PSW,#08H
; SOURCE LINE # 86
; {
; TH0=0xFC;
; SOURCE LINE # 88
MOV TH0,#0FCH
; TL0=0x21;
; SOURCE LINE # 89
MOV TL0,#021H
; if(++base==1000){ //1秒信号
; SOURCE LINE # 90
INC base+01H
MOV A,base+01H
JNZ ?C0020
INC base
?C0020:
MOV R6,base
CJNE A,#0E8H,?C0008
MOV A,R6
CJNE A,#03H,?C0008
; base = 0;
; SOURCE LINE # 91
CLR A
MOV base,A
MOV base+01H,A
; halfMinLed = !halfMinLed;
; SOURCE LINE # 92
CPL halfMinLed
; RunLed = !RunLed;
; SOURCE LINE # 93
CPL RunLed
; }else if(base==500){ //半秒信号
; SOURCE LINE # 94
SJMP ?C0011
?C0008:
MOV A,base+01H
CJNE A,#0F4H,?C0011
MOV A,base
CJNE A,#01H,?C0011
; halfMinLed = !halfMinLed;
; SOURCE LINE # 95
CPL halfMinLed
; }
; SOURCE LINE # 96
; }
; SOURCE LINE # 97
?C0011:
POP PSW
POP ACC
RETI
; END OF time0
; //延时dtime 毫秒
; void Delay(int dtime)
RSEG ?PR?_Delay?MAIN
USING 0
_Delay:
MOV dtime?60,R6
MOV dtime?60+01H,R7
; SOURCE LINE # 99
; {
; SOURCE LINE # 100
; UCHAR i,j;
; for(i=0;i<dtime;i++)
; SOURCE LINE # 102
CLR A
MOV i?61,A
?C0012:
CLR C
MOV A,i?61
SUBB A,dtime?60+01H
MOV A,dtime?60
XRL A,#080H
MOV R0,A
MOV A,#080H
SUBB A,R0
JNC ?C0018
; {
; SOURCE LINE # 103
; for(j=0;j<250;j++)
; SOURCE LINE # 104
CLR A
MOV j?61,A
?C0015:
MOV A,j?61
CLR C
SUBB A,#0FAH
JNC ?C0014
; {
; SOURCE LINE # 105
; dlyus(); // 延时40us
; SOURCE LINE # 106
LCALL dlyus
; }
; SOURCE LINE # 107
INC j?61
SJMP ?C0015
; }
; SOURCE LINE # 108
?C0014:
INC i?61
SJMP ?C0012
; }
; SOURCE LINE # 109
?C0018:
RET
; END OF _Delay
; //---------------------------------------------------------------------------
; // 延时函数,延时时间为28*4/12=us+调用和返回时间,大约为40us
; //---------------------------------------------------------------------------
; void dlyus()
RSEG ?PR?dlyus?MAIN
USING 0
dlyus:
; SOURCE LINE # 113
; {
; SOURCE LINE # 114
; _nop_();_nop_();_nop_();_nop_();_nop_();
; SOURCE LINE # 115
NOP
NOP
NOP
NOP
NOP
; _nop_();_nop_();_nop_();_nop_();_nop_();
; SOURCE LINE # 116
NOP
NOP
NOP
NOP
NOP
; _nop_();_nop_();_nop_();_nop_();_nop_();
; SOURCE LINE # 117
NOP
NOP
NOP
NOP
NOP
; _nop_();_nop_();_nop_();_nop_();_nop_();
; SOURCE LINE # 118
NOP
NOP
NOP
NOP
NOP
; _nop_();_nop_();_nop_();_nop_();_nop_();
; SOURCE LINE # 119
NOP
NOP
NOP
NOP
NOP
; _nop_();_nop_();_nop_();
; SOURCE LINE # 120
NOP
NOP
NOP
; } ; SOURCE LINE # 121
RET
; END OF dlyus
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -