logo
 
  8位单片机FAQ
  开发工具
  芯片工具
  指令
首页-> 产品信息-> 8位单片机
 
入门指南
开发&工具
应用方案
客户支持
 
硬件开发工具FAQ
Q:使用仿真器进行仿真时,可以有目标板提供系统时钟吗?
A:不能,进行仿真时默认为仿真器内部的晶振,目标板上的晶振不起作用。

Q:仿真器内部是多大频率的晶振,在什么地方可以改变仿真器的晶振频率?
A:仿真器内部的晶振为16MHz,固定在仿真器内部,别的地方无法改变。只能将仿真器的铁壳打开,将16MHz的晶振换成其它频率的。

Q:可以使用陶瓷晶体吗?
A:可以,但是必须将仿真器的铁壳打开,将16MHz的晶振卸下,换上陶瓷晶体。

Q:可以使用RC振荡器吗?
A:可以,但是必须将仿真器的铁壳打开,将16MHz的晶振卸下,换上RC。

Q:可以使用目标板为仿真器供电吗?
A:可以,但是只能用+5V为仿真器供电,后期我们会考虑3.3V为仿真器供电。

Q:原理图上是16M的晶振,可是资料上说是系统时钟频率最高可达8MHz,哪个是正确的呀?
A:外接16M的晶振,但是IC内部有一个分频电路,将16M二分频之后当作系统时钟,因此系统时钟是8M。

Q:仿真器往外引的牛角座的IO口如何分配的?
A:

软件开发工具FAQ

Q:FortisIDE新建一个工程后,会发现在WorkSpace窗口中有很多不同类型的文件,请问都是什么文件?
A:工程包括创建一个特定程序所要的各种信息。新建立的工程应包含8种文件:*.spj、*.rc、*.set、*.env*、*.asm、prog.lik、*.cmd、*.inc。 一个工程建成后,FortisIDE自动将这8种文件添加到工程内。
1、 *.spj, *.rc, *.set, *.env (与工程文件同名):系统文件,后缀为.spj的文件为工程文件,用户打开一个工程时打开'*.spj'文件即可。
2、 *.asm:汇编语言程序文件。
3、 Prog.lik:链接器根据它来决定如何链接目标文件,用FortisIDE打开该文件,可以直接对文件的内容进行修改。
4、 *.cmd (与工程文件同名):根据它来决定如何向仿真芯片中下载二进制文件(.tsk/.bin),即决定ICE/仿真板上的文件映象。
5、 *.inc:头文件,在其中对每一个I/O端口和硬件寄存器进行了定义;它必须被包含在源代码内。

Q:什么是库函数?如何将其加载进工程中?
A:库函数即.lib文件,是一个函数的集合。库里存放着每个函数的名称、目标代码和链接过程所需的复位位信息等内容。如果用户程序中用到了库的某个函数,则需要将其加载到工程中,在链接时,链接器会把相应的函数代码直接嵌入到用户程序的可执行文件中。
库的加载方法:打开Project->Setting->Link,便会出现Setting对话框,然后将该库的lib文件加进去。如下图。

Q:利用FortisIDE进行开发的基本流程是什么?
A:Fortis IDE需要配合在线仿真编程器才可以进行仿真,一般的开发流程如下:
· 创建工程
· 设置工程
· 管理工程
· 编译工程
· 运行工程
· 调试工程

Q:FortisIDE是否有程序跟踪功能,在哪里?怎么查看?
A:FortisIDE有程序跟踪功能,具体设置如下:
①、在Project->Setting->Device中将PC Track Enabel选项选中;
②、全速编译
③、运行您所要跟踪的程序,全速运行之后然后点击Break
④、点击工具栏中的"T"按钮即可

Q:当在FortisIDE中新建工程后,自动生成了一个Main.asm文件,请问该文件的作用是什么?如何使用?
A:Main.asm文件是系统自动产生的汇编语言程序文件,已经将程序中必须的语句写完整了,其中"PAGE0" 用于零页变量的定义;"DATA"用于非零页变量的定义;"CODE"段用于写程序,"VECTOR"用于定义中断的入口地址。用户直接在V_Reset后写程序即可。
;****************************************
;* *
;*Power on Reset Process - Main Program *
;* *
;****************************************
.PUBLIC V_Reset ;
V_Reset:

Q:资料上说PB2保留是什么意思呀?
A:保留的意思是对这一位操作没有意义。

Q:FortisIDE-V1.6.5.1支持C语言编程吗?
A:目前FortisIDE-V1.6.5.1版本不支持C语言编程。

Q:为什么我进行10ms定时的时候,定时的时间都不准,而且更改其中的高位预值对定时的时间都没有影响?程序如下:

lda  #01000000b
sta  P_TMR0_1_Ctrl0
lda  #00110000b
sta  P_TMR0_1_Ctrl1
lda  #16
sta  P_TMR1_Preload
lda  #216
sta  P_TMR1_PreloadHi
lda  #FFh
sta  P_INT_Flag1
set  P_INT_Ctrl1,1
cli
; Set time1 is 16 bit counter

; Set Timer1 clock source is Fsys/8

;\
;+ Set 10ms
;+ Fsys(8MHz)/8/(40x250)=100Hz
;/
; Clear INT request flag of time1

; Set time1 overflow interrupt
; Enable INT

A:对于16位的定时器,必须要先写入预值的高位P_TMR1_PreloadHi,再写入预值的低位
P_TMR1_Preload,这样的定时设置应该是正确的。如果顺序更改了,会出现你遇见的类似的问题。

Q:Q-Writer中当按下"Statistic Window"中的"Reset"按钮后,会复位哪些内容?
A:此时系统将弹出一个信息提示框,提示"所有内容将被清除,是否继续?",要求用户确认是否清除Target.以外的所有内容。

Q:首次启动Q-Writer,如果未选择芯片型号便打开工程开始烧写,会出现什么现象?
A:系统将会显示警告信息,并自动弹出"Select Device"窗口供选择芯片型号。

Q:如果芯片内容为空,在Q-Writer中对其加密会出现什么现象?
A:系统会自动弹出对话框"Your IC is blank, Securing prohibited!"警告信息,不允许对空白芯片进行加密。

Q:当多颗芯片被烧写时,Q-Writer会出现警告信息"这个序列号码可能已被使用过!"是什么原因?
A:序列号码在"Auto Increment"模式下会自动进行递增或递减。当序列号码的值递增或递减产生溢出后,可能会产生与以前相同的序列号,如果户继续执行烧录动作,那么多个芯片就可能会被烧入相同的序列号码。

Q:如何使用Q-Writer配置芯片烧写,即在使用Q-Writer进行烧写的基本流程是什么?
A:使用Q-Writer进行芯片编程的基本流程如下图:

Q:在烧写过程中,芯片如何放入在线仿真编程器的烧写座中?
A:将芯片的凹口处与烧写座的凹口处对齐,即将芯片的1脚放在左上脚的方向放入在线仿真编程器的烧写座中。如图所示

Q:当烧写芯片被加密后,是否全部信息都不可以读出?
A:加密后,SPMC65系列单片机仅允许读出芯片中的部分内容,即芯片配置选项,用户信息以及芯片存储器中最后16个字节(即0xFFF0~0xFFFF)中的信息。其它地址的内容均显示为0x00。

封装


Q:关于芯片封装,同一颗芯片相同管脚的PDIP与SOP封装引脚含义定义是否一致?

A:是的。

Q:SPMC65系列芯片DIP和SOP封装的间距是多少?
A:SPMC65系列芯片DIP封装间距为100mil,即2.54mm;SOP封装间距为50mil,即1.27mm。

工作模式


Q:SPMC65系列单片机有几种电源管理模式?是否可以在低功耗中应用?
A:SPMC65系列单片机提供三种电源管理模式,分别是正常模式(NORMAL)、掉电模式(STOP)、挂起模式(HALT)。其中提供了STOP和HALT两种低功耗模式。在STOP模式下,片上振荡器停止工作,CPU以及所有的周边也停止工作。在HALT模式下,所有的周边硬件保持原来状态,正常工作,只有CPU停止工作以节省功耗;所以HALT模式下功耗大于STOP模式下的功耗。

Q: 当器件在掉电/挂起模式,看门狗定时器(WDT)是否运行?
A:SPMC65系列单片机看门狗定时器的时钟源来自片内RC振荡电路,在HALT模式下,所有的周边硬件保持原来状态,正常工作,只有CPU停止工作以节省功耗;所以此时看门狗定时器是运行的;在STOP模式下,片上振荡器停止工作,CPU以及所有的周边也停止工作,看门狗定时器(WDT)是否运行与进入STOP模式前的设置有关,当设置看门狗在STOP模式使能时,看门狗定时器仍然是运行的,而且也可以利用看门狗中断使CPU从STOP模式唤醒。当设置看门狗在STOP模式不工作时,看门狗定时器不运行。

Q:从上电复位到ADC稳定开始转换需要多长时间?而从退出STOP模式进入正常工作模式的时候ADC的稳定又需要多少时间?
A:当上电复位后,ADC模块的模拟建立时间也就是等待参考电平稳定的时间。它取决于接在VREF引脚的电容容量。此电容越大VREF的噪音就越小,ADC转换结果的噪音也就越小。如果用4.7uF电容,则稳定时间大约为2ms,如果无旁路电容(不推荐),稳定时间大约为10us。注意:在开始转化之前,需要一个1.5us的跟踪时间,这也就决定了ADC多路转换开关(MUX)的切换速度。而芯片从STOP模式退出而进入正常工作模式后,ADC的稳定到可以开始转换的时间长度与上电复位时的情况是一样的。

Q:进入省电模式,应如何设置I/O状态,使功耗最小?
A:为了降低功耗,进入STOP模式前,如果暂时用不到一些外围(ADC模块、看门狗定时器)的情况下,可以通过设置,关闭它们的驱动,使没有电流消耗。首先,将端口设置成输入口,并确保端口和外围电路的连接中没有电流流过。作为输入端,这些管脚的阻抗从外部看来非常高,因此是不会产生电流的。正常输入电压应该为VSS 或VDD,但要注意如果输入电压不是VSS或 VDD,就有可能产生微小的电流(2V时电流最大为1mA)。因此,考虑到和外围电路的存在,如果将端口设置为输入不合适,那么可以将其设置为输出。输出电平为高电平还是低电平由外围电路决定。例如:如果管脚外接有上拉电阻,可以将其设置为输出高电平。如果外接下拉电阻,可以将其设置为输出低电平。下图给出了在应用中,对没有用于的输出、输入端口的处理方法:

 

Q:为什么每次进入HALT模式或者进入STOP模式语句后面都要紧跟两条或更多的nop指令?如果没有这几条nop指令的话,系统是否会执行进入HALT模式或者进入STOP模式语句后面的语句?
A:一般情况下,系统从省电模式下被唤醒,恢复到正常工作模式期间,系统时钟会有一段时间的稳定时间;所以为了避免程序在系统时钟不稳定下执行,最好在进入STOP模式语句后面紧跟两条或更多的nop指令,这样即使在系统时钟还没稳定时执行空操作指令,也不会影响整个系统的工作;实际上这样的情况是非常少遇到的,加上空操作指令只是为了使系统更加可靠。

空间分配

Q:SPMC65系列单片机的堆栈空间有多大?是向上生长的还是向下生长的?
A:SPMC系列单片机的堆栈空间为$01E0~$01FF共32字节,是向下生长的,即初始状态堆栈指针(SP)指向$01FF,每当压入一个数据,指针会自动减1,弹出数据时,指针先自动加1,然后再弹出一个数据;一旦超出$01E0,CPU便会产生错误地址复位(IAR)。

Q:堆栈指针寄存器是8位的,但是初始化后堆栈指针指向的地址为$01FFh是怎么回事?
A:CPU会自动为堆栈指针扩展第九位,且始终为1,所以在CPU内部,堆栈指针是堆栈指针寄存器扩展第9位后形成的;如下图:

Q:芯片配置选项寄存器如何使用?
A:在SPMC65系列单片机中,芯片配置寄存器是位于地址$7FE0~$7FE3的4个Byte空间,而有3个寄存器是有效的;都是只读寄存器。用户可以通过这些寄存器设置低电压复位、看门狗复位、非屏蔽中断源和时钟源的选择等,但用户程序中,是不可以写该寄存器的,可以通过Fortis IDE集成开发环境对这些寄存器进行芯片配置选择设置,最后通过在线仿真编程器或烧写器将这些设置信息写入。

Q:SPMC65P2408A的28PIN的封装与SPMC65P2404A的28PIN封装管脚排列是一样的,而且除了存储器(ROM和RAM)以及部分硬件资源外,其它资源也是一样的,那么如果程序空间够用的话是否可以进行程序移植?
A:是的,可以;但要保证RAM和ROM的占用大小以及占用的区域不超过RAM和ROM区小的芯片;同时还要确认没有用到在SPMC65P2408A芯片中有的资源而SPMC65P2404A中没有的资源。

Q:SPMC65系列单片机每个中断源的中断入口在哪里?
A:SPMC65系列单和片机的程序存储器在地址$FFFA~$FFFF的范围里定义了向量空间,如下图如示:

地址$FFFC和$FFFD为复位向量,CPU复位后程序的入口地址。存储器的$FFFA~$FFFB作为非屏蔽中断NMI的向量地址, $FFFE~$FFFF作为可屏蔽中断IRQ(包括非屏蔽中断之外的中断)的向量地址。这些中断向量的地址应在用户程序中做出正确的定义。CPU通过中断向量跳转到相应的中断服务子程序中继续执行。

Q:在数据存储空间定义变量时,.PAGE0和.DATA有什么区别?
A:"PAGE0" 用于零页变量的定义;"DATA"用于非零页变量的定义。在SPMC65系列单片机中,地址$0000~$00FF内的存储空间为第零页(PAGE0)存储空间(包括硬件控制寄存器空间和部分用户RAM区);PAGE0之外的RAM区为DATA区;用户程序仿问PAGE0区的寄存器/存储空间时相对DATA区的要快,而位操作指令也只能对PAGE0区的寄存器/存储空间进行操作。

Q:$30~$36地址的寄存器连续写两次有什么要求吗?
A:对于需要连续写两次才能有有效的寄存器,SPMC65系列单片机内部有一个两次清零的计数器,当第一次写入后,计数器内部会作标记,只有再一次遇到与第一次写入数值相同的操作时才会把计数器清零,并把数据载入寄存器。两次写操作之间的时间间隔没有规定,而在两次操作间再有写入其它不同数值的操作时,CPU会忽略写入不同数值的操作。

Q:$30~$36地址的寄存器需要连续写两次才会有效,那么用位操作连续写两次是否会有效呢?
A:是一样的。

工作电压

Q:低电压复位有几种选择
A:我们提供了两种低电压复位选择,一种是4V,工作电压如果地于4V的时候就会发生低电压复位;另外一种是2.5V,系统工作电压低于2.5V的时候也会发生复位。
运行速度

Q:SPMC65系列芯片的系统时钟是多少Hz?每条指令的执行时间是多少?
A:SPMC65系列芯片外接晶振频率最大为16Mhz,内部经过2分频做为芯片的系统时钟,即:系统时钟最大为8MHz。平均每条指令为2~4个cycle,所以每条指令的执行时间为0.25~0.5us。
普通IO口

Q:SPMC65系列单片机的I/O口驱动能力是多大?
A: SPMC65系列单片机的I/O端口具有4mA的推电流能力(driving),10mA的灌电流(sinking),有些芯片具有最大的灌电流(sinking)达到20mA的IO口。

Q:SPMC65系列单片机I/O端口的慢速输出是什么意思?
A:SPMC65系列单片机支持慢速输出功能,PB[7:6]通常情况下作为普通I/O口,但是如果将寄存器P_IO_Opt ($35)的bit0设置为1,便会打开PB[7:6]的慢速输出功能。此时当PB[7:6]输出从高电平变为低电平,将会延迟250ns左右,具体延迟时间由系统时钟(FSYS)决定。当MCU在进行远距离通信时,慢速输出功能可以防止电磁干扰,近似于在I/O端口并联了一个小电容。

Q:SPMC65系列单片机是如何实现I/O端口上拉/下拉输入的?
A:SPMC65系列单片机I/O端口在输入状态下时,其上拉/下拉功能是通过片内I/O端口部分集成的MOS管实现的,此时的上拉电阻/下拉电阻相当于100K欧姆的弱上/下拉。但是一般情况下,还是需要外部加入上/下拉电阻,以保证系统的EMC性能。

Q:A/D模拟电压输入、定时器输出以及SPI/UART/IIC的数据信号等都是如何实现与外设通信的?
A:它们是通过I/O端口复用实现的。具体的管脚复用定义如下:

管脚
特殊功能
管脚
特殊功能
PA7
ADC模拟电压输入
PC3
SPI 数据输出
PA6
ADC模拟电压输入
PC2
SPI 数据输入
PA5
ADC模拟电压输入
PC1
SPI 时钟输出 / 时钟输入
PA4
ADC模拟电压输入
PC0
SPI 片选
PA3
ADC模拟电压输入
PD4
仅2408A有
PA2
ADC模拟电压输入
PD3
Timer 2比较输出/PWM 输出
PA1
ADC模拟电压输入
PD2
Timer 3比较输出/PWM输出
PA0
ADC模拟电压输入
PD1
外部中断3输入
PB7
ADC模拟电压输入或A/D外部参考电压输入
PD0
外部中断2输入
PB6
蜂鸣器输出    
PB5
外部中断1输入/Timer3的捕获输入/Timer3的外部事件输入    
PB4
外部中断0输入/Timer的捕获输入/Timer2的外部事件输入    
PB3
Timer 1比较输出/ PWM输出  
PB2
Timer 0比较输出/PWM输出    
PB1
Timer 1的捕获输入/Timer 1的外部事件输入    
PB0
Timer 0的捕获输入/Timer 0的外部事件输入    
PC5
UART接收信号    
PC4
UART 发送信号    

Q:I/O端口复用时是否需要先初始化I/O口状态?
A:有部分端口的复用功能需要先初始化I/O口状态,比如需要用到外部中断输入的复用功能时,就要事选把对应的I/O端口设置为输入状态;类似的还有捕获输入、串行通讯接口。而部分复用功能在使用前是无需初始I/O端口状态的,如ADC输入、电压比较器功能、Buzzer输出、PWM输出、比较输出。

Q:在使用的过程中没有用到的I/O管脚如何处理?
A:最好是:硬件上通过10K以上的电阻接地,软件上设置为输出,输出低电平。

Q:如果要进行I/O远距离通信,I/O是否还需要外接保护器件?
A:SPMC65系列单片机I/O端口采用施密特输入,因此它的抗干扰能力比较强,但是为了避免静电等强干扰源,建议在I/O口上串连一个电阻为好。

Q:进入省电模式,应如何设置I/O状态,使功耗最小?
A:为了降低功耗,进入STOP模式前,如果暂时用不到一些外围(ADC模块、看门狗定时器)的情况下,可以通过设置,关闭它们的驱动,使没有电流消耗。首先,将端口设置成输入口,并确保端口和外围电路的连接中没有电流流过。作为输入端,这些管脚的阻抗从外部看来非常高,因此是不会产生电流的。正常输入电压应该为VSS 或VDD,但要注意如果输入电压不是VSS或 VDD,就有可能产生微小的电流(2V时电流最大为1mA)。因此,考虑到和外围电路的存在,如果将端口设置为输入不合适,那么可以将其设置为输出。输出电平为高电平还是低电平由外围电路决定。例如:如果管脚外接有上拉电阻,可以将其设置为输出高电平。如果外接下拉电阻,可以将其设置为输出低电平。下图给出了在应用中,对没有用于的输出、输入端口的处理方法:



AD

Q:SPMC65系列单片机的ADC内部参考电压和外部参考电压值为多少?
A:SPMC65系列单片机的ADC可以选择内部参考电压,其电压值为VDD;也可以现在外部参考电压,其参考电压范围为:2.0~VDD。

Q:SPMC65系列单片机的A/D转换最高速度是多少?
A:最高为100KHz。

Q:SPMC65系列芯片,它的数模转换的误差多大?
A:SPMC65系列芯片,作为一个10Bit精度的数模转换器,它的累计误差在±4LSB范围内,而作为一个8Bit精度的AD转换器,它的累计误差在±1LSB范围内。

CCP(捕获、比较、PWM

Q:在CCP模式时,有些寄存器会与Timer模式时的Count、Preload寄存器映像到同一地址,而也工作在十六位模式时的读取有什么需要注意的吗?
A:在读取的时候也是要按照先读低字节,再读高字节的顺序进行。

Q:捕获器的保持功能是怎么回事?
A:捕获器模块为用户提供了一个输入信号保持功能。将P_CAP_Ctrl的捕获数据保持选择位设置为1就可以进行一次性输入信号捕获,捕获器的捕获值(脉宽/周期)寄存器一直会保持这个捕获信号的值,直到将该信号读出。

Q:PWM功能中如何去更新占空比寄存器和周期寄存器呢?
A:而每一个定时/计数器工作在8/12位PWM模式下时,都有对应的周期寄存器、占空比值寄存器。当定时/计数器工作在8/12位PWM模式下时,这些寄存器的写操作是有一定的要求的:
1、 Timer工作在8位PWM模式下,使能8位PWM模式时,先写寄存器P_TMRx_PWMDuty,再写寄存器P_TMRx_PWMPeriod。(x=0,2)
2、 12位PWM模式:更新周期值时,先写P_TMRx_DutyPeriod,然后再写P_TMRx_PWMPeriod;更新占空比时,先写P_TMRx_DutyPeriod,然后再写P_TMRx_PWMDuty。(x=1,3)

Timer


Q:看门狗复位和看门狗定时器是什么关系?它们是一回事吗?
A:看门狗定时器用来产生定时信号,当看门狗定时器溢出时会产生一次看门狗中断,其连续中断8次,便会产生看门狗复位信号,其时钟源来自片内RC振荡电路,振荡频率为25kHz。

Q:SPMC65系列单片机定时/计数器的时钟源来自哪里?是系统时钟吗?
A:定时/计数器的计数频率共有8种选择, 其中7种时钟频率由系统时钟的1~512分频得到,因而频率输入范围非常广。另一种选择就是可以设置定时器的计数频率信号来自于外部事件,即可对外部信号进行计数。

Q:Timer是在时钟的上升沿计数还是在下降沿计数的?
A:上升沿。

Q:当Timer工作在8位模式时,其高8位相应的寄存器是否还起作用?
A:不起作用。

Q:当两个Timer同时工作时会不会产生冲突?
A:不会的。

Q:SPMC65系列单片机16位Timer的计数值是如何完成数据同步装载的?是否会产生错误?
A:SPMC65系列单片机为的内核为8位的CPU,总线宽度为8位,通常无法直接访问16位的数据。为了克服这样的局限性问题,在SPMC65系列单片机中设计了一个数据寄存器Timer x MSB(x = 0~3),用于16位数据高8位的读写操作,如下图所示,它有专门的读/写缓冲器。在读取16位数据时,用户需要先读出低字节,与此同时,高字节被锁存在缓冲器里,低字节读取结束,然后再读取高字节,这时相当于读取缓冲器中保存的定时/计数器高字节数据。相反的,在写16位数据时,用户需要先写入高字节并被缓冲器自动保存,然后再写入低字节,直到16位数据全部写入,缓冲器中的高字节和低字节将会同时载入定时/计数器中去。

Q:在使用Timer的时候,如果我将中断使能Disable之后,那么中断标志位Flag是否还会置1?
A:会的,不管你是否将中断Enable或者是Disable,只要Timer溢出,中断标志位Flag都置1,中断Enable与Disable的区别在于是否能响应中断,进入中断服务程序。

时基

Q:时基如何理解?
A:时基可以看成是一个简易的Timer,只有几种固定的频率选择。

中断

Q:外部中断都有哪些触发方式?
A:外部中断可以设置为电平触发和沿触发两种方式,其中沿触发可以是上升沿触发也可以是下降沿触发,而电平触发可为高电平触发或低电平触发;但是当外部中断输入作为非屏蔽外部中断输入使用时,只能设置为上升沿触发或下降沿触发。

Q:非屏蔽中断和可屏蔽中断有什么区别吗?
A:主要区别有如下几点:
  非屏蔽中断NMI优先级高于可屏蔽中断IRQ,并且不论状态寄存器(P)的中断标志(I)的内容值如何,CPU均会接受NMI中断;可屏蔽中断只有在状态寄存器(P)的中断标志(I)为0时才会被接受。
  非屏蔽中断NMI只有上升沿/下降沿触发,没有电平触发;可屏蔽中断IRQ即可设置为上升沿/下降沿触发,也可以设置为高/低电平触发。
  非屏蔽中断NMI只能选择其中的一个使用,不能同时使用两个或两个以上;可屏蔽中断IRQ无此限制,可以同时使用多个。

Q:SPMC65的中断响应时间是多少?
A:当中断发生时,CPU刚好在取一条最长的指令:inc aaaa,X,执行该指令需要 7个 clock cycles;然后程序再进行压栈和取中断入口地址等一系列操作,需6个clock cycles;最后进入中断服务子程序。因而从中断产生到进入中断服务子程序共需13个clock cycles,即13*0.125=1.625us,而最快的响应时间为6cycles,即6*0.125us=0.75us

Q:SPMC65系列单片机有几种中断源?
A:有7种,它们分别是定时/计数器溢出中断,捕获中断,外部中断,模拟中断(ADC,电压比较输入),通讯中断,看门狗中断以及时基中断。

时钟

Q:SPMC65系列单片机的系统时钟输入方式有哪些?
A:目前我们支持三种时钟源:晶体/陶瓷振荡器、RC振荡器和外部时钟源。可通过设置寄存器P_MO ($7FE0)来选择不同类型的时钟源。注意:若选择晶体/陶瓷振荡器或外部时钟作为时钟源,时钟频率将被二分频,然后作为系统时钟(FSYS)提供给CPU,供其正常工作。所以若想得到8MHz的系统时钟,晶体/陶瓷振荡器或外部时钟必须设为16MHz。

Q:怎么样理解SPMC65系列单片机的机器周期、指令周期呢?
A:SPMC65系列单片机分有振荡器时钟(FOSC)和系统时钟(FSYS)两个概念,实际上FOSC就是晶体输入或外部时钟输入的时钟频率,最高可达16MHz;而FSYS 即CPU及芯片的一些外围工作的频率是由FOSC经过二分频得来的。我们约定,SPMC65系列单片机的机器周期为1/FSYS,即系统时钟的一个时钟周期,同时也是CPU时钟周期;而SPMC65系列单片机的指令用Cycles来计算,一个Cycle即一个CPU时钟周期,当一条指令的Cycles为3时,则可以说该指令的执行要用到3个CPU时钟周期(也即FSYS时钟周期)。

Q:当采用晶体振荡器提供系统时钟时,需要注意些什么?
A:振荡器可以选择晶体振荡器或陶瓷振荡器。两个电容一般选择20pf的陶瓷电容,加这两个电容将有助于振荡器起振。时钟电路对于系统的稳定具有很重要的作用,因此对于受外界干扰较大,或对系统的稳定性要求很高的系统,在PCB布局及走线时要特别注意。时钟输入线应尽量短,这样时钟电路就应尽量靠近IC;并且,时钟电路的地线应避免受其它电路的干扰。

Q:SPMC65系列单片机选择RC振荡器提供系统时钟的方式有什么特点吗?
A:该电路的特点是结构简单,成本低,在选择使用RC振荡器的时,SPMC65系列单片机可以在XO端输出与系统工作频率同步且频率相同的振荡信号;缺点是产生的时钟频率存在较大的误差,在需要准确定时的系统中不合适使用。

Q:SPMC65系列单片机定时/计数器的时钟源来自哪里?是系统时钟吗?
A:定时/计数器的计数频率共有8种选择, 其中7种时钟频率由系统时钟的1~512分频得到,因而频率输入范围非常广。另一种选择就是可以设置定时器的计数频率信号来自于外部事件,即可对外部信号进行计数。

Q:利用RC振荡产生的信号时钟频率偏差有多大?
A:对于一些对系统时钟不是很严格要求的场合来说,可以利用RC振荡来产生所需要的时钟源,它的的频率相差范围在±15%。

通讯

Q:SPMC65系列单片机共提供了哪些串行通讯口?
A:SPMC65系列单片机共提供了三种串行接口模块,即:
· SPI(Serial Peripheral Interface)串行外设接口;
· 标准全双工UART通用异步收发器;

Q:如何清SPI、UART的中断标志位?
A:在中断标志寄存器2(P_INT_Flag2)中可以读出UART中断标志、SPI中断标志位中断标志位,但是此寄存器的UART中断标志、SPI中断标志位是不可以写的,所以要清除UART、SPI的中断标志位时,要通过写其对应的控制寄存器来完成的。
清SPI中断标志需要通过写SPI TX/RX 状态寄存器P_SPI_Status的Bit7位,写1表示清除。
而UART的中断标志位清除较特殊,当有接收中断标志时,用户可以读P_UART_Data寄存器,这样会自动清除UART接收中断标志位;而发送准备好中断标志在写P_UART_Data寄存器时会自动清零;而UART中断标志位由接收中断标志和发送中断(发送准备好中断标志)组成,当清除接收中断标志位或发送中断标志位后,UART中断标志位会自动被清除(当然此时要保证发送中断标志和接收中断标志都为0)。

Q:在进行SPI通信时,当SPI时钟频率为1MHz时,如果设置采样频率为2MHz为什么会出现通信错误?
A:采样时钟的目的是为了防止在接收数据时受到尖脉冲的干扰,但是低的采样率会影响通信速度;建议:采样时钟频率 > = 4×SPI时钟频率。当SPI时钟频率为1MHz时,采样时钟频率 >= 4×1MHz = 4MHz,即采样时钟必须大于4Mhz 才能保证从机数据接收正确。此时采样时钟频率宜设置4Mhz。

Q:SPI通信中的BUFFull标志位是干什么用的?
A:当前SPI接收到一个完整的数据时,会把接收缓冲器中上次接收到的数据覆盖,此时将BUFFull标志位置位。

Q:SPMC65系列单片机的UART通信的数据寄存器只有P_UART_Data一个,那么是如何实现的全双工通信呢?
A:SPMC65系列单片机的UART通信的数据寄存器实际上有接收数据缓冲寄存器和发送数据缓冲寄存器两个,只是它们都叫P_UART_Data而已。

复位方式

Q:SPMC65系列单片机的低电压复位(LVR)电压值为多少?
A:当单片机的电源电压低于设定的复位电压值大于1024个系统时钟时,芯片便会产生复位,SPMC65系列单片机提供的复位电压为4.0V和2.5V可选。

Q:SPMC65系列单片机提供的复位方式各自的复位时间是多少?
A:非法地址复位和看门狗复位都是复位完立刻跑,没有延时问题;上电复位情况下,当电压上升到1.45V后系统会等待40ms的时间以待电源稳定,然后再等待40ms的时间以待系统时钟稳定,最后经过于1024个系统时钟后完成复位;低电压复位情况下,当电源电压低于设定的复位电压值超过1024个系统时钟时,系统进入低电压复位,待电压恢复到设定的复位电压以上时,系统经过1024个系统时钟完成复位;外部复位情况下,外部复位引脚 上的电压低到0.3xVDD(VDD为电源电压)以下,并维持200ns以上时,系统进入外部复位,当电压恢复时,系统会等待40ms的时间以待系统时钟稳定,然后经过1024个系统时钟后完成复位。

Q:所有的"External Reset"是否都会把用户RAM区的内容复位?
A:不会,External Reset为系统复位(包括CPU复位),硬件控制控寄存器会恢复为默认初始值,但不改变用户RAM区中的值,除非由于电压下降到不可维持RAM中的数据的情况发生。

Q:从上电复位到ADC稳定开始转换需要多长时间?而从退出STOP模式进入正常工作模式的时候ADC的稳定又需要多少时间?
A:当上电复位后,ADC模块的模拟建立时间也就是等待参考电平稳定的时间。它取决于接在VREF引脚的电容容量。此电容越大VREF的噪音就越小,ADC转换结果的噪音也就越小。如果用4.7uF电容,则稳定时间大约为2ms,如果无旁路电容(不推荐),稳定时间大约为10us。注意:在开始转化之前,需要一个1.5us的跟踪时间,这也就决定了ADC多路转换开关(MUX)的切换速度。而芯片从STOP模式退出而进入正常工作模式后,ADC的稳定到可以开始转换的时间长度与上电复位时的情况是一样的。

Q:请问每种复位对寄存器和RAM都有什么影响?
A:按照复位结果可以分为系统复位和CPU复位。系统复位不仅复位CPU,同时还会复位所有的内部模块(包括IO、Timer、A/D、D/A、各种控制寄存器等都将初始化为默认值);而CPU复位只会复位CPU,即PC指针重新指向初始地址,程序重新从头开始执行,同时也会复位堆栈指针,指向堆栈的最高地址。其中非法地址复位和看门狗复位只会影响到PC指针和堆栈指针;而对于上电复位、外部复位和低电压复位除了进行CPU复位外,都会将硬件控制寄存器进行初始化。

Q:在Stop模式时,当有外部复位把CPU唤醒时,是否对寄存器、RAM、以及硬件模块的影响与平时的外部复位是一样的?
A:是的,而实际上SPMC65系列单片机在STOP或HALT模式下由于外部复位而使其进入正常工作状态的情况,是属于非正常的唤醒情况,这样的情况与外部复位对芯片的影响是一样的。

Q: 当器件在掉电/挂起模式,看门狗定时器(WDT)是否运行?
A:SPMC65系列单片机看门狗定时器的时钟源来自片内RC振荡电路,在HALT模式下,所有的周边硬件保持原来状态,正常工作,只有CPU停止工作以节省功耗;所以此时看门狗定时器是运行的;在STOP模式下,片上振荡器停止工作,CPU以及所有的周边也停止工作,看门狗定时器(WDT)是否运行与进入STOP模式前的设置有关,当设置看门狗在STOP模式使能时,看门狗定时器仍然是运行的,而且也可以利用看门狗中断使CPU从STOP模式唤醒。当设置看门狗在STOP模式不工作时,看门狗定时器不运行。

Q:看门狗复位和看门狗定时器是什么关系?它们是一回事吗?
A:看门狗定时器用来产生定时信号,当看门狗定时器溢出时会产生一次看门狗中断,其连续中断8次,便会产生看门狗复位信号,其时钟源来自片内RC振荡电路,振荡频率为25kHz。

Q:什么情况下会产生非法地址复位(IAR)?
A:当用户程序访问到芯片未定义的地址空间时,会产生非法地址复位;而当堆栈溢出时也会产生非法地址复位。

Q:SEI和CLI含义是什么?
A:SEI指令将状态寄存器P中的中断屏蔽标志位I置1,置1后CPU将会忽略除非屏蔽中断外的所有中断申请,相当于关闭全部中断;CLI指令将状态寄存器P中的I标志位清零,清零后CPU将可以接受中断申请,即打开全部中断。

Q:当数据寻址时如果跨越了一页,指令周期会再加一是吗?
A:是的,而每一页的存储空间大小为256个Byte。

Q:十进制模式对什么指令有影响?
A:十进制模式对算术运算指令中的ADC、SBC指令有影响,当设置为十进制模式时,ADC、SBC运算按照十进制模式进行。

SED         ; 将十进制模式标志D设置为1,切换到十进制运算模式
LDA   #$25    ; A<-$25
SEC         ; 将进位标志C设置为1
ADC   #$18    ; 十进制运算,A ? (BCD)A + (BCD)$18 + C,累加器A的值变为$44,C=0,
           ; N=0, Z=0, V=0

Q:BIT测试指令在执行时会进行怎么样的操作?BIT和TST有什么区别呢?
A:BIT为测试指令,该指令将存储器中的值与累加器A中的数值进行"与"的运算,但不保存结果,即不影响累加器A以及存储器中的值,只影响状态标志寄存器P中的N、V、Z标志位。TST指令为位操作指令,为按位测试指令,该指令对存储器中的数值的某一位进行测试,影响Z标志位。

Q:位操作指令只能在PAGE0中操作吗?
A:是的,位操作指令只能对第零页存储空间内的寄存器或存储单元进行操作。

Q:SPMC65系列芯片的复位方式有几种?
A:共有5种,它们分别是上电复位(POR)、外部复位(ERST)、低电压复位(LVR)、看门狗复位(WDR)、非法地址复位(IAR)

堆栈

Q:关于硬件的堆栈问题,其他厂商都有说明是几层堆栈,那SPMC65的堆栈是怎么来划分的呢?
A:SPMC65的堆栈有32个字节,每进入一次中断,至少需要占用3个字节:2个字节的返回地址和1个字节的状态寄存器。一般情况下,进入中断有时还需要将A、X、Y压入堆栈进行保护,这么算下来,进入一次中断总共需要占用6个字节,这种情况下最多可以5层中断 嵌套。每调用一次子程序,占用2个字节的堆栈,这种情况下最多可以16层子程序 嵌套。如果堆栈占用溢出,程序会复位。

指令
Q:SPMC65系列单片机的C标志位、十进制标志位和溢出标志位是如何使用的?
A:进位标志(C):当加法操作中产生进位或减法操作中没有产生借位时,该位被置1。此外,移位或循环指令也会改变该位的值;十进制模式标志位(D):在SPMC65系列单片机中有两种算术运算模式:二进制模式和十进制模式,该位标明了当前的运算模式。用户可以通过相应的控制指令来选择一种运算模式;溢出标志位(V):该位仅用于有符号数的算术运算。如果两个同符号数相加或两个不同符号数相减,结果大于127或者小于-128,该位置1。

Q:怎么样理解SPMC65系列单片机的机器周期、指令周期呢?
A:SPMC65系列单片机分有振荡器时钟(FOSC)和系统时钟(FSYS)两个概念,实际上FOSC就是晶体输入或外部时钟输入的时钟频率,最高可达16MHz;而FSYS即CPU及芯片的一些外围工作的频率是由FOSC经过二分频得来的。我们约定,SPMC65系列单片机的机器周期为1/FSYS,即系统时钟的一个时钟周期,同时也是CPU时钟周期;而SPMC65系列单片机的指令用Cycles来计算,一个Cycle即一个CPU时钟周期,当一条指令的Cycles为3时,则可以说该指令的执行要用到3个CPU时钟周期(也即FSYS时钟周期)。

Q:为什么每次进入HALT模式或者进入STOP模式语句后面都要紧跟两条或更多的nop指令?如果没有这几条nop指令的话,系统是否会执行进入HALT模式或者进入STOP模式语句后面的语句?
A:一般情况下,系统从省电模式下被唤醒,恢复到正常工作模式期间,系统时钟会有一段时间的稳定时间;所以为了避免程序在系统时钟不稳定下执行,最好在进入STOP模式语句后面紧跟两条或更多的nop指令,这样即使在系统时钟还没稳定时执行空操作指令,也不会影响整个系统的工作;实际上这样的情况是非常少遇到的,加上空操作指令只是为了使系统更加可靠。

Q:在数据存储空间定义变量时,.PAGE0和.DATA有什么区别?
A:"PAGE0" 用于零页变量的定义;"DATA"用于非零页变量的定义。在SPMC65系列单片机中,地址$0000~$00FF内的存储空间为第零页(PAGE0)存储空间(包括硬件控制寄存器空间和部分用户RAM区);PAGE0之外的RAM区为DATA区;用户程序仿问PAGE0区的寄存器/存储空间时相对DATA区的要快,而位操作指令也只能对PAGE0区的寄存器/存储空间进行操作。

Q:下面的变量定义为什么会出错?

A:在定义变量的时候,变量名称例(如图中的C_Mode_Cold)必须顶格写,或者不顶格后面必须添加冒号,这样编译才不会出错。如下图所示:


Q:65都有哪几种位操作指令?
A:65所支持的位操作总共有4条指令,以下做介绍:
SET-----将指定地址的指定位设置为1
CLR-----将指定存储器地址的指定位设置为0
INV-----将指定地址的指定位取反
TST-----为测试指令,判断指定地址的指定位是否为0

Q:写程序时,如果想在程序存储空间建立数据表应该如何做?
A:在程序存储空间建立数据表与在RAM区定义数据表类似,只是需要确认前面有程序段的声明".CODE",如下面的例程所示:

.CODE                      ;Code Section
T_DataTable:                   ;The com table of led
   DB        %00001110     ; Data '1'
   DB        %00001101     ; Data '2'   
   DB        %00001011     ; Data '3'
   DB        %00000111     ; Data '4'

Q:什么情况下会产生非法地址复位(IAR)?
A:当用户程序访问到芯片未定义的地址空间时,会产生非法地址复位;而当堆栈溢出时也会产生非法地址复位。

Q:$30~$36地址的寄存器连续写两次有什么要求吗?
A:对于需要连续写两次才能有有效的寄存器,SPMC65系列单片机内部有一个两次清零的计数器,当第一次写入后,计数器内部会作标记,只有再一次遇到与第一次写入数值相同的操作时才会把计数器清零,并把数据载入寄存器。两次写操作之间的时间间隔没有规定,而在两次操作间再有写入其它不同数值的操作时,CPU会忽略写入不同数值的操作。

Q:$30~$36地址的寄存器需要连续写两次才会有效,那么用位操作连续写两次是否会有效呢?
A:是一样的。

Q:SPMC65系列单片机一般的指令周期是多少呢?
A:SPMC65系列单片机的一般指令周期数为2~4个CPU时钟周期为多,也有5、6个时钟周期的指令。

Q:SPMC65系列单片机的指令有什么特点吗?
A:SPMC65系列单片机的指令系统为CISC(复杂指令集),这样的指令集用起来非常灵活,可以有效地提高程序的效率。

Q:伪指令中哪些用来定义常量,哪些是用来定义变量的呢?
A:常量定义伪指令:.DB、.DW、.DD、.FLOAT、.DOUBLE,它们可以与.EQU配合使用;
变量定义伪指令:.DS
事实上,常量定义伪指令也可用来定义变量,但不建议这样使用。

Q:伪代码 .DD 'ef' 占用几个字节?
A:对于.DD定义的常量,其中每个元素都占用4个字节。所以字符串'ef'中的两个字符共占用8个字节的存储空间。

Q:.VAR和.EQU在使用的时候有什么区别吗?
A:.VAR和.EQU都是对标号赋值的伪指令。二者的区别是:.VAR可以对先前利用.VAR赋值过的标号重新赋值,而.EQU不可以对标号重新赋值;利用.EQU赋值的标号可以声明为公有标号,可被其它文件引用,而.VAR赋值的标号不能声明为公有标号。

Q:那么.VAR、.EQU和.DB、.DW等又有什么区别呢?
A:.VAR和.EQU的作用是对标号赋值,它不会占用存储空间,可以在程序文件的任意行使用这两个伪指令;.DB、.DW等的作用是对常量进行定义,将占用一定的存储空间用以存储这些常量,定义常量的伪指令只能出现在.CODE或用户自定义的ROM段下方。

Q:用户可不可以自定义.CODE段的起始地址?如何定义呢?
A:用户可以修改工程文件夹下的prog.lik文件,将"locate: CODE at xxxxh"中的"xxxxh"改为自定义起始地址即可。但不建议用户修改prog.lik中的段起始地址。

Q:我编写了如下程序:


编译时出现如下错误信息,请问时什么原因?

A:伪指令comment和@之间至少应有一个空格。

 
版权所有:北京凌阳爱普科技有限公司 京ICP备05061966号 未经许可网站内容严禁复制、转载,任何人不得擅自使用
友情链接:凌阳爱普 嵌入式培训 安卓培训 凌阳大学计划 北京嵌入式培训 深圳嵌入式培训 成都嵌入式培训