📄 main.asm
字号:
;======================================================
.include "F2407.h" ;头文件
.def _c_int0
.bss GPR0,1
.bss TEMP1,1 ;由car.cmd文件分配的空间可知
.bss TEMP2,1 ;TEMP1,TEMP2,TEMP3,TEMP4对应的
.bss TEMP3,1 ;地址分别为:200h,201h,202h,203h
.bss TEMP4,1 ;204h
.bss TEMP5,1
DATA1 .usect ".blk0",1 ;由car.cmd文件分配的空间可知
DATA2 .usect ".blk0",1 ;DATA1,DATA2,DATA3,DATA4对应的
DATA3 .usect ".blk0",1 ;地址分别为:300h,301h,302h
DATA4 .usect ".blk0",1 ;303h
T1 .usect ".blk3",1 ;由car.cmd文件分配的空间可知
T2 .usect ".blk3",1 ;T1,T2,T3,T4对应地址为:
T3 .usect ".blk3",1 ;800h,801h,802h,803h
T4 .usect ".blk3",1
;======================================================
KICK_DOG .macro ;看门狗宏指令
LDP #00E0h ;指针指向7000h-707Fh
SPLK #05555h, WDKEY ;看门狗密钥
SPLK #0AAAAh, WDKEY
LDP #0h ;指针指向0000h-007Fh
.endm
;======================================================
;系统初始化
;使能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 #01FFh, GPR0
OUT GPR0, WSGR ;设置整体延时
LDP #SCSR1>>7
SPLK #0000011010001100B,SCSR1 ;仅使能ADC EVA EVB时钟
LDP #IMR>>7
SPLK #0H,IMR ;所有中断均不使能
;=========================中断初始化============================
LDP #IFR>>7
SPLK #0FFH,IFR ;写1清除中断标志位
SPLK #012H,IMR ;写1使能中断2和中断5
LDP #EVAIFRA>>7
SPLK #0FFFH,EVAIFRA ;设置EVA的中断标志寄存器A
SPLK #0FH,EVAIFRB ;设置EVA的中断标志寄存器B
SPLK #0FH,EVAIFRC ;设置EVA的中断标志寄存器C
SPLK #0200H,EVAIMRA ;设置EVA的中断屏蔽寄存器A
SPLK #0,EVAIMRB
SPLK #0,EVAIMRC
;=========================SCI初始化============================
LDP #SCICCR>>7
SPLK #027H,SCICCR ;设置串行通信接口通信控制寄存器
SPLK #003H,SCICTL1 ;设置串行通信接口控制寄存器1
SPLK #02H,SCICTL2 ;设置串行通信接口控制寄存器2
SPLK #0H,SCIHBAUD ;波特率选择,波特率为115200
SPLK #02AH,SCILBAUD
SPLK #20H,SCIPRI ;设置串行通信接口优先级控制寄存器
SPLK #23H,SCICTL1
;=========================AD初始化=============================
LDP #0E1H
SPLK #0100000000000011b,ADCTRL1 ;复位ADC模块
NOP
SPLK #0011000000000011b,ADCTRL1 ;设置AD模块,不受仿真悬挂影响
SPLK #4000H,ADCTRL2
SPLK #07h, MAXCONV ;选择8个通道
SPLK #3333h, CHSELSEQ1 ;将转换通道全部选择通道3
SPLK #3333h, CHSELSEQ2
;====================初始化事件管理器=========================
LDP #T1PR>>7
SPLK #1000,T1PR ;设置通用定时器的周期寄存器1
SPLK #1000,CMPR1 ;设置通用定时器的比较寄存器1
SPLK #1000,CMPR2
SPLK #1000,CMPR3
SPLK #006H,ACTRA ;设置比较方式控制寄存器
SPLK #01F4H,DBTCONA ;设置死区时间控制器寄存器
SPLK #8200H,COMCONA ;设置比较控制寄存器
SPLK #0842H,T1CON ;设置定时器1的控制寄存器
;============================================================
LOOP
NOP
LDP #TEMP1 ;打开TEMP1对应的页
SACL TEMP1 ;将TEMP1加载到累加器(ACC)中
ADD #1 ;ACC加1
SACL TEMP2 ;将所得结果保存到TEMP2中
ADD #1 ;ACC加1
SACL TEMP3 ;将所得结果保存到TEMP3中
ADD #1 ;ACC加1
SACL TEMP4 ;将所得结果保存到TEMP4中
LDP #DATA1 ;打开DATA1对应的页
ADD #1 ;ACC加1
SACL DATA1 ;将所得结果保存到DATA1中
ADD #1 ;ACC加1
SACL DATA2 ;将所得结果保存到DATA2中
ADD #1 ;ACC加1
SACL DATA3 ;将所得结果保存到DATA3中
ADD #1 ;ACC加1
SACL DATA4 ;将所得结果保存到DATA4中
LDP #T1 ;打开T1对应的页
ADD #1 ;ACC加1
SACL T1 ;将所得结果保存到T1中
ADD #1 ;ACC加1
SACL T2 ;将所得结果保存到T2中
ADD #1 ;ACC加1
SACL T3 ;将所得结果保存到T3中
ADD #1 ;ACC加1
SACL T4 ;将所得结果保存到T4中
SPLK #0H,T4 ;将0赋给T4
OUT T4,0A000H ;将T4=0送给0A000所对应的地址空间
IN TEMP1,0A001H ;将0A001地址空间中的值送到TEMP1中
SPLK #0FFH,TEMP1 ;此条语句没将0FF赋给TEMP1
OUT TEMP1,02000H ;但已经将TEMP1=0FFH送给I/O
RPT #0FFH
NOP ;空指令
SPLK #0H,TEMP1
OUT TEMP1,02000H
B LOOP ;无条件跳转到LOOP
.END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -