超市门口垃圾桶里捡的电子秤拆出显示屏,用STM8S103F3P6编了HT1621的模拟时钟的汇编程序,程序能运行,屏能显示,但有问题,现在的情况是BCD码转换第一个转换的数据会有底数比如小时=1解码后应该是R1=0,R2=0,R3=1,但实际上R1=10,R2=2,R3=5,第一次写STM8的汇编程序,边学边写,折腾一天也没找到原因,求助坛里大神帮忙看看问题出在哪里。
程序如下 stm8/ #include "mapping.inc" #include "STM8S103F3P.inc" #DEFINE LCDSDA PD_ODR,#1 ; #DEFINE LCDSCK PD_ODR,#2 ; #DEFINE LCDCS PD_ODR,#3 ; #DEFINE SECFLAG FLAG,#0 ; ; #define txflag flag,#1 segment 'ram0' FLAG DS.B 1 ; R1 DS.B 1 ; R2 DS.B 1 ; R3 DS.B 1 ; R4 DS.B 1 ; R5 DS.B 1 ; R6 DS.B 1 ; R7 DS.B 1 ; R8 DS.B 1 ; SECOND DS.B 1 ; MINUTE DS.B 1 ; HOUR DS.B 1 ; DAY DS.B 1 ; TEMP DS.B 1 ; TEMP1 DS.B 1 ; TEMP2 DS.B 1 ; LCDDD DS.B 16 ; segment 'rom' main: ; NOP ; NOP ; initialize SP ldw X,#stack_end ldw SP,X ; clear stack stack_start.w EQU $stack_segment_start stack_end.w EQU $stack_segment_end ldw X,#stack_start clear_stack: clr (X) incw X cpw X,#stack_end jrule clear_stack ; 下面初始化IO端口 ; PD3设置成推挽输出 ; PD7设置成悬浮输入 LD A,#$08 LD PA_DDR,A ; 将PD3设置成输出 LD A,#$08 LD PA_CR1,A ; 将PD3设置成推挽输出 LD A,#00 LD PA_CR2,A ; LD A,#$7E LD PD_DDR,A ; 将PD3设置成输出 LD A,#$7E LD PD_CR1,A ; 将PD3设置成推挽输出 LD A,#00 LD PD_CR2,A ; ; 初始化A/D模块 ; LD A,#$00 ; LD ADC_CR2,A ; A/D结果数据左对齐 ; LD A,#$00 ; LD ADC_CR1,A ; ADC时钟=主时钟/2=1MHZ ; ADC转换模式=单次 ; 禁止ADC转换 ; LD A,#$03 ; LD ADC_CSR,A ; 选择通道3 ; LD A,#$20 ; LD ADC_TDRL,A ; 下面初始化定时器4 LD A,#$01 LD TIM2_EGR,A ; 允许产生更新事件 LD A,#$06 ;1=2分频=1徽秒,2=4=2,3=8=4,4=16=8,5=32=16,6=64=32,7=128=64 LD TIM2_PSCR,A ; 计数器时钟=主时钟/4=2MHZ/4 ; ; 设定重装载时的寄存器值 ; 注意必须保证先写入高8位,再写入低8位 LD A,#$7a LD TIM2_ARRH,A ; 设定重装载时的寄存器值的高8位 LD A,#$12 LD TIM2_ARRL,A ; 设定重装载时的寄存器值的低8位 LD A,#$7a LD TIM2_CNTRH,A ; 设定计数器的初值的高8位 LD A,#$12 LD TIM2_CNTRL,A ; 设定计数器的初值的低8位 ; 定时周期=60000*1=60mS LD A,#$01 ; b0 = 1,允许计数器工作 ; b1 = 0,允许更新 LD TIM2_CR1,A ; 设置控制器,启动定时器 LD A,#$01 ; 允许更新中断 LD TIM2_IER,A RIM ; 允许CPU全局中断 CALL DELAY_MS ; 延时100MS CALL LCDINIT CALL DDINIT CALL LCDDIS CALL DELAY_MS ; 延时100MS CALL DELAY_MS ; 延时100MS CALL DELAY_MS ; 延时100MS MOV DAY,#11 MOV HOUR,#12 MOV MINUTE,#34 MOV SECOND,#56 LOOP: BTJF SECFLAG,LOOP BRES SECFLAG CALL TIMEPRO CALL LCDDIS JRA LOOP LCDDIS: BRES LCDCS CALL LCDWR101 CALL LCDWR000000 CLRW X ; MOV TEMP1,#16 ; LDW Y,#LCDDD ; LD010: LD A,(Y) ; LD XL,A ; LD A,(NUMTAB,X) ; CALL LCDWRBYTE ; INCW Y ; DEC TEMP1 ; JRNE LD010 ; BSET LCDCS RET DDINIT: LDW X,#LCDDD MOV TEMP,#16 DI010: LD A,#17 LD (X),A INCW X DEC TEMP JRNE DI010 RET TIMEPRO: MOV TEMP,DAY CALL BCD8BIT MOV {LCDDD+11},R1 MOV {LCDDD+10},R2 MOV {LCDDD+9},R3 MOV TEMP,DAY CALL BCD8BIT MOV R1,#16 MOV {LCDDD+11},R1 MOV {LCDDD+10},R2 MOV {LCDDD+9},R3 MOV TEMP,HOUR CALL BCD8BIT MOV R1,#16 MOV {LCDDD+8},R1 MOV {LCDDD+7},R2 MOV {LCDDD+6},R3 MOV TEMP,MINUTE CALL BCD8BIT MOV R1,#16 MOV {LCDDD+5},R1 MOV {LCDDD+4},R2 MOV {LCDDD+3},R3 MOV TEMP,SECOND CALL BCD8BIT MOV R1,#16 MOV {LCDDD+2},R1 MOV {LCDDD+1},R2 MOV LCDDD,R3 RET ;*******************8位 二 进 制 的 数 值 转 化 为 BCD码 *************************** ;把 8 位二进制的数值转化为 BCD 码 ;要转换的数值放在 TEMP 中 ;转换结果的高位在 R1, 中位在 R2,低位在 R3 BCD8BIT.L LD A,TEMP LD XL,A LD A,#100 DIV X,A LD R4,A LD A,XL LD R1,A LD A,R4 LD XL,A LD A,#10 DIV X,A LD R3,A LD A,XL LD R2,A RET ;BCD16BIT: ;16位二进制--BCD码 ;入口参数:BINDATA DS.W(16位二进制数存放在BINDATA变量中) ;出口参数:BCDDATA DS.B 5(非压缩形式的BCD存放在以BCDDATA DS.B开始的RAM存储区中 ;使用资料:A,X,Y ; LDW X,BINDATA ; LDW Y,#10000 ; DIVW X,Y ; LD A,XL ; ; LD {BCDDATA+0},A ; ; LDW X,Y ; ; LDW Y,#1000 ; DIVW X,Y ; LD A,XL ; ; LD {BCDDATA+1},A ; ; LDW X,Y ; ; LD A,#100 ; DIV X,A ; ; EXG A,XL ; ; LD {BCDDATA+2},A ; ; LD A,#10 ; DIV X,A ; ; LD {BCDDATA+4},A ; ; LD A,XL ; LD {BCDDATA+3},A ; RET LCDINIT: LD A,#$06 ;打开偏压发生器 CALL LCDWRCOM LD A,#$02 ;打开系统时钟 CALL LCDWRCOM LD A,#$52 ;1/3 偏压4 背极 CALL LCDWRCOM RET LCDWR1000: BSET LCDSDA BRES LCDSCK BSET LCDSCK BRES LCDSDA BRES LCDSCK BSET LCDSCK BRES LCDSCK BSET LCDSCK BRES LCDSCK BSET LCDSCK RET LCDWR101: BSET LCDSDA BRES LCDSCK BSET LCDSCK BRES LCDSDA BRES LCDSCK BSET LCDSCK BSET LCDSDA BRES LCDSCK BSET LCDSCK RET LCDWR000000: BRES LCDSDA MOV TEMP,#06 LCDWR06: BRES LCDSCK BSET LCDSCK DEC TEMP JRNE LCDWR06 RET LCDWRCOM: BRES LCDCS CALL LCDWR1000 CALL LCDWRBYTE BSET LCDCS BSET LCDSDA RET LCDWRBYTE: MOV TEMP,#08 LCDWB000: RLC A BCCM LCDSDA BRES LCDSCK BSET LCDSCK DEC TEMP JRNE LCDWB000 RET ; 函数功能:延时 ; 输入参数:寄存器A -- 要延时的毫秒数,这里假设CPU的主频为2MHZ ; 输出参数:无 ; 返 回 值:无 ; 备 注:无 DELAY_MS.L PUSH A ; 将入口参数保存到堆栈中 LD A,#250 ; 寄存器A<-250,作为下面的循环数 DELAY_MS_1.L NOP ; 用空操作指令进行延时4T NOP ; 用空操作指令进行延时4T NOP ; 用空操作指令进行延时4T NOP ; 用空操作指令进行延时4T NOP ; 用空操作指令进行延时4T NOP ; 用空操作指令进行延时4T DEC A ; 寄存器A<-A-1,本条指令执行之间为1T JRNE DELAY_MS_1 ; 若不等于0,则循环, ; 本条指令执行时间为2T(跳时)或1T(不跳时) POP A ; 从堆栈中恢复入口参数 DEC A ; 将要延时的MS数-1 JRNE DELAY_MS ; 若不等于0,则循环 RET ; 函数返回 ; 下面是定时器2的中断服务程序 Timer2_Update_ISR.L LD A,#0 ; 清除更新标志 LD TIM2_SR1,A BSET SECFLAG BCPL PA_ODR,#3 INC SECOND LD A,SECOND CP A,#60 JRNE T2ISREND CLR SECOND INC MINUTE LD A,MINUTE CP A,#60 JRNE T2ISREND CLR MINUTE INC HOUR LD A,HOUR CP A,#24 JRNE T2ISREND CLR HOUR T2ISREND: IRET ; 中断返回 ; 下面是定时器4的中断服务程序 TIMER4_ISR.L LD A,#0 ; 清除更新标志 LD TIM4_SR,A ; BCPL PA_ODR,#3 IRET ; 中断返回 ; 16位显示对应16个字节,显示屏第一位显示对应最后一个字节,第一个字节对应最后一位显示 ;第1位显示和第5位显示没有小数点,小数点对应两个箭头,第6位和第10位也没有小数点,也是对应两个箭头 ;11位,12位,16位显示也没有小数点,对应三段电池显示 NUMTAB: DC.B $7D,$60,$3E,$7A,$63,$5B,$5F,$70 DC.B $7F,$7B,$77,$4F,$1D,$6E,$1F,$17,$02,$FF,$00 ;hcbadegf ;01111101-0(7D) ;01100000-1(60) ;00111110-2(3E) ;01111010-3(7A) ;01100011-4(63) ;01011011-5(5B) ;01011111-6(5F) ;01110000-7(70) ;01111111-8(7F) ;01111011-9(7B) ;01110111-A(77) ;01001111-b(4F) ;00011101-C(1D) ;01101110-d(6E) ;00011111-E(1F) ;00010111-F(17) ;00000010--(02) interrupt NonHandledInterrupt NonHandledInterrupt: IRET segment 'vectit' dc.l {$82000000+main} ; reset 复位 dc.l {$82000000+NonHandledInterrupt} ; trap 软件中断 dc.l {$82000000+NonHandledInterrupt} ; irq0 TLI 外部最高级中断 dc.l {$82000000+NonHandledInterrupt} ; irq1 AWU 自动唤醒HALT模式中断 dc.l {$82000000+NonHandledInterrupt} ; irq2 CLK 时钟控制 dc.l {$82000000+NonHandledInterrupt} ; irq3 EXTI0 端口A 外部中断 dc.l {$82000000+NonHandledInterrupt} ; irq4 EXTI1 端口B 外部中断 dc.l {$82000000+NonHandledInterrupt} ; irq5 EXTI2 端口C 外部中断 dc.l {$82000000+NonHandledInterrupt} ; irq6 EXTI3 端口D 外部中断 dc.l {$82000000+NonHandledInterrupt} ; irq7 EXTI4 端口E 外部中断 dc.l {$82000000+NonHandledInterrupt} ; irq8 CAN RX中断 dc.l {$82000000+NonHandledInterrupt} ; irq9 CAN TX/ER/SC中断 dc.l {$82000000+NonHandledInterrupt} ; irq10 SPI 发送完成 dc.l {$82000000+NonHandledInterrupt} ; irq11 TIM1更新/上溢出/下溢出/触发/刹车 dc.l {$82000000+NonHandledInterrupt} ; irq12 TIM1捕获比较 dc.l {$82000000+Timer2_Update_ISR} ; irq13 TIM2更新上溢出 dc.l {$82000000+NonHandledInterrupt} ; irq14 TIM2捕获比较 dc.l {$82000000+NonHandledInterrupt} ; irq15 TIM3 更新/上溢出 dc.l {$82000000+NonHandledInterrupt} ; irq16 TIM3 捕获/比较 dc.l {$82000000+NonHandledInterrupt} ; irq17 UART1 发送完成 dc.l {$82000000+NonHandledInterrupt} ; irq18 UART1 接收寄存器满 dc.l {$82000000+NonHandledInterrupt} ; irq19 I2C I2C中断 dc.l {$82000000+NonHandledInterrupt} ; irq20 UART2/3 发送完成 dc.l {$82000000+NonHandledInterrupt} ; irq21 UART2/3 接始寄存器满 dc.l {$82000000+NonHandledInterrupt} ; irq22 ADC 转换结束 dc.l {$82000000+TIMER4_ISR} ; irq23 TIM4更新/上溢出 dc.l {$82000000+NonHandledInterrupt} ; irq24 FLASH 编程结束/禁止编程 dc.l {$82000000+NonHandledInterrupt} ; irq25 dc.l {$82000000+NonHandledInterrupt} ; irq26 dc.l {$82000000+NonHandledInterrupt} ; irq27 dc.l {$82000000+NonHandledInterrupt} ; irq28 dc.l {$82000000+NonHandledInterrupt} ; irq29 end |
评分
查看全部评分
正常的程序如下。程序可用于STM8汇编的学习和入门。
stm8/
#include "mapping.inc"
#include "STM8S103F3P.inc"
#DEFINE LCDSDA PD_ODR,#1 ;
#DEFINE LCDSCK PD_ODR,#2 ;
#DEFINE LCDCS PD_ODR,#3 ;
#DEFINE SECFLAG FLAG,#0 ;
; #define txflag flag,#1
segment 'ram0'
FLAG DS.B 1 ;
R1 DS.B 1 ;
R2 DS.B 1 ;
R3 DS.B 1 ;
R4 DS.B 1 ;
R5 DS.B 1 ;
R6 DS.B 1 ;
R7 DS.B 1 ;
R8 DS.B 1 ;
SECOND DS.B 1 ;
MINUTE DS.B 1 ;
HOUR DS.B 1 ;
DAY DS.B 1 ;
TEMP DS.B 1 ;
TEMP1 DS.B 1 ;
TEMP2 DS.B 1 ;
LCDDD DS.B 16 ;
segment 'rom'
main:
; NOP
; NOP
; initialize SP
ldw X,#stack_end
ldw SP,X
; clear stack
stack_start.w EQU $stack_segment_start
stack_end.w EQU $stack_segment_end
ldw X,#stack_start
clear_stack:
clr (X)
incw X
cpw X,#stack_end
jrule clear_stack
; 下面初始化IO端口
; PD3设置成推挽输出
; PD7设置成悬浮输入
LD A,#$08
LD PA_DDR,A ; 将PD3设置成输出
LD A,#$08
LD PA_CR1,A ; 将PD3设置成推挽输出
LD A,#00
LD PA_CR2,A ;
LD A,#$7E
LD PD_DDR,A ; 将PD3设置成输出
LD A,#$7E
LD PD_CR1,A ; 将PD3设置成推挽输出
LD A,#00
LD PD_CR2,A ;
; 初始化A/D模块
; LD A,#$00
; LD ADC_CR2,A ; A/D结果数据左对齐
; LD A,#$00
; LD ADC_CR1,A ; ADC时钟=主时钟/2=1MHZ
; ADC转换模式=单次
; 禁止ADC转换
; LD A,#$03
; LD ADC_CSR,A ; 选择通道3
; LD A,#$20
; LD ADC_TDRL,A
; 下面初始化定时器4
LD A,#$01
LD TIM2_EGR,A ; 允许产生更新事件
LD A,#$06 ;1=2分频=1徽秒,2=4=2,3=8=4,4=16=8,5=32=16,6=64=32,7=128=64
LD TIM2_PSCR,A ; 计数器时钟=主时钟/4=2MHZ/4
;
; 设定重装载时的寄存器值
; 注意必须保证先写入高8位,再写入低8位
LD A,#$7a
LD TIM2_ARRH,A ; 设定重装载时的寄存器值的高8位
LD A,#$12
LD TIM2_ARRL,A ; 设定重装载时的寄存器值的低8位
LD A,#$7a
LD TIM2_CNTRH,A ; 设定计数器的初值的高8位
LD A,#$12
LD TIM2_CNTRL,A ; 设定计数器的初值的低8位
; 定时周期=60000*1=60mS
LD A,#$01
; b0 = 1,允许计数器工作
; b1 = 0,允许更新
LD TIM2_CR1,A ; 设置控制器,启动定时器
LD A,#$01 ; 允许更新中断
LD TIM2_IER,A
RIM ; 允许CPU全局中断
CALL DELAY_MS ; 延时100MS
CALL LCDINIT ;
CALL DDINIT ;
CALL LCDDIS ;
CALL DELAY_MS ; 延时100MS
CALL DELAY_MS ; 延时100MS
CALL DELAY_MS ; 延时100MS
MOV DAY,#0
MOV HOUR,#12
MOV MINUTE,#34
MOV SECOND,#56
LOOP:
BTJF SECFLAG,LOOP
BRES SECFLAG
CALL TIMEPRO
CALL LCDDIS
JRA LOOP
LCDDIS:
BRES LCDCS
CALL LCDWR101
CALL LCDWR000000
CLRW X ;
MOV TEMP1,#16 ;
LDW Y,#LCDDD ;
LD010:
LD A,(Y) ;
LD XL,A ;
LD A,(NUMTAB,X) ;
CALL LCDWRBYTE ;
INCW Y ;
DEC TEMP1 ;
JRNE LD010 ;
BSET LCDCS
RET
DDINIT:
LDW X,#LCDDD
MOV TEMP,#16
DI010:
LD A,#17
LD (X),A
INCW X
DEC TEMP
JRNE DI010
RET
TIMEPRO:
MOV TEMP,DAY
CALL BCD8BIT
MOV R1,#16
MOV {LCDDD+11},R1
MOV {LCDDD+10},R2
MOV {LCDDD+9},R3
MOV TEMP,HOUR
CALL BCD8BIT
MOV R1,#16
MOV {LCDDD+8},R1
MOV {LCDDD+7},R2
MOV {LCDDD+6},R3
MOV TEMP,MINUTE
CALL BCD8BIT
MOV R1,#16
MOV {LCDDD+5},R1
MOV {LCDDD+4},R2
MOV {LCDDD+3},R3
MOV TEMP,SECOND
CALL BCD8BIT
MOV R1,#16
MOV {LCDDD+2},R1
MOV {LCDDD+1},R2
MOV LCDDD,R3
RET
;8位 二 进 制 的 数 值 转 化 为 BCD码
;把 8 位二进制的数值转化为 BCD 码
;要转换的数值放在 TEMP 中
;转换结果的高位在 R1, 中位在 R2,低位在 R3
BCD8BIT:
LD A,TEMP
LD XL,A
LD A,#100
DIV X,A
LD R4,A
LD A,XL
LD R1,A
LD A,R4
LD XL,A
LD A,#10
DIV X,A
LD R3,A
LD A,XL
LD R2,A
RET
;BCD16BIT: ;16位二进制--BCD码
;入口参数:BINDATA DS.W(16位二进制数存放在BINDATA变量中)
;出口参数:BCDDATA DS.B 5(非压缩形式的BCD存放在以BCDDATA DS.B开始的RAM存储区中
;使用资料:A,X,Y
; LDW X,BINDATA
; LDW Y,#10000
; DIVW X,Y
; LD A,XL ;
; LD {BCDDATA+0},A ;
; LDW X,Y ;
; LDW Y,#1000
; DIVW X,Y
; LD A,XL ;
; LD {BCDDATA+1},A ;
; LDW X,Y ;
; LD A,#100
; DIV X,A ;
; EXG A,XL ;
; LD {BCDDATA+2},A ;
; LD A,#10
; DIV X,A ;
; LD {BCDDATA+4},A ;
; LD A,XL
; LD {BCDDATA+3},A
; RET
LCDINIT:
LD A,#$06 ;打开偏压发生器
CALL LCDWRCOM
LD A,#$02 ;打开系统时钟
CALL LCDWRCOM
LD A,#$52 ;1/3 偏压4 背极
CALL LCDWRCOM
RET
LCDWR1000:
BSET LCDSDA
BRES LCDSCK
BSET LCDSCK
BRES LCDSDA
BRES LCDSCK
BSET LCDSCK
BRES LCDSCK
BSET LCDSCK
BRES LCDSCK
BSET LCDSCK
RET
LCDWR101:
BSET LCDSDA
BRES LCDSCK
BSET LCDSCK
BRES LCDSDA
BRES LCDSCK
BSET LCDSCK
BSET LCDSDA
BRES LCDSCK
BSET LCDSCK
RET
LCDWR000000:
BRES LCDSDA
MOV TEMP,#06
LCDWR06:
BRES LCDSCK
BSET LCDSCK
DEC TEMP
JRNE LCDWR06
RET
LCDWRCOM:
BRES LCDCS
CALL LCDWR1000
CALL LCDWRBYTE
BSET LCDCS
BSET LCDSDA
RET
LCDWRBYTE:
MOV TEMP,#08
LCDWB000:
RLC A
BCCM LCDSDA
BRES LCDSCK
BSET LCDSCK
DEC TEMP
JRNE LCDWB000
RET
; 函数功能:延时
; 输入参数:寄存器A -- 要延时的毫秒数,这里假设CPU的主频为2MHZ
; 输出参数:无
; 返 回 值:无
; 备 注:无
DELAY_MS:
PUSH A ; 将入口参数保存到堆栈中
LD A,#250 ; 寄存器A<-250,作为下面的循环数
DELAY_MS_1:
NOP ; 用空操作指令进行延时4T
NOP ; 用空操作指令进行延时4T
NOP ; 用空操作指令进行延时4T
NOP ; 用空操作指令进行延时4T
NOP ; 用空操作指令进行延时4T
NOP ; 用空操作指令进行延时4T
DEC A ; 寄存器A<-A-1,本条指令执行之间为1T
JRNE DELAY_MS_1 ; 若不等于0,则循环,
; 本条指令执行时间为2T(跳时)或1T(不跳时)
POP A ; 从堆栈中恢复入口参数
DEC A ; 将要延时的MS数-1
JRNE DELAY_MS ; 若不等于0,则循环
RET ; 函数返回
; 下面是定时器2的中断服务程序
Timer2_Update_ISR:
PUSH A
LD A,#0 ; 清除更新标志
LD TIM2_SR1,A
BSET SECFLAG
BCPL PA_ODR,#3
INC SECOND
LD A,SECOND
CP A,#60
JRNE T2ISREND
CLR SECOND
INC MINUTE
LD A,MINUTE
CP A,#60
JRNE T2ISREND
CLR MINUTE
INC HOUR
LD A,HOUR
CP A,#24
JRNE T2ISREND
CLR HOUR
T2ISREND:
POP A
IRET ; 中断返回
; 下面是定时器4的中断服务程序
TIMER4_ISR:
LD A,#0 ; 清除更新标志
LD TIM4_SR,A
; BCPL PA_ODR,#3
IRET ; 中断返回
; 16位显示对应16个字节,显示屏第一位显示对应最后一个字节,第一个字节对应最后一位显示
;第1位显示和第5位显示没有小数点,小数点对应两个箭头,第6位和第10位也没有小数点,也是对应两个箭头
;11位,12位,16位显示也没有小数点,对应三段电池显示
NUMTAB:
DC.B $7D,$60,$3E,$7A,$63,$5B,$5F,$70
DC.B $7F,$7B,$77,$4F,$1D,$6E,$1F,$17,$02,$FF,$00
;hcbadegf
;01111101-0(7D)
;01100000-1(60)
;00111110-2(3E)
;01111010-3(7A)
;01100011-4(63)
;01011011-5(5B)
;01011111-6(5F)
;01110000-7(70)
;01111111-8(7F)
;01111011-9(7B)
;01110111-A(77)
;01001111-b(4F)
;00011101-C(1D)
;01101110-d(6E)
;00011111-E(1F)
;00010111-F(17)
;00000010--(02)
interrupt NonHandledInterrupt
NonHandledInterrupt:
IRET
segment 'vectit'
dc.l {$82000000+main} ; reset 复位
dc.l {$82000000+NonHandledInterrupt} ; trap 软件中断
dc.l {$82000000+NonHandledInterrupt} ; irq0 TLI 外部最高级中断
dc.l {$82000000+NonHandledInterrupt} ; irq1 AWU 自动唤醒HALT模式中断
dc.l {$82000000+NonHandledInterrupt} ; irq2 CLK 时钟控制
dc.l {$82000000+NonHandledInterrupt} ; irq3 EXTI0 端口A 外部中断
dc.l {$82000000+NonHandledInterrupt} ; irq4 EXTI1 端口B 外部中断
dc.l {$82000000+NonHandledInterrupt} ; irq5 EXTI2 端口C 外部中断
dc.l {$82000000+NonHandledInterrupt} ; irq6 EXTI3 端口D 外部中断
dc.l {$82000000+NonHandledInterrupt} ; irq7 EXTI4 端口E 外部中断
dc.l {$82000000+NonHandledInterrupt} ; irq8 CAN RX中断
dc.l {$82000000+NonHandledInterrupt} ; irq9 CAN TX/ER/SC中断
dc.l {$82000000+NonHandledInterrupt} ; irq10 SPI 发送完成
dc.l {$82000000+NonHandledInterrupt} ; irq11 TIM1更新/上溢出/下溢出/触发/刹车
dc.l {$82000000+NonHandledInterrupt} ; irq12 TIM1捕获比较
dc.l {$82000000+Timer2_Update_ISR} ; irq13 TIM2更新上溢出
dc.l {$82000000+NonHandledInterrupt} ; irq14 TIM2捕获比较
dc.l {$82000000+NonHandledInterrupt} ; irq15 TIM3 更新/上溢出
dc.l {$82000000+NonHandledInterrupt} ; irq16 TIM3 捕获/比较
dc.l {$82000000+NonHandledInterrupt} ; irq17 UART1 发送完成
dc.l {$82000000+NonHandledInterrupt} ; irq18 UART1 接收寄存器满
dc.l {$82000000+NonHandledInterrupt} ; irq19 I2C I2C中断
dc.l {$82000000+NonHandledInterrupt} ; irq20 UART2/3 发送完成
dc.l {$82000000+NonHandledInterrupt} ; irq21 UART2/3 接始寄存器满
dc.l {$82000000+NonHandledInterrupt} ; irq22 ADC 转换结束
dc.l {$82000000+TIMER4_ISR} ; irq23 TIM4更新/上溢出
dc.l {$82000000+NonHandledInterrupt} ; irq24 FLASH 编程结束/禁止编程
dc.l {$82000000+NonHandledInterrupt} ; irq25
dc.l {$82000000+NonHandledInterrupt} ; irq26
dc.l {$82000000+NonHandledInterrupt} ; irq27
dc.l {$82000000+NonHandledInterrupt} ; irq28
dc.l {$82000000+NonHandledInterrupt} ; irq29
end
评分
查看全部评分