📄 bujinchengxu.asm
字号:
ORG 0000H
LJMP MONEY
ORG 0003H;INT0入口地址,进入外部脉冲中断服务程序
AJMP MONEY1
ORG 000BH;T0入口
AJMP MONEY0;定时器中断,进入内部定时方式中断程序
ORG 0013H;INT1入口地址
JNB P2.0,SDZH
AJMP TINGBAO
ORG 0001BH;T1入口,显示定时器
LJMP DINGSHI;跳到扫描显示程序
SDZH:CLR 00H;设定电流标志位
RETI
TINGBAO:MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
MOV PCON,#2H;启动停保.
MONEY:MOV SP,#60H
SETB 00H
SETB 01H
MOV 21H,#0FFH
;**************电流初始化程序*******************
MOV P1,33H;
CLR P2.5
NOP
NOP
NOP
SETB P2.5
MOV P1,#0H
;***********开启显示定时器T1*******************
MOV TL1,#0H;设置定时器T1低位值
MOV TH1,#0FBH;设置定时器T1高位值
MOV TMOD,#19H
SETB ET1;开放T1
SETB TR1;启动定时器T1
SETB TR0;开启定时器T0
SETB EX1;开放INT1中断
SETB IT0;让INT0为脉冲下降沿中断模式.
CLR EA;屏蔽所有中断源
;***********************程序流向转换程序******************
JB 05H,ZDZB
CLR EX0;关闭INT0中断,既关断外部模式
MOV TL0,35H;内部方式频率低位
MOV TH0,36H;内部方式频率高位
SETB ET0;开放定时器T0,既内部中断模式定时器.
AJMP ZDZB1
;***********************中断前准备程序*********************
ZDZB:MOV TMOD,#10H;"中断准备"设定定时器工作模式,此时定时器T0未被设定,T1为16位定时器.
SETB EX0;开放INT0中断
CLR ET0;关闭定时器T0,既关闭内部模式.
ZDZB1:SETB P3.7;CS,WR
SETB P3.0
MOV 30H,#0H;A
MOV 31H,#90
SETB P3.4;A
CLR P3.5;B
SETB EA
XSDQMC:;显示当前以运行脉冲数.
MOV 40H,#3FH
MOV 41H,#0H
MOV 42H,#0H
MOV 43H,#0H
MOV 44H,#80H
MOV 45H,#80H
MOV 46H,#80H
BAIWANWEI:ACALL SHIWANWEI;百万位
MOV 46H,#86H;1
ACALL SHIWANWEI
MOV 46H,#0DBH;2
ACALL SHIWANWEI
MOV 46H,#0CFH;3
ACALL SHIWANWEI
MOV 46H,#0E6H;4
ACALL SHIWANWEI
MOV 46H,#0EDH;5
ACALL SHIWANWEI
MOV 46H,#0FDH;6
ACALL SHIWANWEI
MOV 46H,#87H;7
ACALL SHIWANWEI
MOV 46H,#0FFH;8
ACALL SHIWANWEI
MOV 46H,#0EFH;9
ACALL SHIWANWEI
AJMP XSDQMC;
SHIWANWEI:ACALL WANWEI;十万位
MOV 45H,#86H;1
ACALL WANWEI
MOV 45H,#0DBH;2
ACALL WANWEI
MOV 45H,#0CFH;3
ACALL WANWEI
MOV 45H,#0E6H;4
ACALL WANWEI
MOV 45H,#0EDH;5
ACALL WANWEI
MOV 45H,#0FDH;6
ACALL WANWEI
MOV 45H,#87H;7
ACALL WANWEI
MOV 45H,#0FFH;8
ACALL WANWEI
MOV 45H,#0EFH;9
ACALL WANWEI
MOV 45H,#0BFH;0
RET
WANWEI:ACALL QIANWEI;万位
MOV 44H,#86H;1
ACALL QIANWEI
MOV 44H,#0DBH;2
ACALL QIANWEI
MOV 44H,#0CFH;3
ACALL QIANWEI
MOV 44H,#0E6H;4
ACALL QIANWEI
MOV 44H,#0EDH;5
ACALL QIANWEI
MOV 44H,#0FDH;6
ACALL QIANWEI
MOV 44H,#87H;7
ACALL QIANWEI
MOV 44H,#0FFH;8
ACALL QIANWEI
MOV 44H,#0EFH;9
ACALL QIANWEI
MOV 44H,#0BFH;0
RET
QIANWEI:ACALL BAIWEI;千位
MOV 43H,#6H;1
ACALL BAIWEI
MOV 43H,#5BH;2
ACALL BAIWEI
MOV 43H,#4FH;3
ACALL BAIWEI
MOV 43H,#66H;4
ACALL BAIWEI
MOV 43H,#6DH;5
ACALL BAIWEI
MOV 43H,#7DH;6
ACALL BAIWEI
MOV 43H,#7H;7
ACALL BAIWEI
MOV 43H,#7FH;8
ACALL BAIWEI
MOV 43H,#6FH;9
ACALL BAIWEI
MOV 43H,#3FH;0
RET
BAIWEI:ACALL SHIWEI;百位
MOV 42H,#6H;1
ACALL SHIWEI
MOV 42H,#5BH;2
ACALL SHIWEI
MOV 42H,#4FH;3
ACALL SHIWEI
MOV 42H,#66H;4
ACALL SHIWEI
MOV 42H,#6DH;5
ACALL SHIWEI
MOV 42H,#7DH;6
ACALL SHIWEI
MOV 42H,#7H;7
ACALL SHIWEI
MOV 42H,#7FH;8
ACALL SHIWEI
MOV 42H,#6FH;9
ACALL SHIWEI
MOV 42H,#3FH;0
RET
SHIWEI:ACALL GEWEI;十位
MOV 41H,#6H;1
ACALL GEWEI
MOV 41H,#5BH;2
ACALL GEWEI
MOV 41H,#4FH;3
ACALL GEWEI
MOV 41H,#66H;4
ACALL GEWEI
MOV 41H,#6DH;5
ACALL GEWEI
MOV 41H,#7DH;6
ACALL GEWEI
MOV 41H,#7H;7
ACALL GEWEI
MOV 41H,#7FH;8
ACALL GEWEI
MOV 41H,#6FH;9
ACALL GEWEI
MOV 41H,#3FH;0
RET
GEWEI:MOV 40H,#3FH;0
ACALL JISHU
MOV 40H,#6H;1
ACALL JISHU
MOV 40H,#5BH;2
ACALL JISHU
MOV 40H,#4FH;3
ACALL JISHU
MOV 40H,#66H;4
ACALL JISHU
MOV 40H,#6DH;5
ACALL JISHU
MOV 40H,#7DH;6
ACALL JISHU
MOV 40H,#7H;7
ACALL JISHU
MOV 40H,#7FH;8
ACALL JISHU
MOV 40H,#6FH;9
ACALL JISHU
RET
;{以下为一大段,"JISHU"到"JNB1"上行为脉冲记数和判断是否到设定值.
;*****以下为判断是否到设定脉冲数程序***(内部模式才进入此程序)
JISHU:JB 05H,JNB15;判断是外部模式还是内部模式
MOV A,45H;
CJNE A,55H,JNB15;内部方式脉冲数保存位和当前位比较,不等转移.
MOV A,44H
CJNE A,54H,JNB15
MOV A,43H
CJNE A,53H,JNB15
MOV A,42H
CJNE A,52H,JNB15
MOV A,41H
CJNE A,51H,JNB15
MOV A,40H
CJNE A,50H,JNB15;跳到判断是否跳向设定电流
AJMP1:JB P3.2,JNB16;内部定时模式在此停止,当外部出现一定时间的连续低电平重起.
;以下延时抗干扰**
MOV R4,#4;
D16:MOV R5,#4;
D15:DJNZ R5,D15;重起内部模式程序段,(抗干扰内部分)
JB P3.2,JNB16;
DJNZ R4,D16;
JB P3.2,JNB16
;以上延时抗干扰
SETB ET0;开启内部模式
AJMP XSDQMC
JNB16:CLR ET0;关闭T0,既内部模式.
JNB 00H,JNB1;
AJMP AJMP1
JNB15:JNB 00H,JNB1;判断是否跳向设定程序.
JB 01H,JISHU;对脉冲记数转换位
SETB 01H
RET
;}以上为一大段,从"JISHU"到此处为对脉冲记数和对内部方式比较是否到设定数程序
JNB1:LJMP SHEDING
;***********接收脉冲中断服务程序**************************************
MONEY0:MOV TL0,35H;重装定时器TL0
MOV TH0,36H;重装定时器TH0
MONEY1:MOV DPTR,#BIAO
MOV A,30H;A的查表数据缓存区
CJNE A,#180,D0;比较A的数据缓存是否到达最大值,46
MOV 30H,#0H;当等于46时,移初始值到30H中
MOV A,30H
CPL P3.4;A,把P3.6取反,让A相电流反相
D0:MOVC A,@A+DPTR;查表,并把对应值移入A中
MOV p1,A;A
CLR P3.6;A把数据写入到A相寄存器
CLR P3.7;CS,WR
SETB P3.7;CS,WR
MOV A,31H;B
CJNE A,#180,D1
MOV 31H,#0H
MOV A,31H
CPL P3.5;B,把P3.7取反,让B相电流反相
D1:MOV DPTR,#BIAO
MOVC A,@A+DPTR
MOV P1,A;B
SETB P3.6;B把数值写入到B相寄存器
CLR P3.7;CS,WR
SETB P3.7
MOV A,30H
ADD A,32H;A
MOV 30H,A
MOV A,31H
ADD A,32H;B
MOV 31H,A
CLR 01H
;CLR 04H;在其它程序中自动转向当前脉冲显示标志位
RETI
;*********************细分真值表**************************************
BIAO:DB 0;0
DB 4;1
DB 9;2
DB 13;3
DB 18;4
DB 22;5
DB 27;6
DB 31;7
DB 35;8
DB 40;9
DB 44;10
DB 49;11
DB 53;12
DB 57;13
DB 62;14
DB 66;15
DB 70;16
DB 75;17
DB 79;18
DB 83;19
DB 87;20
DB 91;21
DB 96;22
DB 100;23
DB 104;24
DB 108;25
DB 112;26
DB 116;27
DB 120;28
DB 124;29
DB 128;30
DB 131;31
DB 135;32
DB 139;33
DB 143;34
DB 146;35
DB 150;36
DB 153;37
DB 157;38
DB 160;39
DB 164;40
DB 167;41
DB 171;42
DB 174;43
DB 177;44
DB 180;45
DB 183;46
DB 186;47
DB 189;48
DB 192;49
DB 195;50
DB 198;51
DB 201;52
DB 204;53
DB 206;54
DB 209;55
DB 211;56
DB 214;57
DB 216;58
DB 219;59
DB 221;60
DB 223;61
DB 225;62
DB 227;63
DB 229;64
DB 231;65
DB 233;66
DB 235;67
DB 236;68
DB 238;69
DB 240;70
DB 241;71
DB 243;72
DB 244;73
DB 245;74
DB 246;75
DB 247;76
DB 248;77
DB 249;78
DB 250;79
DB 251;80
DB 252;81
DB 253;82
DB 253;83
DB 254;84
DB 254;85
DB 254;86
DB 255;87
DB 255;88
DB 255;89
DB 255;90
DB 255;91
DB 255;92
DB 255;93
DB 255;94
DB 254;95
DB 254;96
DB 254;97
DB 253;98
DB 253;99
DB 252;100
DB 251;101
DB 250;102
DB 249;103
DB 248;104
DB 247;105
DB 246;106
DB 245;107
DB 244;108
DB 243;109
DB 241;110
DB 240;111
DB 238;112
DB 236;113
DB 235;114
DB 233;115
DB 231;116
DB 229;117
DB 227;118
DB 225;119
DB 223;120
DB 221;121
DB 219;122
DB 216;123
DB 214;124
DB 211;125
DB 209;126
DB 206;127
DB 204;128
DB 201;129
DB 198;130
DB 195;131
DB 192;132
DB 189;133
DB 186;134
DB 183;135
DB 180;136
DB 177;137
DB 174;138
DB 171;139
DB 167;140
DB 164;141
DB 160;142
DB 157;143
DB 153;144
DB 150;145
DB 146;146
DB 143;147
DB 139;148
DB 135;149
DB 131;150
DB 128;151
DB 124;152
DB 120;153
DB 116;154
DB 112;155
DB 108;156
DB 104;157
DB 100;158
DB 96;159
DB 91;160
DB 87;161
DB 83;162
DB 79;163
DB 75;164
DB 70;165
DB 66;166
DB 62;167
DB 57;168
DB 53;169
DB 49;170
DB 44;171
DB 40;172
DB 35;173
DB 31;174
DB 27;175
DB 22;176
DB 18;177
DB 13;178
DB 9;179
DB 4;180
SHEDING:CLR ET0;进入设定程序,屏蔽所有中断.(关闭T0,内部模式)
CLR EX0;(关闭I0,外部模式)
CLR EX1;关闭停电和设定中断源
SETB 00H;关闭进入设定程序标志位,除非重新按设定键,避免循环进入.
SETB 04H;停止进入当前脉冲显示,直到下次中断来临.
MOV 40H,#3FH;进入设定程序后初始显示寄存器各值
MOV 41H,#0H;同上
MOV 42H,#0H;同上
MOV 43H,#0H;同上
MOV 44H,#80H;同上
MOV 45H,#80H;同上
MOV 46H,#80H;同上
;*************以下为程序方向设定程序***********
FX0:MOV 40H,#6H;1显示为"1",表示此时为外部模式.
MOV 41H,#0H
MOV 42H,#0H
MOV 43H,#0H
MOV 44H,#0H
MOV 45H,#0H
MOV 46H,#0H
SETB 05H;开启外部脉冲模式标志位,关闭内部定时模式.
LCALL YANSHIC;延时长
DENGDAI:JB P2.2,DENGDAI
JNB P2.1,JNB7
JNB P2.0,FX1;
AJMP XFBS;跳到设定细分倍数
JNB7:JNB P2.0,DENGDAI
AJMP TUICHU;退出
FX1:MOV 40H,#5BH;显示为"0"表示为内部模式.
CLR 05H;关闭外部脉冲模式标志位,开启内部定时模式.
LCALL YANSHIC;延时长
DENGDAI1:JB P2.2,DENGDAI1;
JNB P2.1,JNB8;按键1
JNB P2.0,FX0;
AJMP SPINLV;跳到设定频率
JNB8:JB P2.0,DENGDAI1
TUICHU:LJMP MONEY
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -