?? ht46r47.asm
字號:
;MCU=HT46R47
;PB3/AN3=I ;PB2/AN2=TOPRT ;PB1/AN3=IGBTRT ;PBO/AN0=U
;PD0/PWM=ENABLE ;PA5/INT=ENABLE
;pa0=hc164_ab ;pa1=hc164_clk
;600w-1200w
include "Ht46r47.inc"
.nolist
timx equ 00fh ;延時外時間
timy equ 002h ;延時內時間
tmrdata equ 0feh ;定時中斷時間
sdata equ 040h ;設定一秒鐘的計數
keytimdata equ 007h ;設定鍵盤去抖動值
hcab equ pa.7
hcabc equ pac.7
hcclk equ pa.6
interrbit equ pa.5
interrbitc equ pac.5
lockbit equ pa.4
q1bit equ pa.3
q2bit equ pa.2
q3bit equ pa.1
q4bit equ pa.0
;///////////////////////////////////////////////////////////////////////
data .section 'data'
timerx db ? ;延時外時間寄存器
timery db ? ;延時內時間寄存器
addata db ? ;比較回來的A/D數據
dataa db ? ;用作工作寄存
datab db ? ;用作中斷工作寄存
datac db ? ;用作中斷重要數據寄存
datad db ? ;用作中斷重要數據寄存
hc164data db ? ;要發出164的數據
s db ?
keyc db ?
keyinbit db ?
keytimer db ?
keyinerrbit dbit
led1 db ?
led2 db ?
led3 db ?
led4 db ?
leddata db ?
ledc db ?
interrdata db ?
pwmdata db ?
;/////////////////////////////////////////////////////////////////////
code .section 'code'
.nolist
ORG 00H
JMP reset ;程式開始
ORG 04H
jmp interrup ;外部中斷向量
ORG 08H
jmp timeover ;定時中斷向量
ORG 0CH
RETI ;A/D中斷向量
;//////////////////////////////////////////////////////////////////////
ORG 010H
reset:
mov a,03h ;int and timer err
mov intc,a ;設置中斷許可
;mov a,87h
;mov tmrc,a
;mov a,20h
;mov tmr,a
;set ton ;打開定時器
clr pac ;設置口
clr lockbit
clr pdc.0
clr pd.0
clr pwm ;開pwm
clr addata ;清用戶數據
mov a,01h
mov keyc,a
mov ledc,a
clr led3
clr keyinerrbit
mov a,20h
mov adcr,a
mov a,01h
mov acsr,a
mov a,045h
mov pwmdata,a
mov pwm,a
clr interrdata
set pd.0
;////////////////////////////main////////////////////////////////////
main:
call timerd
call keyin
call ledgan
call keyinerr
sdz s
jmp endtimerr
mov a,sdata
mov s,a
sz led3
jmp szled35
jmp endtimerr
szled35:
mov a,led3
sub a,05h
sz z
jmp endtimerr
mov a,addata
mov leddata,a
clr addata
endtimerr:
jmp main
;//////////////////////////time中斷程式/////////////////////////////////
timeover:
mov datac,a
mov a,status
mov datad,a
;mov a,tmrdata
;mov tmr,a
;sdz s
;jmp endtimerr
;mov a,sdata
;mov s,a
;sz led3
;jmp szled35
;jmp endtimerr
;szled35:
;mov a,led3
;sub a,05h
;sz z
;jmp endtimerr
;mov a,addata
;mov leddata,a
;clr addata
;endtimerr:
mov a,datad
mov status,a
mov a,datac
reti
;//////////////////////////int中斷程式/////////////////////////////////
interrup:
nop
inc interrdata
nop
reti
;////////////////////////A/D轉換程式///////////////////////////////
alladcon proc
clr emi
clr start
set start
clr start
nop
alladcon1:
sz adcr.6
jmp alladcon1
clr adf
mov a,adrh
sub a,addata
snz c
jmp endalladcon
mov a,adrh
mov addata,a
endalladcon:
set emi
ret
alladcon endp
;////////////////////////////延時程式////////////////////////////
timerd proc
mov a,timx
mov timerx,a
timtop:
mov a,timy
mov timery,a
sdz timerx
jmp timdecy
jmp endtim
timdecy:
call alladcon ;進行A/D并比較值
sdz timery
jmp timdecy
jmp timtop
endtim:
ret
timerd endp
;////////////////////////////hc164位數據輸出/////////////////////////
hc164out proc ;mov hc164data call
set q1bit
set q2bit
set q3bit
set q4bit
mov a,08h
mov dataa,a
hctop:
sz hc164data.0
jmp hc164abl
set hcab
jmp hcdatarr
hc164abl:
clr hcab
hcdatarr:
rr hc164data
clr hcclk
set hcclk
sdz dataa
jmp hctop
ret
hc164out endp
;/////////////////////////////led數據分離/////////////////////////
leddataf proc
mov a,leddata
and a,0fh
mov led1,a
mov a,leddata
and a,0f0h
mov led2,a
rr led2
rr led2
rr led2
rr led2
ret
leddataf endp
;//////////////////////////////led 輸出數據比較///////////////////
ledoutdatab proc
sz0h:
sz dataa
jmp sz1h
mov a,0fch
mov hc164data,a
jmp endledoutdatab
sz1h:
sdz dataa
jmp sz2h
mov a,060h
mov hc164data,a
jmp endledoutdatab
sz2h:
sdz dataa
jmp sz3h
mov a,0dah
mov hc164data,a
jmp endledoutdatab
sz3h:
sdz dataa
jmp sz4h
mov a,0f2h
mov hc164data,a
jmp endledoutdatab
sz4h:
sdz dataa
jmp sz5h
mov a,066h
mov hc164data,a
jmp endledoutdatab
sz5h:
sdz dataa
jmp sz6h
mov a,0b6h
mov hc164data,a
jmp endledoutdatab
sz6h:
sdz dataa
jmp sz7h
mov a,0beh
mov hc164data,a
jmp endledoutdatab
sz7h:
sdz dataa
jmp sz8h
mov a,0e0h
mov hc164data,a
jmp endledoutdatab
sz8h:
sdz dataa
jmp sz9h
mov a,0feh
mov hc164data,a
jmp endledoutdatab
sz9h:
sdz dataa
jmp szah
mov a,0f6h
mov hc164data,a
jmp endledoutdatab
szah:
sdz dataa
jmp szbh
mov a,0eeh
mov hc164data,a
jmp endledoutdatab
szbh:
sdz dataa
jmp szch
mov a,03eh
mov hc164data,a
jmp endledoutdatab
szch:
sdz dataa
jmp szdh
mov a,09ch
mov hc164data,a
jmp endledoutdatab
szdh:
sdz dataa
jmp szeh
mov a,07ah
mov hc164data,a
jmp endledoutdatab
szeh:
sdz dataa
jmp szfh
mov a,09eh
mov hc164data,a
jmp endledoutdatab
szfh:
mov a,08eh
mov hc164data,a
endledoutdatab:
call hc164out
ret
ledoutdatab endp
;//////////////////////////////led輸出管理///////////////////////////////
ledgan proc
sdz ledc
jmp szledc1h
mov a,led4
mov hc164data,a
call hc164out
clr q4bit
mov a,02h
mov ledc,a
jmp endledgan
szledc1h:
sdz ledc
jmp szledc2h
call leddataf
mov a,led1
mov dataa,a
call ledoutdatab
clr q1bit
mov a,03h
mov ledc,a
jmp endledgan
szledc2h:
sdz ledc
jmp szledc3h
call leddataf
mov a,led2
mov dataa,a
call ledoutdatab
clr q2bit
mov a,04h
mov ledc,a
jmp endledgan
szledc3h:
mov a,led3
mov dataa,a
call ledoutdatab
clr q3bit
mov a,01h
mov ledc,a
endledgan:
ret
ledgan endp
;////////////////////////////鍵盤測試和去抖動/////////////////////
keyin proc
mov a,keyc
mov hc164data,a
call hc164out
nop
set hcabc
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
sz hcab
jmp nopin
sz keytimer
jmp intimon
mov a,keyc
mov keyinbit,a
mov led4,a
jmp endkeyin
intimon:
dec keytimer
jmp endkeyin
nopin:
rr keyc
clr led4
clr keyinbit
mov a,keytimdata
mov keytimer,a
endkeyin:
clr hcabc
ret
keyin endp
;///////////////////////////key處理程式//////////////////////////
keyinerr proc
sz keyinbit
jmp szup
clr keyinerrbit
jmp snzkeybit6
szup:
sz keyinerrbit
jmp endkeyinerr
snz keyinbit.7
jmp snzkeybit4
mov a,05h
sub a,led3
sz z
jmp outaddata
inc led3
set keyinerrbit
jmp outaddata
snzkeybit4:
snz keyinbit.4
jmp snzkeybit2
sz led3
jmp decled3
jmp outaddata
decled3:
dec led3
set keyinerrbit
jmp outaddata
snzkeybit2:
snz keyinbit.2
jmp snzkeybit6
sz lockbit
jmp clrlock
set lockbit
clr interrbitc
nop
set interrbit
call timerd
set interrbitc
set keyinerrbit
jmp outaddata
clrlock:
clr lockbit
set keyinerrbit
jmp outaddata
snzkeybit6:
sz led3
jmp outaddata
mov a,pwmdata
mov leddata,a
snz keyinbit.6
jmp snzkeybit3
set keyinerrbit
sub a,0e0h
sz z
jmp endkeyinerr
inc pwmdata
mov a,pwmdata
mov pwm,a
jmp endkeyinerr
snzkeybit3:
snz keyinbit.3
jmp endkeyinerr
sz pwmdata
jmp decpwmdata
jmp endkeyinerr
decpwmdata:
dec pwmdata
mov a,pwmdata
mov pwm,a
set keyinerrbit
jmp endkeyinerr
outaddata:
mov a,led3
sub a,01h
snz z
jmp outad1
clr acs0
clr acs1
clr acs2
jmp endkeyinerr
outad1:
mov a,led3
sub a,02h
snz z
jmp outad2
set acs0
clr acs1
clr acs2
jmp endkeyinerr
outad2:
mov a,led3
sub a,03h
snz z
jmp outad3
clr acs0
set acs1
clr acs2
jmp endkeyinerr
outad3:
mov a,led3
sub a,04h
snz z
jmp outinterr
set acs0
set acs1
clr acs2
jmp endkeyinerr
outinterr:
mov a,led3
sub a,05h
snz z
jmp endkeyinerr
mov a,interrdata
mov leddata,a
endkeyinerr:
ret
keyinerr endp
;////////////////////////////codeend//////////////////////////////
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -