?? 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 + -