?? 2040a.dt
字號(hào):
;客 戶:奧利奇
;適用機(jī)型:2050
;軟體版本:01
;開發(fā)日期:2008-10-23 15:04
;版 權(quán):與利達(dá)電子有限公司所有
;技術(shù)核心:
;----------------------------------------------------------
R0 == 0X0
R1 == 0X1
PC == 0x2
R3 == 0X3
R4 == 0X4
P5 == 0x5
P6 == 0x6
p7 == 0x7
iocb == 0xb
ioce == 0XE
iocf == 0xf
;----------------------------------------------------------
time_count == 0x2e
time_count1 == 0x2f
error_count == 0x30
time_check == 0x31
key_flag == 0x32
;----------------------------------------------------------
;key_flag,0=發(fā)射的標(biāo)志(0為發(fā)射,1為停止)
;key_flag,1=第一次檢測(cè)有反射的標(biāo)志
;key_flag,2=兩次檢測(cè)間隔200ms到了的標(biāo)志
;key_flag,3=馬達(dá)輸出的標(biāo)志
;key_flag,4=一直有反射的標(biāo)志
;key_flag,5=
;key_flag,6=
;key_flag,7=
;----------------------------------------------------------
fashe_count == 0x33
time_motor == 0x34
time_motor1 == 0x35
time_fashe == 0x36 ;發(fā)射的間隔時(shí)間
count_low == 0x37 ;低速檢測(cè)計(jì)數(shù),用于防抖
count_mid == 0x38
count_high == 0x39
disp_flag == 0x3a
;----------------------------------------------------------
;disp_flag,0=低速按鍵狀態(tài)標(biāo)志
;disp_flag,1=中速按鍵狀態(tài)標(biāo)志
;disp_flag,2=高速按鍵狀態(tài)標(biāo)志
;disp_flag,3=數(shù)碼管位選標(biāo)志
;disp_flag,4=低速檔的標(biāo)志
;disp_flag,5=中速檔的標(biāo)志
;disp_flag,6=高速檔的標(biāo)志
;----------------------------------------------------------
data_disp1 == 0x3b
data_disp2 == 0x3c
a_buf == 0x3d
r3_buf == 0x3e
r3f == 0x3f
;----------------------------------------------------------
ORG 0x0fff
RESET: JMP Main
ORG 0x000
JMP Main
ORG 0X01
int_153:
mov a_buf,a
swap a_buf
swapa r3
mov r3_buf,a
bc r3f,0
MOV A, @0x6
add a,r1 ;置計(jì)數(shù)器初值
;----------------------------------
;感應(yīng)計(jì)時(shí)
;----------------------------------
jbs key_flag,3
jmp int_2
djz time_count
jmp int_2
mov a,@0xfa
mov time_count,a
djz time_count1
jmp int_2
mov a,@0x78
mov time_count1,a
bs key_flag,4 ;置馬達(dá)工作時(shí)間達(dá)到60秒的標(biāo)志
bc p6,0
bc p6,1
bc p6,2
int_2:
;----------------------------------
;延時(shí)關(guān)閉馬達(dá)
;----------------------------------
jbs key_flag,3
jmp int_3
djz time_motor
jmp int_3
mov a,@0x19
mov time_motor,a
djz time_motor1
jmp int_3
bc key_flag,3
bc key_flag,4 ;清馬達(dá)工作達(dá)到60秒的標(biāo)志
bc p6,0
bc p6,1
bc p6,2
mov a,@0xfa
mov time_count,a
mov a,@0x78
mov time_count1,a ;馬達(dá)最長(zhǎng)工作時(shí)間賦值
int_3:
;----------------------------------
;顯示
;----------------------------------
jbc disp_flag,3 ;是否要顯示第一位?
jmp int_4 ;跳第二位顯示
bs disp_flag,3
bs p6,3
bc p6,4
mov a,data_disp1
mov p7,a
jmp int_6
int_4:
bc disp_flag,3
bc p6,3
bs p6,4
mov a,data_disp2
mov p7,a
int_6:
;----------------------------------
;兩次檢測(cè)之間計(jì)時(shí)
;----------------------------------
jbs key_flag,1
jmp int_7
djz time_check
jmp int_7
bc key_flag,1 ;清第一次檢測(cè)到的標(biāo)志
bs key_flag,2 ;置到了第二次檢測(cè)時(shí)間的標(biāo)志
int_7:
;----------------------------------
;間隔發(fā)射計(jì)時(shí)
;----------------------------------
djz time_fashe
jmp int_8
mov a,@0x64
mov time_fashe,a
bc key_flag,0 ;允許發(fā)射
int_8:
;----------------------------------
;解碼開始
;----------------------------------
jbc key_flag,2 ;是否到了第二次檢測(cè)的時(shí)間
jmp int_10
jbc key_flag,1 ;是否檢測(cè)到第一次
jmp int_9
jbc p5,3 ;是否有感應(yīng)(第一次檢測(cè))
jmp int_12 ;無感應(yīng)跳
bs key_flag,1 ;置檢測(cè)到第一次的標(biāo)志
mov a,@0x64
mov time_check,a
mov a,@0xa
mov error_count,a
int_9:
;----------------------------------
;兩次之間檢測(cè)
;----------------------------------
jbc p5,3 ;是否有錯(cuò)誤信號(hào)
jmp int_12
djz error_count ;錯(cuò)誤信號(hào)計(jì)數(shù)
jmp int_12
bc key_flag,1 ;出現(xiàn)10次錯(cuò)誤信號(hào),清第一次感應(yīng)到的標(biāo)志
jmp int_12
int_10:
;----------------------------------
;第二次檢測(cè)
;----------------------------------
jbc p5,3
jmp int_11
bs key_flag,3 ;置馬達(dá)工作的標(biāo)志
mov a,@0x19
mov time_motor,a
mov a,@0x10
mov time_motor1,a
jbc key_flag,4 ;馬達(dá)是否工作達(dá)到60秒
jmp int_11
bs p6,0
jbc disp_flag,4 ;是否在低速狀態(tài)?
jmp int_11
jbc disp_flag,5
jmp int_high
bs p6,1
jmp int_11
int_high:
bs p6,2
int_11:
;----------------------------------
;第二次沒有檢測(cè)到處理
;----------------------------------
bc key_flag,2 ;清到第二次檢測(cè)時(shí)間的標(biāo)志
int_12:
;----------------------------------
;無感應(yīng)處理
;----------------------------------
int_over:
nop
swapa r3_buf
mov r3,a
swapa a_buf
reti
; jmp int_153
;----------------------------------------------------------
; RAM CLR
;----------------------------------------------------------
RAM_CLR: MOV A,@0X10
MOV r4,A
CLR_LOOP: mov a,@0x0
mov r0,a
INC r4
MOV A,r4
and a,@0x3f
xor a,@0x3f ;判斷是否到了3eh
JBS r3,2
JMP CLR_LOOP
RET
;==========================================================
; Main Program
;==========================================================
Main: disi
clr p5
clr p6
clr p7
mov a,@0xf ;p5輸入
iow p5
mov a,@0x0 ;p6輸出
iow p6
mov a,@0x0
iow p7
;----------------------------------
;以上為i/o設(shè)置
;----------------------------------
call ram_clr ;清ram
mov a,@0xff
iow iocb
MOV A,@0x31 ;開watchdog
iow ioce
MOV A, @0X01 ;允許中斷
IOW iocf
MOV A,@0X6 ;置計(jì)數(shù)器初值
MOV R1,A
MOV A,@0Xc2 ;8分頻給TCC,禁止喚醒
CONTW
eni
mov a,@0x24
mov data_disp1,a
mov a,@0x49
mov data_disp2,a ;開機(jī)默認(rèn)顯示值
bs disp_flag,4 ;開機(jī)默認(rèn)低檔
mov a,@0x64
mov time_fashe,a ;發(fā)射間隔時(shí)間賦值
;----------------------------------
mov a,@0x64
mov time_check,a ;兩次檢測(cè)間隔時(shí)間
mov a,@0xa
mov error_count,a ;兩次檢測(cè)間隔之間再檢測(cè)到10次表次解碼錯(cuò)誤
mov a,@0xfa
mov time_count,a
mov a,@0x78
mov time_count1,a ;馬達(dá)最長(zhǎng)工作時(shí)間賦值
;----------------------------------------------------------
; 主程序
;----------------------------------------------------------
loop:
call key_low
call key_mid
call key_high
call fashe
wdtc
jmp loop
;----------------------------------------------------------
; 發(fā)射
;----------------------------------------------------------
fashe:
jbc key_flag,0
ret
bs key_flag,0
mov a,@0x9a
mov fashe_count,a
fashe_loop:
bs p6,6
nop ;1
nop ;2
nop ;3
nop ;4
nop ;5
nop ;6
nop ;7
nop ;8
nop ;9
nop ;10
nop ;11
nop ;12
bc p6,6
nop ;1
nop ;2
nop ;3
nop ;4
nop ;5
nop ;6
nop ;7
nop ;8
nop ;9
djz fashe_count
jmp fashe_loop
ret
;----------------------------------------------------------
;按鍵檢測(cè)1
;----------------------------------------------------------
key_low:
jbc disp_flag,0 ;按鍵檢測(cè)之前是否松開過?
jmp low_end
jbc p5,0 ;是否閉合?
jmp low_over
inc count_low
jbs count_low,4
ret
bs disp_flag,0
clr count_low
mov a,@0x24
mov data_disp1,a
mov a,@0x49
mov data_disp2,a
bc p6,1 ;關(guān)閉中速發(fā)熱絲
bc p6,2 ;關(guān)閉高速發(fā)熱比
bs disp_flag,4 ;置低速運(yùn)行的標(biāo)志
ret
low_over:
clr count_low
ret
low_end:
jbc p5,0
bc disp_flag,0
ret
;----------------------------------------------------------
;按鍵檢測(cè)2
;----------------------------------------------------------
key_mid:
jbc disp_flag,1 ;按鍵檢測(cè)之前是否松開過?
jmp mid_end
jbc p5,1 ;是否閉合?
jmp mid_over
inc count_mid
jbs count_mid,4
ret
bs disp_flag,1
clr count_mid
mov a,@0x41
mov data_disp1,a
mov a,@0x2
mov data_disp2,a
bc p6,2 ;關(guān)閉高速發(fā)熱絲
bc disp_flag,4
bc disp_flag,5 ;置為中速工作狀態(tài)
ret
mid_over:
clr count_mid
ret
mid_end:
jbc p5,1
bc disp_flag,1
ret
;----------------------------------------------------------
;按鍵檢測(cè)3
;----------------------------------------------------------
key_high:
jbc disp_flag,2 ;按鍵檢測(cè)之前是否松開過?
jmp high_end
jbc p5,2 ;是否閉合?
jmp high_over
inc count_high
jbs count_high,4
ret
bs disp_flag,2
clr count_high
mov a,@0x1
mov data_disp1,a
mov a,@0x49
mov data_disp2,a
bc p6,1 ;關(guān)閉中速發(fā)熱絲
bc disp_flag,4
bs disp_flag,5 ;置為高速工作狀態(tài)
ret
high_over:
clr count_high
ret
high_end:
jbc p5,2
bc disp_flag,2
ret
;----------------------------------------------------------
; 中斷2ms
;----------------------------------------------------------
/*
int_153:
mov a_buf,a
swap a_buf
swapa r3
mov r3_buf,a
bc r3f,0
MOV A, @0x6
add a,r1 ;置計(jì)數(shù)器初值
;----------------------------------
;感應(yīng)計(jì)時(shí)
;----------------------------------
jbs key_flag,3
jmp int_2
djz time_count
jmp int_2
mov a,@0xfa
mov time_count,a
djz time_count1
jmp int_2
mov a,@0x78
mov time_count1,a
bs key_flag,4 ;置馬達(dá)工作時(shí)間達(dá)到60秒的標(biāo)志
bc p6,0
bc p6,1
bc p6,2
int_2:
;----------------------------------
;延時(shí)關(guān)閉馬達(dá)
;----------------------------------
jbs key_flag,3
jmp int_3
djz time_motor
jmp int_3
mov a,@0x19
mov time_motor,a
djz time_motor1
jmp int_3
bc key_flag,3
bc key_flag,4 ;清馬達(dá)工作達(dá)到60秒的標(biāo)志
bc p6,0
bc p6,1
bc p6,2
mov a,@0xfa
mov time_count,a
mov a,@0x78
mov time_count1,a ;馬達(dá)最長(zhǎng)工作時(shí)間賦值
int_3:
;----------------------------------
;顯示
;----------------------------------
jbc disp_flag,3 ;是否要顯示第一位?
jmp int_4 ;跳第二位顯示
bs disp_flag,3
bs p6,3
bc p6,4
mov a,data_disp1
mov p7,a
jmp int_6
int_4:
bc disp_flag,3
bc p6,3
bs p6,4
mov a,data_disp2
mov p7,a
int_6:
;----------------------------------
;兩次檢測(cè)之間計(jì)時(shí)
;----------------------------------
jbs key_flag,1
jmp int_7
djz time_check
jmp int_7
bc key_flag,1 ;清第一次檢測(cè)到的標(biāo)志
bs key_flag,2 ;置到了第二次檢測(cè)時(shí)間的標(biāo)志
int_7:
;----------------------------------
;間隔發(fā)射計(jì)時(shí)
;----------------------------------
djz time_fashe
jmp int_8
mov a,@0x64
mov time_fashe,a
bc key_flag,0 ;允許發(fā)射
int_8:
;----------------------------------
;解碼開始
;----------------------------------
jbc key_flag,2 ;是否到了第二次檢測(cè)的時(shí)間
jmp int_10
jbc key_flag,1 ;是否檢測(cè)到第一次
jmp int_9
jbc p5,3 ;是否有感應(yīng)(第一次檢測(cè))
jmp int_12 ;無感應(yīng)跳
bs key_flag,1 ;置檢測(cè)到第一次的標(biāo)志
mov a,@0x64
mov time_check,a
mov a,@0xa
mov error_count,a
int_9:
;----------------------------------
;兩次之間檢測(cè)
;----------------------------------
jbc p5,3 ;是否有錯(cuò)誤信號(hào)
jmp int_12
djz error_count ;錯(cuò)誤信號(hào)計(jì)數(shù)
jmp int_12
bc key_flag,1 ;出現(xiàn)10次錯(cuò)誤信號(hào),清第一次感應(yīng)到的標(biāo)志
jmp int_12
int_10:
;----------------------------------
;第二次檢測(cè)
;----------------------------------
jbc p5,3
jmp int_11
bs key_flag,3 ;置馬達(dá)工作的標(biāo)志
mov a,@0x19
mov time_motor,a
mov a,@0x10
mov time_motor1,a
jbc key_flag,4 ;馬達(dá)是否工作達(dá)到60秒
jmp int_11
bs p6,0
jbc disp_flag,4 ;是否在低速狀態(tài)?
jmp int_11
jbc disp_flag,5
jmp int_high
bs p6,1
jmp int_11
int_high:
bs p6,2
int_11:
;----------------------------------
;第二次沒有檢測(cè)到處理
;----------------------------------
bc key_flag,2 ;清到第二次檢測(cè)時(shí)間的標(biāo)志
int_12:
;----------------------------------
;無感應(yīng)處理
;----------------------------------
int_over:
nop
swapa r3_buf
mov r3,a
swapa a_buf
reti */
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -