历史上的今天

今天是:2025年08月13日(星期三)

正在发生

2021年08月13日 | Freescale MC9S08AW60汇编学习笔记(七)

发布者:Chanhero 来源: eefocus关键字:Freescale  MC9S08AW60 手机看文章 扫描二维码
随时随地手机看文章

  之前我们写了延时的子程序,但是仅仅在电脑上运行,在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汇编学习笔记(七)

上一篇:Freescale MC9S08AW60汇编学习笔记(三)
下一篇:Freescale MC9S08AW60汇编学习笔记(一)

推荐阅读

人工智能处于早期是无法否认的事实,不过传统芯片巨头、云服务厂商以及一大批初创公司的加入也带到了人工智能市场的增长,随着市场未来几年算力和数据量的提升,人工智能将更快发展。雷锋网消息,英特尔几天前首次披露了其人工智能芯片的销售额在2017年达到10亿美元。并且英特尔人工智能事业部主管Naveen Rao表示,客户们正在为AI购买芯片,而且客户数据...
今天,在东莞松山湖召开的华为开发者大会的松湖对话环节,华为消费者BG软件部总裁王成录说道:“很可能在最近一两个月,中国的首个开源基金会将正式的运营起来,这个开源基金会是完全的工业化的、非盈利的、开放的。访问:华为商城所有的厂商和个体的贡献者,都可以在开社区里面去贡献你的智慧,我们会根据大家贡献的排名来决定大家在设计的发言权,所以我...
美国最近对中国科技公司频频下死手,在TikTok之后,中国国民级应用软件微信也遭到了美国的封杀。美国上周发布了一项新的行政命令,将阻止美国与微信的所有交易。这项新政命令可能意味着苹果公司无法与微信进行任何交易,微信或在苹果App?Store下架。昨日晚间,知名苹果分析师郭明錤更新了有关美国封禁微信对苹果iPhone影响的报告。郭明錤在报告中谈到,美...
设备麦克风信号通路要求-带宽 采样率(Fs)决定了PCM系统的带宽 下表列出了常见的音频带宽和相应的采样率要求。要使音频系统具有20kHz带宽,采样率必须为40kHz或更高。48kHz和44.1kHz (cd中使用)是典型的比率。在通信系统中,全频带音频是通过VoIP(因特网协议通话)和VoLTE(长期演进语音承载)技术实现的。 另一个常用的采样率是96kHz。它可能需要在...

史海拾趣

问答坊 | AI 解惑

电子工程师的汗水和薪水

2006年初,中国某知名通信设备企业的胡姓年轻工程师被疑“过劳死”,一时间在全国掀起轩然大波,公众舆论在深感痛惜之余,不少人将矛头指向了这家知名企业。但也有人反思认为,中国要想从落后的位置追上先进国家,必须付出更多的智慧、心血和劳动, ...…

查看全部问答∨

无源晶体与有源晶振的区别、应用范围及用法

无源晶体与有源晶振的区别、应用范围及用法…

查看全部问答∨

USB固件问题

各位大大江湖救急, 有没有人做过OMAP1710 USB模块的FW驱动,从模式,使用的是TUSB1105外部tranciver,6pin. 问题是:core控制的中断完全没反应,IRQ_SRC寄存器的值始终为0,完全不能进入中断,无法枚举。不知道问题出在哪,哪位大大帮忙解答一 ...…

查看全部问答∨

推荐一个不错的51单片机学习视频教程(高清晰版本)

推荐一个不错的51单片机学习视频教程(高清晰版本) 飞龙教程------51单片机 需要更多单片信息请与我联系 飞龙QQ:9086074 希望认识更多的单片机开发朋友一起交流   第一次做教程不好多多见谅 博客BLOG   :   &nb ...…

查看全部问答∨

有关evc的网络编程

我在windows下开发了一个网络聊天程序,想移植到wince下来 程序用了CSocket类,在wince上运行后,发现程序不能收到任何socket信息 上网查阅后,说是在wince下应该用CCeSocket。是不是只要用CCeSocket替换原程序中的CSocket类就可以了呢?…

查看全部问答∨

power TOP系列芯片

TOP254,TOP255,TOP256,TOP257,TOP258 原装正品! TOP254,TOP255,TOP256,TOP257,TOP258 特性描述 降低系统成本,更高的设计灵活性 多模式运作,最大限度地效率ciency在所有载荷 没有散热需要,最多35瓦特利用P , G和米包 与通用输入电压 ...…

查看全部问答∨

求问该电路

请问这个电路如何工作的,有什么作用? [ 本帖最后由 leif_qian 于 2010-11-9 11:13 编辑 ]…

查看全部问答∨

stm32串口校验问题

stm32f103RB的串口设置如下: USART_InitStructure.USART_BaudRate = 19200;   USART_InitStructure.USART_WordLength = USART_WordLength_9b;   USART_InitStructure.USART_StopBits = USART_StopBits_1;  &nb ...…

查看全部问答∨

STM32串口通信只能接受第一个字节的数

用EM-STM3210E开发板,写了一个简单的串口通信代码,STM32不能正常接收数据,只能接收到第一个字节的数,就是说我上位机发“fa010203”,单片机收到数返回给PC机的数是“fafafa” 代码如下:   while (1)   {  & ...…

查看全部问答∨
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved