老古开发网首页
导航:老古开发网首页文章索引文章分类单片机→[[转]单片机应用编程技巧(10)]
| -文章搜索 - 最新文章 - |

[转]单片机应用编程技巧(10)

发布时间:2006年4月1日 点击次数:4339
来源:   作者:
 

91.      在单片机程序设计中遇,从被嵌套的高级中断中如何强行返回到主程序。子程序返回指令在恢复堆栈后可不可以用跳转指令替代返回到主程序中?

:如果是51系列,那直接用POP指令就可以实现强行返回;如果是用RISC结构的单片机(HOLTEK 单片机是RISC结构的),那一般都是硬件堆栈,没有PUSHPOP指令,所以子程序调用和返回指令必须成对使用。

 

92.      对单片机的速度,有何要求?Holtek的单片机能符合该项应用吗?

:目前HOLTEK的单片机速度最高为8MHz,一条指令执行时间为05us,以这样的速度,可以满足大多数项目的开发;不知你说的具体是什么项目。目前HOLTEK单片机主要有OTPMask两种,将来会推出Flash的单片机;但HOLTEK的开发系统很完善,在开发阶段,HOLTEK还可以适当提供免费样片,相对来说,开发成本并不会比用Flash来得高。

 

93.      PSoC是一种功能灵活和强大的软硬件嵌入式开发系统,能否用PSoC代替部分单片机系统呢?

:在一般在嵌入式系统的应用中,都可能需要使用几十种甚至是更多的类比或数位周边元器件。熟悉MCU开发的工程师们都知道,在MCU的开发过程中,最需要花时间和精力的就是元器件的选购,以及元器件相容性方面的考虑。目前在市场上有成千上万不同种周边元器件,设计人员要想从中寻找到适合自己应用的元器件是一件令人头痛的事情。因此,设计工程师的理想方案似乎是采用定制的SoC晶片,但是如果采用定制微控制器、ASICPLD器件,一方面价格比较昂贵,另一方面需要设计人员具有专门的设计技能。因此,研制一个高效率、周边元器件可嵌入配置的、低功耗的8位微控制器是很有必要的。

 

PsoC(Programmable System on Chip)可编程系统晶片,是美国Cypress MicroSystems公司在最近推出的新一代功能强大的8位元可配置的嵌入式单片机。该系列单片机与传统单片机的根本区别在于其内部集成的数位和类比block模组,工程师可以根据不同设计要求调用不同的数位和类比block模组,完成晶片内部的功能设计;实现使用一块晶片就可以配置成具有多种不同周边元器件的微控制器,建立一种可配置嵌入式微控制器;用以实现从确定系统功能开始,到软/硬体划分,并完成设计的整个过程。因此,PSoC能够适应非常复杂的即时控制需求,使用它进行产品开发可以大大提高开发效率,降低系统开发的复杂性和费用,同时增强系统的要可靠性和抗干扰能力;因此,它特别适用于各种控制和自动化领域。所以PSoC的动态配置能力给开发者提供了快速方便的编程和开发方法,同时也为单片机的应用开拓了更大的空间。因此利用片内集成的闪速记忆体可以降低产品开发成本,缩短产品开发周期。因此,此MCU结构具有广阔的应用推广前景。

 

94.      单片机对modem要进行哪些初始化操作?

:一般单片机的MODEM通讯必须要有两个背景知识,一个是AT命令集,另一个是通用非同步接收发送器(UART)

 

l         AT命令集

 

下面介绍我通讯程式例子中涉及到的AT命令。

 

Dn:拨号命令。该命令使MODEM立即进入摘机状态,并拨出跟在后面的号码。D命令是基本的拨号命令,它受到其他命令的修饰可构成MODEM何时拨号以及如何拨号等操作。

T:音频拨号。例如,ATDT8886666,其中8886666为电话号码。

P:脉冲拨号。例如,ATDP8886666,其中8886666为电话号码。

,:标准暂停。我们常常碰到拨打外线电话时需要暂停一下,等听到二次拨号音(外线)之后才能再拨后续的号码。缺省时暂停时间为2s(),它由S8寄存器指定。

Sn:表示MODEM内部的寄存器。

S0:自动回应。如果要求MODEM具有自动回应特性,则应该预先将MODEMS0寄存器设置为非0

S8:逗号拨号修饰符的暂停时间。该寄存器决定了当MODEM在拨号中遇到逗号(,)时应该暂停的时间。

 

l         通用非同步接收发送器UART

深入理解UART内部结构以及内部寄存器各位的含义,详细了解资料发送和接收的过程,有助于编写出高效、稳定的程式。一般介绍编写基本通讯程式需要知道的寄存器。实际的ADDRESS由具体接线决定。

 

l         串列传输速率除数锁存器(LSBMSB)

 

在通讯之前要进行一些参数初始化,串列传输速率是首先应该考虑的一项。该寄存器是一个16位的寄存器,分为低8(LSB)和高8(MSB)寄存器。

 

另外单片机访问的是串列传输速率除数锁存器LSB/MSB。一般常用的工作频率是18432MHz。这个频率除以16就是串列传输速率的时钟频率,用于控制发送和接收资料的速度。

 

下面给出串列传输速率除数锁存器值的计算公式:

 

串列传输速率除数锁存器值=工作频率/(16×期望串列传输速率)=1843200/(16×期望串列传输速率)

 

l         接收缓冲寄存器和发送保持寄存器(transmit and receive holding register)

读操作单片机访问接收缓冲寄存器(RHR),写操作单片机访问发送保持寄存器(THR)

 

l         中断允许寄存器(interrupt enable register)

 

l         FIFO控制寄存器(FIFO control register)

 

资料发送和接收模式的选择。常用的两种模式:FIFODMA。其中DMA又有两种模式DMA的模式0DMA的模式1可供选择。

 

95.      我使用的单片机是AT89C51,试过用弹出指令强行返回中断的方法,确实能够返回主程序,具体做法是:首先将堆栈中的地址弹出,然后压入主程序中新的地址,最后执行RETI指令就可以返回到该地址了。如果弹出指令执行完后直接用跳转指令而不通过RETI指令也能返回到主程序,但下次中断来时将不能再次响应。请问是从被嵌套的高优先级中断程序中怎样返回主程序,是不是还必须得通过最低级中断才能返回。要是直接返回的话,是否下次中断还能够正常响应?

:对于51系列的单片机而言,当中端响应发生时,会将相应的优先级有效触发器职位;当退出中断时,执行RETI,单片机又自动将优先级有效触发器清0。因此,如果直接使用跳转指令从中断子程序出来的话,单片机没有清0优先级有效触发器,下一次中断发生时就不能响应了。

 

如果要从高优先级中断程序返回主程序的话,必须执行两条RETI指令,才可以清除高/低优先级有效触发器。具体的程序可以是:

 

MOV DPTR, #LABLE1

POP ACC ;将高优先级子程序返回地址出栈

POP ACC

PUSH DPL ;将LABLE1地址入栈

PUSH DPH

RETI

LABLE1

POP ACC ;将低优先级子程序返回地址出栈

POP ACC

MOV DPTR, #LABEL2

PUSH DPL ;将LABLE2,即需要返回的主程序地址入栈

PUSH DPH

RETI


欢迎进入老古论坛进行讨论
[单片机] 相关文章:
[转]单片机应用编程技巧(8)
简介:
71. 如何编写一个很好测试程序代码以达到较高的功能测试覆盖度? 答 :应在芯片电路最初的设计及仿真阶段,就要规划好测试的方法,由于现今已经有很 power 的芯片设计和测试 pattern 工具,所以很快就能算出 Test pattern coverage( 测试覆盖率 - 电路 logic 的 0/1toggle rate) 是否合要求 ! 至于测试 MCU ,应该是执行一些内建测试指令使所有电路都曾经 toggle 过即可,这和指令组合变化无关。 ......

[转]单片机应用编程技巧(7)
[转]单片机应用编程技巧(5)
[转]单片机应用编程技巧(6)
基于uPSD3200的人机对话设计
[转]从单片机指针说到黑客程序
电磁兼容
Keil C51开发系统基本知识(二)
Keil C51开发系统基本知识(一)
经典c程序(20/20)
 
下一个:[单片机][转]单片机应用编程技巧(9)
简介:
81. Holtek 和 AT 系列编程有何不同,现有 AT 系列程序如何转为 Holtek ? 答 :从指令集来看, ATMEL 的 AVR 系列是 8 位 RISC 型的单片机,共有 118 条指令,而 HOLTEK 是 63 条指令,要将 AVR 的汇编程序转为 HOLTEK 的汇编需要熟悉两者的汇编指令将 AVR 的程序转译成 HOLTEK 汇编,而不能直接在 HOLTEK 芯片上使用,如果程序是用 C 编写,则大部分应该是可以直接使用的,但数据定义以及寄存器的定义可能需要......
 

上一个:[单片机]51程序集

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:10分钟 执行时间:31毫秒