📄 main.asm
字号:
;ADC CONTROL,TIMER0 INTERRUPT
ADCOUNTER data 30H
sgl data 31h
channelbit bit 7fH
xdirection bit 7eh
ydirection bit 7dh
X0OUTPUT BIT 0E0H
X1OUTPUT BIT 0E1H
Y0OUTPUT BIT 0E4H
Y1OUTPUT BIT 0E5H
buffer00 equ 0ah
buffer01 equ 0ah
buffer02 equ 0ah
buffer03 equ 0ah
buffer04 equ 0ah
buffer05 equ 0ah
buffer06 equ 0ah
buffer07 equ 0ah
buffer08 equ 0ah
buffer09 equ 0ah
buffer10 equ 0ah
org 0000h
JMP MAIN
ORG 000BH
JMP ADSTART
ORG 001BH
JMP TIMER1
ORG 0030H
MAIN:
MOV R4,#11001100B
MOV R5,#11001100B
MOV TH0,#0B1H ;TIMER0 定时周期2MS 每秒50次采样
MOV TL0,#0E0H ;
MOV TH1,#00H
MOV TL1,#206 ;50*2US T1定时周期0.1毫秒
MOV TMOD,#00100001B ;定时器0工作方式1,定时器1工作方式2
SETB TR0
SETB ET0
SETB TR1
SETB ET1
SETB EA
MOV R2,#0FFH
MOV R3,#0FFH
MOV R0,#0FFH
MOV R1,#0FFH
HERE: JMP HERE
;**********************************************************************************************************************************
; TIMER1 INTERRUPTION 根据定时规则,定时0.1MS 以此为基数进行计数,控制各通道得刷新频率。
; R0,R1中是计数器,每次到零改变引脚状态一次,R4,R5是引脚状态移位器
;
;******************************************************************************************************
TIMER1:
CJNE R0,#0FFH,CHANGEX
MOV A, R2 ;REFRESH X PARAMETER
MOV R0,A
JMP XENDLOOP
CHANGEX:
CJNE R0,#00H,CHANGER0
MOV A, R2 ;REFRESH X PARAMETER
MOV R0,A ;重载R0
MOV A,R4
JB XDIRECTION, XROLL ;移位后输出
RL A
JMP XROLLEND
XROLL: RR A
XROLLEND:
MOV R4,A
JNB X0OUTPUT,X0VOTE
SETB P1.2
JMP X0VOTEEND
X0VOTE: CLR P1.2
X0VOTEEND: JNB X1OUTPUT,X1VOTE
SETB P1.3
JMP X1VOTEEND
X1VOTE: CLR P1.3
X1VOTEEND: JMP XENDLOOP
CHANGER0: DEC R0
XENDLOOP:
CJNE R1,#0FFH,CHANGEY
MOV A,R3 ;REFRESH X PARAMETER
MOV R1,A
JMP YENDLOOP
CHANGEY:
CJNE R1,#00H,CHANGER1
MOV A, R3 ;REFRESH Y PARAMETER
MOV R1,A ;重载R0
MOV A,R5
JB YDIRECTION, YROLL ;移位后输出
RL A
JMP YROLLEND
YROLL: RR A
YROLLEND:
MOV R5,A
JNB Y0OUTPUT,Y0VOTE
SETB P1.4
JMP Y0VOTEEND
Y0VOTE: CLR P1.4
Y0VOTEEND: JNB Y1OUTPUT,Y1VOTE
SETB P1.5
JMP Y1VOTEEND
Y1VOTE: CLR P1.5
Y1VOTEEND: JMP YENDLOOP
CHANGER1: DEC R1
YENDLOOP:
MOV TH1,#00H
MOV TL1,#206 ;50*2US T1定时周期0.1毫秒
RETI
;**********************************************************************************************************************************
; TIMER0 INTERRUPT , 从P3口与ADC0832通信获得两路模拟信息,并作处理使R2,R3暂存两路强度信息
; XDIRECTION,YDIRECTION 保存两路的方向信息。
;
;******************************************************************************************************
ADSTART: MOV P3,#00H
MOV SGL,#02H
CLR P3.0 ;CLOCK=0
CLR A
ADCHANNEL: MOV R2,A
MOV R3,A
SETB P3.2 ;START BIT
CLR P3.1 ;CS=0
ACALL CLOCK
SETB P3.2 ;SGL/DIF=1
ACALL CLOCK
JNB CHANNELBIT,CHANNEL0
SETB P3.2 ;SELECT CHANNEL1 Y
CLR CHANNELBIT
CHANNEL0: CLR P3.2 ;SELECT CHANNEL0 X
SETB CHANNELBIT
ACALL CLOCK
MOV ADCOUNTER,#09H
ADREAD:ACALL CLOCK
MOV C,B.3
RLC A
DJNZ ADCOUNTER,ADREAD
SETB P3.1 ;CS=1
DJNZ SGL,ADCHANNEL
MOV R3,A
;X CHNNEL FREQUENCY PARAMETER
CLR A
MOV B,#128
MOV A,R2
DIV AB
CLR XDIRECTION
JNZ LOOPX
MOV A,#128 ;A=128
SUBB A,B
SETB XDIRECTION
JMP LOOPX1
LOOPX:
MOV A,B
LOOPX1: CLR C
SUBB A,#BUFFER00
MOV R2,#0FFH ;X NOT MOVE
JC LOOPXEND
SUBB A,#BUFFER01
MOV R2,#0FAH ;X MOVE PARAMETER 250
JC LOOPXEND
SUBB A,#BUFFER02
MOV R2,#0A6H ;X MOVE PARAMETER 166
JC LOOPXEND
SUBB A,#BUFFER03
MOV R2,#06FH ;X MOVE PARAMETER 111
JC LOOPXEND
SUBB A,#BUFFER04
MOV R2,#049H ;X MOVE PARAMETER 73
JC LOOPXEND
SUBB A,#BUFFER05
MOV R2,#031H ;X MOVE PARAMETER 49
JC LOOPXEND
SUBB A,#BUFFER06
MOV R2,#020H ;X MOVE PARAMETER 32
JC LOOPXEND
SUBB A,#BUFFER07
MOV R2,#015H ;X MOVE PARAMETER 21
JC LOOPXEND
SUBB A,#BUFFER08
MOV R2,#0EH ;X MOVE PARAMETER 14
JC LOOPXEND
SUBB A,#BUFFER09
MOV R2,#0AH ;X MOVE PARAMETER 10
JC LOOPXEND
SUBB A,#BUFFER10
MOV R2,#06H ;X MOVE PARAMETER 6
JC LOOPXEND
MOV R2,#05H ;X MOVE PARAMETER 5
LOOPXEND: NOP
; Y CHNNEL FREQUENCY PARAMETER
CLR A
MOV B,#128
MOV A,R3
DIV AB
CLR YDIRECTION
JNZ LOOPY
MOV A,#128 ;A=128
SUBB A,B
SETB YDIRECTION
JMP LOOPY1
LOOPY: MOV A,B
LOOPY1: CLR C
SUBB A,#BUFFER00
MOV R3,#0FFH ;Y NOT MOVE
JC LOOPYEND
SUBB A,#BUFFER01
MOV R3,#0FAH ;Y MOVE PARAMETER 250
JC LOOPYEND
SUBB A,#BUFFER02
MOV R3,#0A6H ;Y MOVE PARAMETER 166
JC LOOPYEND
SUBB A,#BUFFER03
MOV R3,#06FH ;Y MOVE PARAMETER 111
JC LOOPYEND
SUBB A,#BUFFER04
MOV R3,#049H ;Y MOVE PARAMETER 73
JC LOOPYEND
SUBB A,#BUFFER05
MOV R3,#031H ;Y MOVE PARAMETER 49
JC LOOPYEND
SUBB A,#BUFFER06
MOV R3,#020H ;Y MOVE PARAMETER 32
JC LOOPYEND
SUBB A,#BUFFER07
MOV R3,#015H ;Y MOVE PARAMETER 21
JC LOOPYEND
SUBB A,#BUFFER08
MOV R3,#0EH ;Y MOVE PARAMETER 14
JC LOOPYEND
SUBB A,#BUFFER09
MOV R3,#0AH ;Y MOVE PARAMETER 10
JC LOOPYEND
SUBB A,#BUFFER10
MOV R3,#06H ;Y MOVE PARAMETER 6
JC LOOPYEND
MOV R3,#05H ;Y MOVE PARAMETER 5
LOOPYEND:
MOV TH0,#0B1H ;TIMER0 定时周期2MS 每秒50次采样
MOV TL0,#0E0H ;
RETI
;CLOCKER CHANGE THE CLOCK LINE AND READ DATA TO B
CLOCK: PUSH A
SETB P3.3 ;DATA OUTPUT
MOV A,P3
SETB P3.0 ;CLOCK=1
MOV B,A
POP A
CLR P3.0 ;CLOCK=0
RET
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -