📄 mk7a21p capture.asm
字号:
#include "mk7a21p.inc" ;编译该文档需包含"mk7a21p.inc"文件
;--------------------------------------------------------------------
;芯片型号(mk7a21p)
;--------------------------------------------------------------------
;配置寄存器设置说明(CONFIG)
;1-----------FOSC=INRC&NS ;LS,NS,HS,RC,INRC(单时钟)
;INRC&LS,INRC&NS,INRC&HS
;2-----------CPT=OFF ;ON,OFF
;3-----------WDTE=Disable ;Enable,Disable
;4-----------LV=2.3V ;4V,2.3V,Don't use
;5-----------RST_DEF=...input... ;...input...,...reset...
;6-----------EXT_CLK=...timer sourse... ;...IO...,...timer sourse...
;---------------------------------------------------------------------
a_buf equ 0x40
status_buf equ 0x41
dat_0 equ 0x42
dat_1 equ 0x43
;---------------------------------------------------------------------
org 0x000 ;mk7a21p的复位向量地址定义
lgoto main ;跳转到主程序入口
org 0x004 ;mk7a21p的中断向量地址定义
lgoto int ;跳转到中断程序入口
;---------------------------------------------------------------------
org 0x010
int
movam a_buf
swap status,a
movam status_buf ;保护现场
;-------------------------------------------------------------------
btsc irqf,tm1f
lgoto int_tm1 ;进入TM1有关的中断服务程序
btsc irqf,tm2f
lgoto int_tm2 ;进入TM2有关的中断服务程序
btsc irqf,tm3f
lgoto int_tm3 ;进入TM3有关的中断服务程序
btsc irqf,paf
lgoto int_pa ;进入PortA中断服务程序
btsc irqf,adcf
lgoto int_adc ;进入AD转换中断服务程序
;-------------------------------------------------------------------
int_end
swap status_buf,a
movam status
swap a_buf,m
swap a_buf,a ;恢复现场
reti
;---------------------------------------------------------------------
int_tm1
bc irqf,tm1f
;-------------------------------------------------------------------
;TM1中断服务程序
com tm1l_la,a
movam dat_0
com tm1h_la,a
movam dat_1
lcall display
lgoto int_end
;---------------------------------------------------------------------
int_tm2
bc irqf,tm2f
;-------------------------------------------------------------------
;TM2中断服务程序
;-------------------------------------------------------------------
lgoto int_end
;---------------------------------------------------------------------
int_tm3
bc irqf,tm2f
;-------------------------------------------------------------------
;TM2中断服务程序
;-------------------------------------------------------------------
lgoto int_end
;---------------------------------------------------------------------
int_pa
bc irqf,paf
;-------------------------------------------------------------------
;PortA中断服务程序
;-------------------------------------------------------------------
lgoto int_end
;-----------------------------------------------------------------------------------
int_adc
bc irqf,adcf
;-------------------------------------------------------------------
;adc中断服务程序
;-------------------------------------------------------------------
lgoto int_end
;-----------------------------------------------------------------------------------
main
movla b'00000000'
movam sys_ctl ;单时钟模式时此设置无效
;双时钟模式时:Bit7---系统时钟选择
;双时钟模式时:Bit1---内部RC振荡控制
;双时钟模式时:Bit0---外部振荡控制
;-------------------------------------------------------------------
movla b'10000011'
movam wdt_ctl ;WDT的使能及其预分频为1:8
;-------------------------------------------------------------------
movla b'00010000'
movam pa_dir ;PA4输入
movla b'00000000'
movam pa_dat ;PA0-7状态
movla b'00000000'
movam pa_plu ;PA0-7上拉禁止
movla b'00000000'
movam pa_inte ;PA0-7唤醒禁止(外部中断禁止)
;-------------------------------------------------------------------
movla b'11110000'
movam pb_dir ;PB0-3输出
movla b'11110000'
movam pb_dat ;PB0-3状态
movla b'11110000'
movam pb_plu ;PB0-3上拉禁止
;-------------------------------------------------------------------
movla b'11110000'
movam pc_dir ;PC0,2,3输出,PC1只能作为输入
movla b'11110000'
movam pc_dat ;PC0-3状态
movla b'11110000'
movam pc_plu ;PC0-3上拉禁止
;--------------------------------------------------------------------
movla b'00110000' ;以下为TMR1的初始化程序段
movam tm1_ctl1 ;TM1用作捕捉模式,预分频1:1
movla b'00000000'
movam tm1_ctl2 ;Bit7:比较计数器自动清零使能
;-----------------------
mov clr_cnt,m ;写这个寄存器将清零比较计数器
;-----------------------
;movla 0x50
;movam tm1l_la
;movla 0xc3
;movam tm1h_la
;---------------------------------------------------------------------
movla b'01100010' ;以下为TMR2的初始化程序段
movam tm2_ctl1
movla b'11000000'
movam tm2_ctl2 ;Bit7:模式选择/Bit6:PWM初始状态
;Bit5:IO或TO_E/Bit3-0:PWM预分频
movla .200
movam tm2_la
;---------------------------------------------------------------------
movla b'01100010' ;以下为TMR3的初始化程序段
movam tm3_ctl
movla .100
movam tm3_la
;---------------------------------------------------------------------
movla b'00000000' ;以下是ADC的初始化设置
movla ad_ctl1 ;Bit7:adc使能/Bit5:模式/Bit1-0通道选择
movla b'00000000'
movla ad_ctl2 ;Bit7:比较结果/Bit1-0:adc时钟源
movla b'00000000'
movla ad_ctl3 ;Bit3-0:PB0-3复用管脚的选择
movla .0
movla ad_dat
;---------------------------------------------------------------------
movla b'10000010' ;以下是中断设置
movam irqm ;Bit1:TM1/Bit2:TM2/Bit3:TM3
;Bit4:PA/Bit6:ADC/Bit7:中断总使能Bit
clr irqf
;---------------------------------------------------------------------
bs tm1_ctl1,7
bs tm2_ctl1,7
;bs tm3_ctl1,7
nop
lgoto $
;-------------------------------------------------------------------------------------
display
mov dat_0,a
andla b'00001111'
movam pb_dat
;---------------------------------------------------------------------
rr dat_0,m
rr dat_0,m
rr dat_0,m
rr dat_0,m
mov dat_0,a
andla b'00001111'
movam pa_dat
;---------------------------------------------------------------------
btsc dat_1,0
bs pa_dat,5
btss dat_1,0
bc pa_dat,5
;---------------------------------------------------------------------
btsc dat_1,1
bs pa_dat,6
btss dat_1,1
bc pa_dat,6
;---------------------------------------------------------------------
btsc dat_1,2
bs pa_dat,7
btss dat_1,2
bc pa_dat,7
;---------------------------------------------------------------------
btsc dat_1,3
bs pc_dat,3
btss dat_1,3
bc pc_dat,3
;---------------------------------------------------------------------
btsc dat_1,4
bs pc_dat,2
btss dat_1,4
bc pc_dat,2
ret
;-------------------------------------------------------------------------------------
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -