📄 voter.asm
字号:
ORG 0000H
AJMP VOTER
ORG 0030H
;*****************************************************************
;报到子程序
VOTER: MOV A,50H ;50H存放地址命令标志
CJNE A,#255,VOTER_4 ;Ra=255?不等则跳转
CLR P2.5 ;表决状态灯亮,允许表决
SETB EA ;开中断
VOTER_1: MOV C,P2.5 ;p2.5是表决状态显示位
JC VOTER_5 ;(P2.5=1)表决取消则转移
MOV C,P1.2 ;扫描P1.1,P1.1是S2按键
LCALL DELAY_10ms ;延时10ms消抖
ORL C,P1.2 ;再读P1.1状态,看两次结果是否都为0
JC VOTER_2 ;(P1.1=1)S2键没有按下则转移
CLR EA ;关中断
;******************************************************
;需要修改的地址Ra和命令Ri
MOV R2,#00H ;R2存放本机地址,需要修改
MOV R3,#04H ;R3存放命令(04代表同意).需要修改
;******************************************************
LCALL SEND ;调发送子程序
CLR P2.6 ;已报到灯亮
AJMP VOTER_END ;返回
VOTER_2: MOV C,P1.3 ;扫描P1.1,P1.1是S2按键
LCALL DELAY_10ms ;延时10ms消抖
ORL C,P1.3 ;再读P1.1状态,看两次结果是否都为0
JC VOTER_3 ;(P1.1=1)S2键没有按下则转移
CLR EA ;关中断
;******************************************************
;需要修改的地址Ra和命令Ri
MOV R2,#00H ;R2存放本机地址,需要修改
MOV R3,#05H ;R3存放命令(04代表反对).需要修改
;******************************************************
LCALL SEND ;调发送子程序
CLR P2.6 ;已表决灯亮
AJMP VOTER_END ;返回
VOTER_3: MOV C,P1.4 ;扫描P1.1,P1.1是S2按键
LCALL DELAY_10ms ;延时10ms消抖
ORL C,P1.4 ;再读P1.1状态,看两次结果是否都为0
JC VOTER_1 ;(P1.1=1)S2键没有按下则转移重新扫描
CLR EA ;关中断
;******************************************************
;需要修改的地址Ra和命令Ri
MOV R2,#00H ;R2存放本机地址,需要修改
MOV R3,#06H ;R3存放命令(06代表弃权).需要修改
;******************************************************
LCALL SEND ;调发送子程序
CLR P2.6 ;已表决灯亮
AJMP VOTER_END ;返回
VOTER_4: CJNE A,#254,VOTER_ERR ;Ra=254?不等则跳转
SETB P2.5 ;取消表决状态
SETB P2.6
VOTER_5: CLR EA ;开中断
AJMP VOTER_END ;返回
VOTER_ERR: MOV P2,#00H ;出错,灯全亮
VOTER_END: RET
;***********************************************************************
;延时子程序
DELAY_10ms: MOV R7,#32
DEL1: MOV R6,#142 ;因为晶振为11.0592MHZ,所以t=12/(11.0592×1000000)
NOP
DEL2: DJNZ R6,DEL2 ;142×2t+2t=286t
DJNZ R7,DEL1 ;(286t+2t)×32+t=10.001ms
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -