历史上的今天
今天是:2025年04月07日(星期一)
2021年04月07日 | Freescale MC9S08AW60汇编学习笔记
2021-04-07 来源:eefocus
能够实现用七段led数码管显示出数字和字母、让它们同时显示甚至于滚动显示,这些功能已经很不错了,但是这样还不够,我们还想实现更准确的控制,让数码管按照我们的想法来显示,而不是呆板的循环,这样我们引入中断的想法。也许其他人会从查询和中断的关系这些地方来引出中断,但是我还是倾向于从控制的观点来引出中断,毕竟中断也是实现更直观的人为控制的方法,程序的运行变得可以加入人的意愿来执行,如果我们要让程序进入某一个中断程序,那么给主程序发一个中断,让它跳到中断子程序中运行就行了;我们不发中断,中断子程序就不会执行。还是用七段led数码管来演示,我们没发一个中断信号,数码管就在0~9之间变化一下。代码如下:
INCLUDE MC9S08AW60.inc
org $0070
IRQ_Count ds.b 1
org $1860
tab: dc.b $c0,$f9,$a4,$b0,$99,$92,$82,$f8,$80,$90,$88,$83,$a7,$a1,$86,$8e
io_init:
mov #$00,PTBD
mov #$00,PTDD
mov #$ff,PTGD
lda #%11111111
sta PTBDD
sta PTDDD
sta PTGDD
sta PTBDS
sta PTDDS
sta PTGDS
rts
IRQ_init: ;IRQ模块初始化
mov #$00,IRQ_Count
lda #%00010010
sta IRQSC ;IRQ功能允许,仅下降沿触发,允许中断
rts
IRQ_ISR: ;中断子程序
inc IRQ_Count ;该中断子程序主要实现的功能:累加中断次数
bset 2,IRQSC ; 向IRQACK位写1以清零IRQF
rti ;中断返回
main:clra
clrx
clrh
jsr io_init
sta SOPT ;禁止COP
jsr IRQ_init
cli ;开总中断
mov #$00,IRQ_Count
again:
clra
clrx
clrh
ldx IRQ_Count
lda tab,x
sta PTBD
lsra
lsra
lsra
lsra
sta PTDD
mov #$f7,PTGD
cpx #$10
bne next
mov #$00,IRQ_Count
next:jmp again
org $fffa
dc.w IRQ_ISR ;IRQ中断向量
org $fffe
dc.w main
该程序就是加入了中断之后的,关于中断的一些说明可以参看下图:

接着给出按16进制累加(255以内)显示的程序:
INCLUDE MC9S08AW60.inc
org $0070
IRQ_Count ds.b 1
num ds.b 1
count ds.b 1
org $1860
tab: dc.b $c0,$f9,$a4,$b0,$99,$92,$82,$f8,$80,$90,$88,$83,$a7,$a1,$86,$8e
re_cycle:
mov #70t,num
dbnz num,*
rts
delay_1ms:
mov #08t,count
re_call:
bsr re_cycle
dbnz count,re_call
rts
io_init:
mov #$00,PTBD
mov #$00,PTDD
mov #$ff,PTGD
lda #%11111111
sta PTBDD
sta PTDDD
sta PTGDD
sta PTBDS
sta PTDDS
sta PTGDS
rts
IRQ_init:
mov #$00,IRQ_Count
lda #%00010010
sta IRQSC
rts
IRQ_ISR:
inc IRQ_Count
bset 2,IRQSC
rti
main:clra
clrx
clrh
sta $1802
jsr io_init
sta SOPT
jsr IRQ_init
cli
mov #$00,IRQ_Count
again:
clra
clrx
clrh
lda IRQ_Count
ldx #16t
div
pshh
clrh
clrx
tax
clra
lda tab,x
mov #$fb,PTGD
sta PTBD
lsra
lsra
lsra
lsra
sta PTDD
jsr delay_1ms
mov #$ff,PTGD
clrx
clrh
clra
pula
tax
clrh
lda tab,x
sta PTBD
lsra
lsra
lsra
lsra
sta PTDD
mov #$f7,PTGD
jsr delay_1ms
mov #$ff,PTGD
jmp again
org $fffa
dc.w IRQ_ISR
org $fffe
dc.w main
思路是这样的:我们要显示的是中断的次数,也就是将中断的次数用16进制显示出来,我们将中断的次数提取出来,用它除以16,得到商和余数,商就作为高位,我们找到其字形码显示到数码管中,余数作为低位,并做相同的处理。这样我们就实现了16进制显示中断次数。注意一点,我们先处理商后处理余数,因为如果扩大显示的范围,先处理余数时也要做除法,比如将上面的例子改为用10进制显示范围还是0~255,当然这里完全可以做到0~999,我们将中断次数除以100后商可以直接处理,而余数还得除以10之后分为商和余数来处理。代码如下:
INCLUDE MC9S08AW60.inc
org $0070
IRQ_Count ds.b 1
num ds.b 1
count ds.b 1
org $1860
tab: dc.b $c0,$f9,$a4,$b0,$99,$92,$82,$f8,$80,$90,$88,$83,$a7,$a1,$86,$8e
re_cycle:
mov #70t,num
dbnz num,*
rts
delay_1ms:
mov #08t,count
re_call:
bsr re_cycle
dbnz count,re_call
rts
io_init:
mov #$00,PTBD
mov #$00,PTDD
mov #$ff,PTGD
lda #%11111111
sta PTBDD
sta PTDDD
sta PTGDD
sta PTBDS
sta PTDDS
sta PTGDS
rts
IRQ_init:
mov #$00,IRQ_Count
lda #%00010010
sta IRQSC
rts
IRQ_ISR:
inc IRQ_Count
bset 2,IRQSC
rti
main:clra
clrx
clrh
sta $1802
jsr io_init
sta SOPT
jsr IRQ_init
cli
mov #$00,IRQ_Count
again:
clra
clrx
clrh
lda IRQ_Count
ldx #100t
div
pshh
clrh
clrx
tax
clra
lda tab,x
mov #$fd,PTGD
sta PTBD
lsra
lsra
lsra
lsra
sta PTDD
jsr delay_1ms
mov #$ff,PTGD
clrx
clrh
clra
pula
ldx #10t
div
pshh
clrh
clrx
tax
clra
lda tab,x
mov #$fb,PTGD
sta PTBD
lsra
lsra
lsra
lsra
sta PTDD
jsr delay_1ms
mov #$ff,PTGD
clrx
clrh
clra
pula
tax
lda tab,x
sta PTBD
lsra
lsra
lsra
lsra
sta PTDD
mov #$f7,PTGD
jsr delay_1ms
mov #$ff,PTGD
jmp again
org $fffa
dc.w IRQ_ISR
org $fffe
dc.w main
史海拾趣
|
问题: Query:在从原理图更新到PCB的时候,如何保持原有器件的布局? 在Protel中,通常都会遇到需要修改原理图时,如何保持原有PCB板中器件的布局的问题。下面讲述一种有效的方式就是在PCB编辑窗口中使用菜单命令Project » Component Links来完成 ...… 查看全部问答> |
|
之前介绍过如何创建一个基本的Windows CE的平台,现在咱就上一次没有提到的部分进行一下补充定制并build OS。 首先,在VS2005 IDE中的View -> Other Windows -> Catalog Items中,添加或者删除相应的模块来完成OS定制,选项如下: 然后配置buil ...… 查看全部问答> |
|
本帖最后由 辛昕 于 2018-4-8 22:59 编辑 关于这个东西,我后来其实从来没捡起过。 但是,也就没有必要惦记着了。 当然了,每次说到这个东西,都会想起,故人已去~ 在做运放的过程中,知道了一个叫做模拟乘法器的东西。 但是想上网看看这个东 ...… 查看全部问答> |
|
Windows CE 5.0的ARMV4I补丁,名称如下: WinCEPB50-051231-Product-Update-Rollup-Armv4I.msi WinCEPB50-060131-2006M01-Armv4I.msi WinCEPB50-060228-2006M02-Armv4I.msi WinCEPB50-06 ...… 查看全部问答> |
|
谁有这样的程序,急求,可以和我联系. email:gcgaoxj@yahoo.com [ 本帖最后由 dreaming123 于 2011-3-16 21:42 编辑 ]… 查看全部问答> |
|
刚刚看到可以用:用社区芯币兑换51开发板PCB板!早知道在这里换了,自己花了150快大洋买了一个 能不能用社区芯币兑换ARM的开发板呢… 查看全部问答> |
|
请问有没有建立工程的教程,我按照官方网站的教程建立,(用的是ise13.1), 各种无奈啊,遇到的问题: 1、头文件的处理,我把用到的头文件拷到板级包的include文件夹,开始时可以,但是后面工程关闭,又出现 没找到头文件,那不是又得拷贝一次, ...… 查看全部问答> |
|
摘要:鉴于FPGA和DSP各自的优势,FPGA+DSP信号处理架构,已成为信号处理系统的常用结构。但目前此结构处理平台功能固定、通用性差,或对平台的介绍缺乏具体实现。文中针对以上两点提出一种通用信号处理系统。该系统不仅将两种处理器的优点集于一身 ...… 查看全部问答> |




