📄 46r47_1606_led.asm
字号:
;*****************************************************************;
;---> Project : (段工)跑马灯控制程序 <---;
;---> P List : HT46R47 <---;
;---> Rom Size: xxxxh <---;
;---> End Date: 2009-03-17 <---;
;---> Function: <---;
;---> 1. PA.567 控制3个灯 <---;
;---> 2. PB.0123接收RF信号 <---;
;---> 3. PA.34接AT24C01 <---;
;---> 4. PA.0驱动RF指示灯 <---;
;---> 5. 用4MHz晶体振荡 <---;
;*****************************************************************;
include ht46R47.inc
;-----------------------------------------------;
Data .section 'data' ;64 * 8 bits RAM; 40h ~ 7fh
;-----------------------------------------------;
R_status db ? ;40
R_ACC db ? ;41
R_80us db ? ;
R_Key db ?
;----------------------------------------------;
;----------------------------------------------;
;scl equ pa.3 ;24C08-6 定义pa.3为时钟脚
;sclc equ pac.3 ;
;sda equ pa.4 ;24C08-5 定义pa.4为数据脚
;sdac equ pac.4 ;
;-----------------------------------------;
;write_in db ? ;写入数据暂存器
;word_addr db ? ;读写地址暂存器
;data_8 db ? ;8bit计数
;RAM_count db ? ;
;----------------------------------------------;
Flag db ?
;-------------------------------------;
FangXiang equ Flag.0
fg_Li equ Flag.1
;----------------------------------------------;
B_SI equ PA.4
B_DI equ PA.5
B_CI equ PA.6
B_LI equ PA.7
;----------------------------------------------;
R_RegM db ?
R_RegK db ?
R_RegJ db ?
R_RegS db ?
R_RegB db ?
Rt_Data db ?
Rt_count db ?
R_500ms db ?
;----------------------------------------------;
;----------------------------------------------;
count1 db ?
count2 db ?
count3 db ?
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
;**********************************************************************;
code .section at 0 'code' ; 1024 * 14bits ROM
;----------------------------------------------------------------------;
ORG 00h ;
JMP MAIN_Start ;RESET
ORG 04H ;
JMP Ext_Int_RXD ;External INT
ORG 08H ;
JMP Timer_Int ;TIMER INT
ORG 0CH ;
JMP AD_Int ;A/D convert INT
NOP ;
NOP ;
JMP MAIN_Start ;
Ext_Int_RXD:
AD_Int:
NOP ;
reti ;
;---------------------------------------------------------------;
;--------------->> 80us timer interrupt <<----------------;
;---------------------------------------------------------------;
Timer_int:
mov R_ACC,A
mov A,status
mov R_status,A
;-------------------------------------------------------;
clr wdt
inc R_80us
mov A,R_80us
sub A,250
snz c
jmp Exit_timer
clr R_80us
inc R_500ms
;-------------------------------------------------------;
;-------------------------------------------------------;
Exit_timer:
mov A,R_status ;
mov status,A ;
mov A,R_ACC ;
reti
;----------------------------------------------------------------------;
;**********************************************************************;
;**********************************************************************;
;**********************************************************************;
;**********************************************************************;
;**********************************************************************;
;----------------------------------------------------------------------;
MAIN_Start:
clr intc ;
clr tmr ;
clr tmrc ;
clr wdt ;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++;
;********> no nomral reset <********;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++;
JI_NO_normal_reset:
;mov A,[7eh]
;xor A,0aah
;snz Z
jmp J_initial_data
mov A,[7fh]
xor A,55h
snz z
jmp J_initial_data
;-------------------------------------------------;
mov A,00h ;PA output
mov PAC,A ;
mov A,00h ;
mov PBC,A ;
mov PB,A ;PB input
clr PD ;
clr PDC ;PD output
clr PD ;
;-------------------------------------------------;
mov a,6 ;(256-6=250)
mov tmr,a ;timer counting initial value=0ebh
mov A,10000101B ;F=Fsys/32 (4MHz/32=1/8MHz=8us)
mov tmrc,A ;250*8us=2000us=2ms
mov A,00000101B ;enable all interrupt and open
mov intc,A ;timer interrupt
set tmrc.4 ;
clr R_80us ;
jmp Main_prog ;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++;
;*****> initial all data register <*****;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++;
J_initial_data:
mov A,00h ;PA output
mov PAC,A ;
mov A,00h ;
mov PA,A ;
mov A,00h ;
mov PBC,A ;
mov PB,A ;PB output
clr PD ;
clr PDC ;PD output
clr PD ;
;-------------------------------------------------;
;------->> timer initial setup <<-------;
;-------------------------------------------------;
mov a,6 ;(256-6=250)
mov tmr,a ;timer counting initial value=0ebh
mov A,10000101B ;F=Fsys/32 (4MHz/32=1/8MHz=8us)
mov tmrc,A ;250*8us=2000us=2ms
mov A,00000101B ;enable all interrupt and open
mov intc,A ;timer interrupt
;-------------------------------------------------;
mov A,40h ;清内存(40h ~ 7fh)
mov mp0,A ;
RAM_clr_Loop:
CLR WDT ;
mov A,0 ;
mov r0,A ;
inc mp0 ;
mov A,mp0
sub A,80h ;check 40h
snz z ;
jmp RAM_clr_Loop ;
;-------------------------------------------------;
;-------------------------------------------------;
mov A,0aah
mov [7eh],A
mov A,55h
mov [7fh],A
set tmrc.4 ;
;######################################################################;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
;--------------->> HL1606 多模式程序 <<-----------------;
;======================================================================;
Main_prog:
mov A,R_500ms
sub A,10
snz c
jmp Main_RED
mov A,R_500ms
sub A,20
snz c
jmp Main_Green
mov A,R_500ms
sub A,30
snz c
jmp Main_Blue
mov A,R_500ms
sub A,120
snz c
jmp Main_White
clr R_500ms
jmp Main_prog
Main_RED:
clr fg_Li
mov A,84h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -