之前我们写了延时的子程序,但是仅仅在电脑上运行,在CodeWarrior中调试根本给不了延时所实现的直观效果,也就是说程序运行到哪里但我们却无法直观地得出发生了延时的效果,所以我们要把这个延时的程序用出去,比如点亮一盏led灯,让它延时我们规定的时间后熄灭,然后再点亮再熄灭......这里我们使用清华版的MC9S08AW60开发板来验证延时的效果。对于开发板的使用和烧写请多看看数据手册和使用说明。我们直接给出验证延时的代码:
org $0070
num ds.b 1
count1 ds.b 1
count2 ds.b 1
org $1860
re_cycle:
mov #70T,num
dbnz num,*
rts
delay_10ms:
mov #78T,count1
re_call:
bsr re_cycle
dbnz count1,re_call
mov #07T,count1
dbnz count1,*
rts
delay_500ms:
mov #50T,count2
re:
bsr delay_10ms
dbnz count2,re
rts
main:
bset 5,PTFD ;初始化PTF5
bset 5,PTFDD ;将PTF5设置为输出
again:
bclr 5,PTFD ;点亮核心子板上的蓝色led
bsr delay_500ms ;延时
bset 5,PTFD ;熄灭核心子板上的蓝色led
bsr delay_500ms
jmp again
org $fffe
dc.w main
这个程序大部分我们都是了解过的,所不熟悉的就是对PTFD的操作,我们所需要记住的是:点亮开发板上的灯就是对MCU的端口发送相应的数据,因为led灯是共阳极的,所以数据为‘0’时点亮,为‘1’时熄灭。当然,在使用某个端口之前不要忘记对该端口进行初始化,也就是将其设为输出,并设置初始状态为熄灭。解释一下:bset即置‘1’,bclr即置‘0’。对方向来说:‘1’为输出,‘0’为输入;对小灯的点亮与否来说:‘1’为熄灭,‘0’为点亮。
既然我们可以点亮一颗小灯,我们当然也能点亮许多小灯,如果我们点亮的是七段led数码管上的小灯,这是不是就意味着我们可以在七段led数码管上显示出1、2、3、4、5.......之类的数字或者a、b、c......之类的字母。例子如下:在4个数码管上同时显示0123。
INCLUDE MC9S08AW60.inc
org $0070
seg ds.b 1
num ds.b 1
count ds.b 1
org $1860
table: ;共阳极的七段数码管的段码表
dc.b $c0,$f9,$a4,$b0 ;0123的字形码
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
main:
clrx
clrh
clra
sta $1802 ;禁止掉COP,否则程序运行时间长了会发生COP复位
jsr io_init
mov #$fe,seg ;设置位选
again:
clrh
lda table,x ;查表得出字形码
sta PTBD ;点亮七段led数码管
lsra
lsra
lsra
lsra
sta PTDD
mov seg,PTGD
jsr delay_1ms ;延时
mov #$ff,PTGD ;熄灭led
lda seg ;改变位选
sec ;1-->C
rola ;将A中数据和标志位C一同左移一位
sta seg
incx
cpx #$4 ;判断是否结束并开启下一轮循环
bne next
clrx
mov #$fe,seg
next:
jmp again
org $fffe
dc.w main
为了实现1234同时显示在七段led数码管上,我们采用动态显示方式,即瞬间只点亮一个数码管,延时后再点亮下一个数码管,如此不停的循环显示,利用人眼视觉暂留效应,达到同时显示的效果。此外,我精心设计出了一个实现1234滚动显示的程序,如下:
INCLUDE MC9S08AW60.inc
org $0070
seg ds.b 1
num ds.b 1
count ds.b 1
count2 ds.b 1
sum ds.b 1
sum1 ds.b 1
org $1860
table:
dc.b $c0,$f9,$a4,$b0,$ff
re_cycle:
mov #70t,num
dbnz num,*
rts
delay_1ms:
mov #08t,count
re_call:
bsr re_cycle
dbnz count,re_call
rts
delay_10ms:
mov #78t,count
re: bsr re_cycle
dbnz count,re
mov #07t,count
dbnz count,*
rts
delay_500ms:
mov #50t,count2
re1:bsr delay_10ms
dec count2
ldx count2
cpx #$00
bne re1
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
main:
clrx
clrh
clra
sta $1802
jsr io_init
mov #$00,sum
mov #$00,sum1
mov #$fe,seg
again:
ldx sum
cpx #$5
bne ne
mov #$00,sum
ne: clrh
ldx sum
lda table,x
sta PTBD
lsra
lsra
lsra
lsra
sta PTDD
mov seg,PTGD
jsr delay_500ms
mov #$ff,PTGD
lda seg
sec
rola
sta seg
inc sum
inc sum1
ldx sum1
cpx #$4
bne next
mov #$00,sum1
mov #$fe,seg
next:
jmp again
org $fffe
dc.w main
实现这个程序的主要思路是:位选依然在4个数码管之间循环,而点亮数码管的字形码则在加了一个不显示选项的段码表之间循环,由此形成的错位打到滚动显示的效果。
上一篇:Freescale MC9S08AW60汇编学习笔记(三)
下一篇:Freescale MC9S08AW60汇编学习笔记(一)
推荐阅读
史海拾趣
在电子产品市场竞争激烈的今天,品质成为企业生存和发展的关键。Acmelux Taiwan Inc公司始终坚持品质至上的原则,从原材料采购、生产制造到产品测试,每一个环节都严格把关,确保产品的稳定性和可靠性。正是这种对品质的执着追求,使得Acmelux的产品在市场上赢得了良好的口碑,成为众多客户的首选品牌。
随着业务的不断发展,EPSON开始积极拓展国际市场。公司先后在全球五大洲设立了多个生产和研发机构,以及销售和服务网点,以便更好地服务全球客户。通过不断拓展海外市场,EPSON逐渐实现了全球化战略,其产品和服务已经覆盖全球多个国家和地区。
为了进一步提升公司的管理水平和市场竞争力,兵字公司决定进行企业规范化和市场化运作。公司建立了完善的管理体系和运营机制,优化了业务流程和组织结构,提高了工作效率和响应速度。同时,兵字公司还积极引进外部投资和战略合作伙伴,为公司的发展注入了新的活力和动力。
Desco Tools公司一直注重客户服务和品质保障。公司建立了完善的客户服务体系,为客户提供全方位的技术支持和解决方案。同时,公司还建立了严格的质量管理体系,确保每一件产品都符合高标准的质量要求。这些举措赢得了客户的信任和好评,也为公司的长期发展提供了有力保障。
在电子行业中,产品质量是企业生存和发展的关键。DDK公司深知这一点,因此始终将产品质量放在首位。公司建立了严格的质量管理体系,从原材料采购到产品生产、检测的每一个环节都严格把控,确保每一件产品都符合高标准、严要求。这种对品质的执着追求,让DDK公司的产品在市场上赢得了良好的声誉,赢得了消费者的信任和忠诚。
随着工业4.0时代的到来,EAO公司作为HMI(人机界面)领域的专家,紧跟时代潮流,率先推出了一系列创新的电容开关产品。这些开关产品具备高度智能化和连接性,能够无缝集成到各种数字化机器系统中,并通过IO链接控制器与更高级别的总线系统或PLC(可编程逻辑控制器)进行智能连接。EAO公司的这一创新举措,不仅提升了设备的智能化水平,也为客户带来了更高的生产效率和更低的运营成本。
|
2006年初,中国某知名通信设备企业的胡姓年轻工程师被疑“过劳死”,一时间在全国掀起轩然大波,公众舆论在深感痛惜之余,不少人将矛头指向了这家知名企业。但也有人反思认为,中国要想从落后的位置追上先进国家,必须付出更多的智慧、心血和劳动, ...… 查看全部问答∨ |
|
|
推荐一个不错的51单片机学习视频教程(高清晰版本) 飞龙教程------51单片机 需要更多单片信息请与我联系 飞龙QQ:9086074 希望认识更多的单片机开发朋友一起交流 第一次做教程不好多多见谅 博客BLOG : &nb ...… 查看全部问答∨ |
我在windows下开发了一个网络聊天程序,想移植到wince下来 程序用了CSocket类,在wince上运行后,发现程序不能收到任何socket信息 上网查阅后,说是在wince下应该用CCeSocket。是不是只要用CCeSocket替换原程序中的CSocket类就可以了呢?… 查看全部问答∨ |
|
TOP254,TOP255,TOP256,TOP257,TOP258 原装正品! TOP254,TOP255,TOP256,TOP257,TOP258 特性描述 降低系统成本,更高的设计灵活性 多模式运作,最大限度地效率ciency在所有载荷 没有散热需要,最多35瓦特利用P , G和米包 与通用输入电压 ...… 查看全部问答∨ |
|
|
stm32f103RB的串口设置如下: USART_InitStructure.USART_BaudRate = 19200; USART_InitStructure.USART_WordLength = USART_WordLength_9b; USART_InitStructure.USART_StopBits = USART_StopBits_1; &nb ...… 查看全部问答∨ |
用EM-STM3210E开发板,写了一个简单的串口通信代码,STM32不能正常接收数据,只能接收到第一个字节的数,就是说我上位机发“fa010203”,单片机收到数返回给PC机的数是“fafafa” 代码如下: while (1) { & ...… 查看全部问答∨ |



XC6406PP60DL






京公网安备 11010802033920号