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

📄 zhineng.txt

📁 智能IC卡燃气表控制系统里的工作是在软件支持下完成各项功能的
💻 TXT
字号:
ORG 0000H
AJMP MAIN
IO EQU P1.0 
ICRESET EQU P1.2
CLK EQU P1.1
LLJC EQU P1.3
CS EQU P1.3
SCK EQU P1.4
SI EQU P1.5
SO EQU P1.6
XRESET EQU P1.7
BAOJING EQU P3.1
JILANG EQU P3.2

ORG 0030H                                 ;主程序开始
MAIN:NOP                                  ;初始化系统
CLR P3.0
CLR P3.1
NOP                                       ;判断是否有卡插入
MOV C,S2
JC EEPROM1
AJMP CARD1
EEPROM:LCALL EEPROM                       ;无卡插入
AJMP DIS
CARD:LCALL CARD                           ;有卡插入
NOP
DIS:NOP
NOP
MOV TCON,#07H
MOV TMOD,#61H
MOV TH0,#3CH
MOV TLO,#0B0H
MOV TH1,#0F8H
MOV TL1,#0F8H
MOV IEN0,#0A5H
SETB ET0
SETB TR0
SETB EB0
MOV AUXR1,#22H
MOV 87H,#02H
AJMP LOOP                                 ;主程序结束

------------------------------------------------------------------------------
IC卡读子程序
IC卡读写程序如下:
ORG0100h
READ:MOVR0,#30H                          ;设置存放IC卡读入数
据的首地址为30H
LCALLRESET                               ;调IC卡复位子程序
MOVR2,#10H                               ;读IC卡数据的个数送R2
LCALLSTART                               ;调起始条件子程序
MOVR5,#00110000B                         ;发送读的命令码
LCALLSPOUT                               ;调发送一个字节子程序
MOVR5,#20H                               ;发送IC卡的起始地址
LCALLSPOUT
MOVR5,#00H                               ;将数据00H发送出去
LCALLSPOUT
LCALLSTOP                                ;调停止条件子程序
READ1:LCALLSPINC                         ;调数据采集子程序
MOVA,R6                                  ;将数据采集子程序读入的一
个字节的数据,送到
MOV@R0,A                                 ;30H为首地址的RAM中
INCR0
DJNZR2,READ1
LCALLPLUSE                               ;调发送脉冲子程序
RET
PROCE:MOVR3,#0FFH                        ;一个编程过程子程序
PROC1:SETBP1.2
NOP
CLRP1.2
DJNZR3,PROC1
RET
SPINC:MOVR3,#08H                         ;数据采集子程序
SPIN1:CLRP1.2
MOVC,P1.4
MOVA,R6
RLCA
MOVR6,A
SETBP1.2
DJNZR3,SPIN1
RET
SPOUT:MOVR3,#08H                         ;一个字节发送子程序
MOVA,R5
SPTC1:CLRP1.2
RLCA
MOVP1.4,C
NOP
SETBP1.2
DJNZR3,SPTC1
RET
START:SETBP1.2                            ;起始条件子程序
NOP
CLRP1.4
NOP
RET
STOP:CLRP1.2                             ;停止条件子程序
NOP
CLRP1.4
NOP
SETBP1.2
CLRC
CLRA
SETBP1.4
RET
PLUSE:CLRP1.2                             ;发送一个脉冲子程序
NOP
SETBP1.2
NOP
CLRP1.2
RET
RESET:SETBP1.3                            ;IC卡复位子程序
NOP
CLRP1.3
NOP
RET
END

-------------------------------------------------------------------------------
EEPROM读写子程序。
 
SCK EQU P1.4 
SI EQU P1.5 
SO EQU P1.6
CS EQU P1.3 
WP EQU P1.7 

RDEEM:MOV R0,#52H                       ;缓冲区地址 
LCALL STA3 
MOV A,#03H                               ;读操作码
LCALL WRE0
MOV A,#04H                               ;E2PROM地址
LCALL WRE0 
LCALL RDEM 3
MOV @R0,A 
SETB CS 
RET 
STA3SETB CS                               ;开始子程序 
CLR SCK 
NOP 
CLR CS 
NOP 
RET 
RDEMB3:MOV R3,#8                           ;读1字节子程序 
REBO: SETB SCK 
MOV C,SO 
RLC  A 
NOP 
CLR SCK 
NOP 
DJNZ R3,REB0 
RET 
WRE0: MOV R3,#8                            ;写1字节子程序 
WRE1: RLC A 
MOV SI,C 
SETB SCK 
NOP 
CLR SCK 
NOP 
DJNZ R3,WREl 
RET 
-----------------------------------------------------------------
E2 PROM写子程序WREEM 
功能:将写缓冲区4EH中的数据写入E2 PROM 中的04H 
WREEM: SETB WP 
MOV RO,#4EH                      ;缓冲区地址 
LCALL STA3 
MOV A,#06H                       ;允许写操作码 
LCALL WRB0 
SETB CS 
LCALL STA3 
MOV A,#02H                       ;写操作码 
LCALL WRE0 
MOV A,#04H                       ;E2 PROM 地址 
LCALL WREO 
MOV A;@RO 
LCALL WRE0 
SETB CS 
NOP 
CLR WP 
RET

―――――――――――――――――――――――――――――――――
EEPROM:NOP                       ;判断中余额程序
MOV 50H,#01H
LCALL RD_DATA
MOV 24H,A
MOV 50H,#02H
LCALL RD_DATA

BAOJING:MOV A,25H
MOV A,24H
CLR C
ADDC A,#0F5H
JC LESS5
LESS5:LCALL KAIFA
LCALL BAOJING01
RET
――――――――――――――――――――――――――――――――――――――

GUANFA:SETB JD2                           ;开关电磁阀
SETB JD1
LCALL JD1
CLR JD1
CLR JD2
MOV 38H,#0AAH
RET
KAIFA:CLR JD2
SETB JD1
LCALL DEL5
CLR JD1
LCALL DEL5
MOV 38H,#0BBH
RET
-------------------------------------------------------------------------
显示子程序
a_bit equ 20h                             ;千位
b_bit equ 21h                             ;百位
c_bit equ 22h                             ;十位
d_bit equ 23h                             ;个位
e_bit equ 24h                             ;小数点后第一位
f_bit equ 25h                             ;小数点后第二位
temp equ 26h                              ;计数器数值存放位置
temp1 equ 27h

star:mov temp,#0                          ;初始化,从0开始
mov temp1,#0 
stlop:acall display                        ;调用显示子程序
inc temp                                   ;计数器加1
mov a,temp
cjne a,#100,next                           ;判断是否满100
mov temp,#0 
inc temp1
mov a,temp1
cjne a,#60,next
mov temp1,#0                               ;清0
mov temp,#0;
next:ljmp stlop                            ;不满则循环

display:mov a,temp                         ;将temp中十六进制数转换成十进制数
mov b,#10                                  ;10/10=10进制
div ab
mov b_bit,a                                ;小数点后第一位在a
mov a_bit,b                                ;小数点后第二位在b
mov a,temp1
mov b,#10
div ab
mov c_bit,a                                ;十位在c
mov d_bit,b                                ;个位在d

div ab
mov e_bit,a                                ;千位在e
mov f_bit,b                                ;百位在f

mov dptr,#numtab                           ;指定查表地址
;mov r0,#2;4
dpl1: mov r1
dplop: mov a,f_bit                         ;取小数点后第二位
MOVC A,@A+DPTR                              ;查个位数的7段代码
mov p0,a                                    ;送出个位的7段
clr p2.5                                    ;开个位显示
acall d1ms                                  ;调用延时
setb p2.5                                   ;关毕显示
mov a,b_bit
MOVC A,@A+DPTR
mov p0,a 
clr p2.4
acall d1ms 
setb p2.4
mov a,d_bit 
MOVC A,@A+DPTR 
mov p0,a 
clr p2.3
acall d1ms 
setb p2.3
mov a,c_bit
MOVC A,@A+DPTR
mov p0,a 
clr p2.2
acall d1ms 
setb p2.2
mov p0,a 
clr p2.1 
acall d1ms 
setb p2.1
mov a,b_bit 
MOVC A,@A+DPTR 
mov p0,a 
clr p2.0 
acall d1ms 
setb p2.0
mov a,b_bit 
MOVC A,@A+DPTR 

djnz r1,dplop 
djnz r0,dpl1 
ret

2+2X80=162微秒延时,按12MHZ频率算
D1MS: MOV R7,#80
DJNZ R7,$
RET
――――――――――――――――――――――――――――――――――――――
实验板上的7段数码管0~9数字的共阴显示代码
numtab:DB 0EBH,00AH,067H,06EH,08EH,0ECH,0EDH,02AH,0EFH,0EEH
end




















ORG 0000H
AJMP MAIN
IO EQU P1.0 
ICRESET EQU P1.2
CLK EQU P1.1
LLJC EQU P1.3
CS EQU P1.3
SCK EQU P1.4
SI EQU P1.5
SO EQU P1.6
XRESET EQU P1.7
BAOJING EQU P3.1
JILANG EQU P3.2

ORG 0030H                                 ;主程序开始
MAIN:NOP                                  ;初始化系统
CLR P3.0
CLR P3.1
NOP                                       ;判断是否有卡插入
MOV C,S2
JC EEPROM1
AJMP CARD1
EEPROM:LCALL EEPROM                       ;无卡插入
AJMP DIS
CARD:LCALL CARD                           ;有卡插入
NOP
DIS:NOP
NOP
MOV TCON,#07H
MOV TMOD,#61H
MOV TH0,#3CH
MOV TLO,#0B0H
MOV TH1,#0F8H
MOV TL1,#0F8H
MOV IEN0,#0A5H
SETB ET0
SETB TR0
SETB EB0
MOV AUXR1,#22H
MOV 87H,#02H
AJMP LOOP                                 ;主程序结束

------------------------------------------------------------------------------
IC卡读子程序
IC卡读写程序如下:
ORG0100h
READ:MOVR0,#30H                          ;设置存放IC卡读入数
据的首地址为30H
LCALLRESET                               ;调IC卡复位子程序
MOVR2,#10H                               ;读IC卡数据的个数送R2
LCALLSTART                               ;调起始条件子程序
MOVR5,#00110000B                         ;发送读的命令码
LCALLSPOUT                               ;调发送一个字节子程序
MOVR5,#20H                               ;发送IC卡的起始地址
LCALLSPOUT
MOVR5,#00H                               ;将数据00H发送出去
LCALLSPOUT
LCALLSTOP                                ;调停止条件子程序
READ1:LCALLSPINC                         ;调数据采集子程序
MOVA,R6                                  ;将数据采集子程序读入的一
个字节的数据,送到
MOV@R0,A                                 ;30H为首地址的RAM中
INCR0
DJNZR2,READ1
LCALLPLUSE                               ;调发送脉冲子程序
RET
PROCE:MOVR3,#0FFH                        ;一个编程过程子程序
PROC1:SETBP1.2
NOP
CLRP1.2
DJNZR3,PROC1
RET
SPINC:MOVR3,#08H                         ;数据采集子程序
SPIN1:CLRP1.2
MOVC,P1.4
MOVA,R6
RLCA
MOVR6,A
SETBP1.2
DJNZR3,SPIN1
RET
SPOUT:MOVR3,#08H                         ;一个字节发送子程序
MOVA,R5
SPTC1:CLRP1.2
RLCA
MOVP1.4,C
NOP
SETBP1.2
DJNZR3,SPTC1
RET
START:SETBP1.2                            ;起始条件子程序
NOP
CLRP1.4
NOP
RET
STOP:CLRP1.2                             ;停止条件子程序
NOP
CLRP1.4
NOP
SETBP1.2
CLRC
CLRA
SETBP1.4
RET
PLUSE:CLRP1.2                             ;发送一个脉冲子程序
NOP
SETBP1.2
NOP
CLRP1.2
RET
RESET:SETBP1.3                            ;IC卡复位子程序
NOP
CLRP1.3
NOP
RET
END

-------------------------------------------------------------------------------
EEPROM读写子程序。
 
SCK EQU P1.4 
SI EQU P1.5 
SO EQU P1.6
CS EQU P1.3 
WP EQU P1.7 

RDEEM:MOV R0,#52H                       ;缓冲区地址 
LCALL STA3 
MOV A,#03H                               ;读操作码
LCALL WRE0
MOV A,#04H                               ;E2PROM地址
LCALL WRE0 
LCALL RDEM 3
MOV @R0,A 
SETB CS 
RET 
STA3SETB CS                               ;开始子程序 
CLR SCK 
NOP 
CLR CS 
NOP 
RET 
RDEMB3:MOV R3,#8                           ;读1字节子程序 
REBO: SETB SCK 
MOV C,SO 
RLC  A 
NOP 
CLR SCK 
NOP 
DJNZ R3,REB0 
RET 
WRE0: MOV R3,#8                            ;写1字节子程序 
WRE1: RLC A 
MOV SI,C 
SETB SCK 
NOP 
CLR SCK 
NOP 
DJNZ R3,WREl 
RET 
-----------------------------------------------------------------
E2 PROM写子程序WREEM 
功能:将写缓冲区4EH中的数据写入E2 PROM 中的04H 
WREEM: SETB WP 
MOV RO,#4EH                      ;缓冲区地址 
LCALL STA3 
MOV A,#06H                       ;允许写操作码 
LCALL WRB0 
SETB CS 
LCALL STA3 
MOV A,#02H                       ;写操作码 
LCALL WRE0 
MOV A,#04H                       ;E2 PROM 地址 
LCALL WREO 
MOV A;@RO 
LCALL WRE0 
SETB CS 
NOP 
CLR WP 
RET

―――――――――――――――――――――――――――――――――
EEPROM:NOP                       ;判断中余额程序
MOV 50H,#01H
LCALL RD_DATA
MOV 24H,A
MOV 50H,#02H
LCALL RD_DATA

BAOJING:MOV A,25H
MOV A,24H
CLR C
ADDC A,#0F5H
JC LESS5
LESS5:LCALL KAIFA
LCALL BAOJING01
RET
――――――――――――――――――――――――――――――――――――――

GUANFA:SETB JD2                           ;开关电磁阀
SETB JD1
LCALL JD1
CLR JD1
CLR JD2
MOV 38H,#0AAH
RET
KAIFA:CLR JD2
SETB JD1
LCALL DEL5
CLR JD1
LCALL DEL5
MOV 38H,#0BBH
RET
-------------------------------------------------------------------------
显示子程序
a_bit equ 20h                             ;千位
b_bit equ 21h                             ;百位
c_bit equ 22h                             ;十位
d_bit equ 23h                             ;个位
e_bit equ 24h                             ;小数点后第一位
f_bit equ 25h                             ;小数点后第二位
temp equ 26h                              ;计数器数值存放位置
temp1 equ 27h

star:mov temp,#0                          ;初始化,从0开始
mov temp1,#0 
stlop:acall display                        ;调用显示子程序
inc temp                                   ;计数器加1
mov a,temp
cjne a,#100,next                           ;判断是否满100
mov temp,#0 
inc temp1
mov a,temp1
cjne a,#60,next
mov temp1,#0                               ;清0
mov temp,#0;
next:ljmp stlop                            ;不满则循环

display:mov a,temp                         ;将temp中十六进制数转换成十进制数
mov b,#10                                  ;10/10=10进制
div ab
mov b_bit,a                                ;小数点后第一位在a
mov a_bit,b                                ;小数点后第二位在b
mov a,temp1
mov b,#10
div ab
mov c_bit,a                                ;十位在c
mov d_bit,b                                ;个位在d

div ab
mov e_bit,a                                ;千位在e
mov f_bit,b                                ;百位在f

mov dptr,#numtab                           ;指定查表地址
;mov r0,#2;4
dpl1: mov r1
dplop: mov a,f_bit                         ;取小数点后第二位
MOVC A,@A+DPTR                              ;查个位数的7段代码
mov p0,a                                    ;送出个位的7段
clr p2.5                                    ;开个位显示
acall d1ms                                  ;调用延时
setb p2.5                                   ;关毕显示
mov a,b_bit
MOVC A,@A+DPTR
mov p0,a 
clr p2.4
acall d1ms 
setb p2.4
mov a,d_bit 
MOVC A,@A+DPTR 
mov p0,a 
clr p2.3
acall d1ms 
setb p2.3
mov a,c_bit
MOVC A,@A+DPTR
mov p0,a 
clr p2.2
acall d1ms 
setb p2.2
mov p0,a 
clr p2.1 
acall d1ms 
setb p2.1
mov a,b_bit 
MOVC A,@A+DPTR 
mov p0,a 
clr p2.0 
acall d1ms 
setb p2.0
mov a,b_bit 
MOVC A,@A+DPTR 

djnz r1,dplop 
djnz r0,dpl1 
ret

2+2X80=162微秒延时,按12MHZ频率算
D1MS: MOV R7,#80
DJNZ R7,$
RET
――――――――――――――――――――――――――――――――――――――
实验板上的7段数码管0~9数字的共阴显示代码
numtab:DB 0EBH,00AH,067H,06EH,08EH,0ECH,0EDH,02AH,0EFH,0EEH
end




















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -