📄 main.asm
字号:
;==========================================================================*
* File name : main.asm *
* Author: Qu Bo *
* Data: 2006.11.19*
* Version: 2.0 *
* Organization: DSP&EMC,National Key Laboratory of Power Electronics,
* Zhejiang University, Hangzhou 310027, China *
* Description : PROGRAM TO CONTROL A ELECTRIC CAR USE F2407A *
;==========================================================================*
.include "F2407.H" ;头文件
.bss GPR0,1 ;变量设置
.bss COUNT,1
.bss L_COUNT,1
.bss S_COUNT,1
.bss S_DATA,1
.bss FLAG,1
.bss DATA,1
.bss DATA_R,1
.bss W_CON,1
.bss W_ADD,1
.bss W_DAT,1
.bss R_CON,1
.bss R_DAT,1
.bss TEMP,1
.bss TEMP1,1
.bss TEMP2,1
.bss TEMP3,1
.bss S0,1 ;时
.bss S1,1
.bss F0,1 ;分
.bss F1,1
.bss M0,1 ;秒
.bss M1,1
.bss DAY0,1 ;天
.bss DAY1,1
.bss WEEK0,1 ;星期
.bss WEEK1,1
.bss MON0,1 ;月份
.bss MON1,1
.bss YEAR0,1 ;年
.bss YEAR1,1
.bss T_DATA,10
.def _c_int0
;======================================================
;系统初始化
;使能EVA,EVB,A/D模块,其他的未使能(根据要求使能)。
;======================================================
.text ;加密位
.word #0ffffh
.word #0ffffh
.word #0ffffh
.word #0ffffh
_c_int0:
LDP #0H
SETC INTM ;屏蔽总中断程序
CLRC SXM ;符号位不作扩展
LACC IFR ;清标志
SACL IFR
CLRC CNF ;B0为数据存储区
SETC OVM
LDP #WDCR>>7
SPLK #006Fh, WDCR ;看门狗不使能
KICK_DOG
SPLK #0h, GPR0 ;整体延时为0
OUT GPR0, WSGR
LDP #SCSR1>>7
SPLK #0000000000101100B,SCSR1 ;输入时钟频率=1*fin(CPU时钟)
;使能SPI,EVA,EVB时钟
LDP #IMR>>7
SPLK #0H,IMR
LDP #T1CON>>7
SPLK #1044H,T1CON ;
SPLK #0080H,EVAIMRA
SPLK #0FFFFH,EVAIFRA
SPLK #200,T1PR
SPLK #0,T1CNT
LDP #COUNT
SPLK #0,COUNT
SPLK #0,DATA_R
LDP #MCRB>>7 ;初始化设置MCRB,MCRB9~MCRB15必须配置成1
SPLK #0FFFDH,MCRB ;实现在线仿真功能,写0将引起不可预测后果
LDP #TEMP2
SPLK #0FFFFH,TEMP2
OUT TEMP2,4000H ;送数据给液晶显示所对应的锁存器,04000H为负责显示锁存器所对应的地址
OUT TEMP2,2000H ;使I/O控制单元的发光二极管灭
OUT TEMP2,6000H ;使数码管灭
SPLK #0H,TEMP3
OUT TEMP3,0C000H
SPLK #0FH,S_COUNT ;
CLRC INTM ;开中断
MAIN
CALL LCD_INIT ;调用液晶初始化子程序
CALL LCD_SHOW ;调用液晶显示子程序
CALL TIME_INIT ;调用时间初始化子程序
LOOP
CALL TIME_READ ;调用时间读子程序
NOP
LDP #S_COUNT
LACC S_COUNT
SUB #1
SACL S_COUNT
BNZ LOOP
LDP #FLAG
LACC FLAG
BNZ SET_1
SPLK #20H,S_DATA
; CALL S_CX
SPLK #01FH,S_COUNT
SPLK #1,FLAG
B LOOP
SET_1
SPLK #03AH,S_DATA
; CALL S_CX
SPLK #01FH,S_COUNT
SPLK #0,FLAG
NOP
NOP
B LOOP
;*******************闪烁*********************
;****************时钟芯片初始化**************
TIME_INIT
LDP #W_CON ;复位器件
SPLK #0A2H,W_CON
SPLK #00H,W_ADD
SPLK #28H,W_DAT
CALL T_WRITE
LDP #W_CON
SPLK #20H,W_DAT ;芯片不使能
CALL T_WRITE
LDP #W_CON
SPLK #0DH,W_ADD ;
SPLK #80H,W_DAT
CALL T_WRITE
LDP #W_CON ;
SPLK #0EH,W_ADD
SPLK #00H,W_DAT
CALL T_WRITE
LDP #W_CON ;SECONDS 30秒
SPLK #02H,W_ADD
SPLK #30H,W_DAT
CALL T_WRITE
LDP #W_CON ;MINUTES 59分
SPLK #03H,W_ADD
SPLK #59H,W_DAT
CALL T_WRITE
LDP #W_CON ;HOURS ;23时
SPLK #04H,W_ADD
SPLK #23H,W_DAT
CALL T_WRITE
LDP #W_CON ;DAYS ;31号
SPLK #05H,W_ADD
SPLK #31H,W_DAT
CALL T_WRITE
LDP #W_CON ;week ;星期五
SPLK #06H,W_ADD
SPLK #05H,W_DAT
CALL T_WRITE
LDP #W_CON ;MONTHS ;12月
SPLK #07H,W_ADD
SPLK #12H,W_DAT
CALL T_WRITE
LDP #W_CON ;YEAR ;06年
SPLK #08H,W_ADD
SPLK #06H,W_DAT
CALL T_WRITE
LDP #W_CON ;启动
SPLK #00H,W_ADD
SPLK #08H,W_DAT
CALL T_WRITE
RET
;****************读取时钟信息********************
TIME_READ
;===================MIAO=====================
LDP #W_CON
SPLK #0A2H,W_CON
SPLK #0A3H,R_CON
SPLK #02H,W_ADD ;秒
CALL T_READ
LDP #R_DAT
LACC R_DAT
SACL TEMP
AND #0FH
OR #030H
SACL M0
LACC R_DAT
RPT #3H
SFR
AND #07H
OR #030H
SACL M1
CALL DELAY2
;===================FEN=======================
LDP #W_CON
SPLK #0A2H,W_CON
SPLK #0A3H,R_CON
SPLK #03H,W_ADD ;分
CALL T_READ
LDP #R_DAT
LACC R_DAT
AND #0FH
OR #030H
SACL F0
LACC R_DAT
RPT #3H
SFR
AND #07H
OR #030H
SACL F1
CALL DELAY2
;==============SHI========================
LDP #W_CON
SPLK #0A2H,W_CON
SPLK #0A3H,R_CON
SPLK #04H,W_ADD ;时
CALL T_READ
LDP #R_DAT
LACC R_DAT
AND #0FH
OR #030H
SACL S0
LACC R_DAT
RPT #3H
SFR
AND #03H
OR #030H
SACL S1
CALL DELAY2
;==============day========================
LDP #W_CON
SPLK #0A2H,W_CON
SPLK #0A3H,R_CON
SPLK #05H,W_ADD ;天
CALL T_READ
LDP #R_DAT
LACC R_DAT
AND #0FH
OR #030H
SACL DAY0
LACC R_DAT
RPT #3H
SFR
AND #03H
OR #030H
SACL DAY1
CALL DELAY2
;==============week========================
LDP #W_CON
SPLK #0A2H,W_CON
SPLK #0A3H,R_CON
SPLK #06H,W_ADD ;星期
CALL T_READ
LDP #R_DAT
LACC R_DAT
AND #07H
SFL
ADD #TABLE2
TBLR WEEK1
ADD #1
TBLR WEEK0
CALL DELAY2
;==============months========================
LDP #W_CON
SPLK #0A2H,W_CON
SPLK #0A3H,R_CON
SPLK #07H,W_ADD ;月份
CALL T_READ
LDP #R_DAT
LACC R_DAT
AND #0FH
OR #030H
SACL MON0
LACC R_DAT
RPT #3H
SFR
AND #01H
OR #030H
SACL MON1
CALL DELAY2
;==============YEAR========================
LDP #W_CON
SPLK #0A2H,W_CON
SPLK #0A3H,R_CON
SPLK #08H,W_ADD ;年
CALL T_READ
LDP #R_DAT
LACC R_DAT
AND #0FH
OR #030H
SACL YEAR0
LACC R_DAT
RPT #3H
SFR
AND #0FH
OR #030H
SACL YEAR1
CALL DELAY2
;============================================
LDP #TEMP1
SPLK #91H,TEMP1
CALL ADD_SET
LDP #TEMP1
LACC S1
SACL TEMP1
CALL DATA_SET
LDP #TEMP1
LACC S0
SACL TEMP1
CALL DATA_SET
LDP #TEMP1
LACC S_DATA
SACL TEMP1
CALL DATA_SET
LDP #TEMP1
LACC F1
SACL TEMP1
CALL DATA_SET
LDP #TEMP1
LACC F0
SACL TEMP1
CALL DATA_SET
LDP #TEMP1
LACC S_DATA
SACL TEMP1
CALL DATA_SET
LDP #TEMP1
LACC M1
SACL TEMP1
CALL DATA_SET
LDP #TEMP1
LACC M0
SACL TEMP1
CALL DATA_SET
LDP #TEMP1
SPLK #9EH,TEMP1 ;DAY
CALL ADD_SET
LDP #TEMP1
LACC DAY1
SACL TEMP1
CALL DATA_SET
LDP #TEMP1
LACC DAY0
SACL TEMP1
CALL DATA_SET
LDP #TEMP1
SPLK #8EH,TEMP1 ;WEEK
call ADD_SET
LDP #TEMP1
LACC WEEK1
SACL TEMP1
CALL DATA_SET
LDP #TEMP1
LACC WEEK0
SACL TEMP1
CALL DATA_SET
LDP #TEMP1
SPLK #9CH,TEMP1 ;MONTHS
call ADD_SET
LDP #TEMP1
LACC MON1
SACL TEMP1
CALL DATA_SET
LDP #TEMP1
LACC MON0
SACL TEMP1
CALL DATA_SET
LDP #TEMP1
SPLK #9AH,TEMP1 ;YEAR
CALL ADD_SET
LDP #TEMP1
LACC YEAR1
SACL TEMP1
CALL DATA_SET
LDP #TEMP1
LACC YEAR0
SACL TEMP1
CALL DATA_SET
RET
;****************时钟芯片写数据******************
T_WRITE
NOP
NOP
CALL START
LDP #W_CON
LACC W_CON
SACL DATA
CALL WRITE
CALL ACK
LDP #W_CON
LACC W_ADD
SACL DATA
CALL WRITE
CALL ACK
LDP #W_DAT
LACC W_DAT
SACL DATA
CALL WRITE
CALL ACK
CALL STOP
CALL DELAY2
RET
;*****************WRITE END**************************
;***************时钟芯片读数据***********************
T_READ ;
CALL START
LDP #W_CON
LACC W_CON
SACL DATA
CALL WRITE
CALL ACK
LDP #W_ADD
LACC W_ADD
SACL DATA
CALL WRITE
CALL ACK
CALL START
LDP #R_CON
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -