打印
[技术问答]

赛元MCU常见(编译)应用问题解决方案

[复制链接]
5998|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 赛元MCU3 于 2019-8-14 14:42 编辑



编译问题



(1)赛元SC92F7252的ADC低8位为0异常?
   答:有可能是使用了IC未有的资源XDATA所致,改用IDATA区试一下。

(2)赛元SC92F732X外部中断输入后程序异常?
  答:请查看程序中是否操作TCON这个寄存器,或者是操作了其中的bit位。

(3)定义unsignedlong的变量test,实现test=(1999+1)*1000,keil出来的结果不对?
   答:语法实现问题,test=(unsigned long (1999+1)*1000)才是正确。

(4)掉电电压在复位电压附近,RAM保存的做法?
   答:STARTUP.A51文件有上电清RAM的功能,清查看是否设置了清RAM长度,如果想实现掉电保存,需要根据自己的需要设置请RAM长度,一般可以设置不清RAM,即长度为0。

(5)为什么赛元SC92F7323驱动 LCD有鬼影?
   答:SC92F7323为1/2Bias的LCD驱动,请检查使用的LCD是否为1/2Bias。

(6)UART发送0X55正常,发送其它数据不正确,是什么原因?
   答:将TXD初始化为强推输出高或者是输入带上拉模式后再试一下。

(7)硬件驱动LED时COM2的灯会微亮异常,是什么原因?
  答:请查看硬件LED是否使用了共阳接法,请改为共阴接法看一下是否正常。

(8)TK16以上按键没反应,是什么原因?
   答:赛元触控库的touchkeyscan()函数返回值为unsigned long int类型,请检查程序中定义的按键返回值变量是否为unsigned long int类型。

(9)TXD发送数据过程,偶尔有错码,是什么原因?
   答:将TXD初始化为强推输出高或者是输入带上拉模式后再试一下。

(10)赛元SC91F8322芯片,P50以及P51无法读取按键信号,是什么原因?
   答:建议用GPIO为准双向,并把IO口逻辑置1后,才读取按键信息。

(11)用赛元SC92F7321转SC92F7251,芯片运行不正常,是什么原因?
   答:SC92F7321的 SRAM资源跟SC92F7251有所差异,SC92F7251只有内部256byte SRAM。

(12)UART通信,待机功耗偏高,是什么原因?
   答:建议降低芯片主频,功耗会有所降低。

(13)用赛元SC92F8541芯片作为从机,IIC握手通信偶尔会发生异常,是什么原因?
   答:IIC从机处理,从机发送完1Byte键值后,主机那边不会回复ACK信号,所以不用处理AA寄存器,主机会主动结束IIC通信。

(14)调试过程遇到PC界面RAWDATA BASELINE数据一条直线或变化量只有10个值的浮动,是什么原因?
   答:请检查是否与打开的KEIL项目有冲突,请先临时关掉了KEIL之后,再进行调试。

(15)程序运行过程会出现芯片复位,是什么原因?
   答:等待AD转换结束过程,对EOC判断逻辑搞反导致复位问题。

(16)高可靠库体,用PC调试界面发现RAWDATA/BASELINE无数据变化,且软件提示“USB请接好”,是什么原因?
   答:建议烧录完静态调试HEX之后,需拔插一次SC_LINK恢复正常。

(17)KEIL下载程序报“MCU未连接或型号选择错误”,是什么原因?
   答:可能出现的问题有:
          ①芯片选型错误;
          ②烧录口连线错误;
          ③下载线超过50cm;
          ④用SC LINK下载时,没有拔掉DPT52。

(18)仿真时TXD输出异常,是什么原因?
   答:仿真过程TXD数据为仿真信息数据,而非串口数据。

(19)仿真过程中无法修改寄存器的数据,是什么原因?
   答:仿真运行过程是无法修改寄存器值得,需要停止全速运行后在WATCH窗口改写。

(20)IAP操作过程,数码管呈现抖动现象,是什么原因?
   答:IAP操作需要花费比较长的时间,如果一次性IAP很多数据,可能会影响到数码管的正常扫描,可采用分时IAP操作,即将IAP操作分开几次操作。

(21)程序上电后无反应,是什么原因?
   答:赛元92F735X系列芯片,复位口不允许上电被电平拉低,否则会一直在复位状态。

(22)赛元芯片开启SSI功能,TK失效,是什么原因?
   答:有可能是SSI初始化关闭了TK中断使能位。

(23)程序在赛元SC93F8433上运行正常,移植到92F8463B程序运行不正常,是什么原因?
   答:原因是93芯片指令效率比92效率高,程序中125us定时器中断一次,同样的程序93有足够的时间正常执行完所有逻辑,92会受到影响,可通过修改程序逻辑解决。

(24)编译器提示ROM超出,是什么原因?
  答:keil未**,有2K的限制。

(25)仿真发现有些变量值不正确,是什么原因?
   答:可能是程序中操作了EEPROM,但是没有返回ROM区。

(26)EFT 4KV 系统复位,是什么原因?
   答:可在串口加入101电容,同时可以将芯片管脚处的104滤波电容靠近IC管脚放置,可以改善EFT性能。

(27)赛元SC92F7351芯片不能仿真,怎么办?
   答:建议用SC92F7321开发再进行程序移植。

(28)用赛元官网的DEMO,uart发送数据不正确,是什么原因?
   答:TTL转USB供电容易不稳定,建议用稳定的电源供电或用示波器看数据。

(29)赛元SC92F7320,现焊好样片,用官网的DEMO编译下载没有问题。但单步调试进入不了主程序,怎么办?
   答:换用keil 目录下的DEMO CODE可仿真。

(30)使用赛元SC92F8270做静态调试,静态调试烧录码过大,怎么办?
   答:用SC92F8370来做调试,然后将调试出来的参数替换到SC92F8270中。

(31)用FLASH做EEPROM,要先擦除再写,速度来不及,怎么解决?
   答:赛元的FLASH工艺有两个优势:
          ①不需要擦除  
          ②可以单字节写数据。你只要定义需要写入的地址,直接写需要保存的数据就可以了,直接覆盖。

(32) UART的频率误差超过3%通讯可能出错,赛元SC92F7003芯片能做吗?
   答:SC92F7003的内建的高频振荡器频率误差是在1%,是可以让UART误差在允许范围内能正常通讯的。

(33)赛元SC92F7003 芯片的SRAM总共有512byte,如何区分使用?
   答:SC92F7003总共用内部RAM 256BYTE和外总RAM 256BYTE,使用内部RAM可以定义变量时加入idata如unsignedchar idata 变量名;使用外部RAM可以定义变量时加入xdata如unsigned char xdata 变量名。

(34)请问赛元SC92F7003的烧录引脚与STM8S003的烧录引脚是完全相同吗?
   答:不完全相同,VDD/VSS管脚位置是一样的7003的tck与STM8S003的SWIM在同一个脚位,SC92F7003的tdio与STM8S003的VCAP脚在同一个脚位,由于7003不需要用到VCAP电容,因此可以通过这个脚位引线烧录。STM8S003的管脚功能与7003的相似度很高,从STM8S003转到7003绝大部分情况下不需要改板。

(35)赛元SC92F7003芯片的SPI最高速度可以达到多少?
   答:最高速度为主频的4分频,假如是16M主频,则SPI最高速度为4M/bit。

(37)外部中断只设置了下降沿触发,但按键的上升沿有时候也会产生中断,是什么原因?
   答:可能是按键有短脉冲干扰,建议用延时过滤。

(38)定时器定时125us会有偏差,是什么原因?
   答:检查定时器中断优先级是否设置为高。

(39)骚扰功率NG,怎么办?
   答:程序中加入调频可以改善。

(40)定时器不准,是什么原因?
   答:请将定时器中断优先级设置为高看一下是否可以解决。

(41)编译器报错,是什么原因?
   答:可能是SRAM分配不合理导致。

(42)12M外振应用如何实现?
   答:可通过烧录软件配置来选择使用外部高频晶振。

(43)RAM编译报ERR,是什么原因?
   答:可能是RAM分配不合理导致。

(44)外部中断响应不够及时,是什么原因?
   答:分析程序处理,检查程序优先级是否需要调整。

(45)程序ADC不准,是什么原因?
   答:检查ADC写法是否按例程要求处理。

(46)ADC中内部电源电压检测,当ADC输入为1/4 VDD时采样值不准,是什么原因?
   答:可将基准电压改为2.4V。

(47)仿真时,点击reset,程序没有回到00地址,是什么原因?
   答:可能是接线错误导致。

(48)ADC采样数据不准,是什么原因?
   答:请检查ADC初始化是否正确。

(49)进入stop之后功耗过大,是什么原因?
   答:可能是:
        1 关闭ADC电源和WDT
        2 悬空以及未封装出的IO设置为输出模式;
        3 根据实际应用电路设置IO口电平,即需要保证IO口没有电流流入和流出;
       请检查以上几点有没有按照上述建议设置,另外在测试低功耗时,建议先用空芯片测试,确定功耗后再焊接到板子上进行整体测试,这样比较容易查找问题。

(50)stop模式不能被外部中断唤醒,是什么原因?
   答:可能是外部中断函数被屏蔽了,打开之后可以正常唤醒。

(51)C语言标准库的头文件如何加入工程?
   答:keil的C51目录下已包含这些文件,程序中直接包含调用即可。

(52)赛元SC92F8463B的PWM输出无法得到2/3占空比4KHz信号,是什么原因?
   答:请检查PWM关键寄存器,是否赋值正确。

(53)UART通信出错是什么原因?
   答:请检查TXD口线状态设置是否有误,92系列芯片需要将TXD口设为输入带上拉模式。
   
(54)PWM无输出,是什么原因?
   答:请检查程序逻辑是否有误。

(55)IAP操作时间偏慢,如何提速?
   答:相关SFR寄存器可调节,注意:Fsys切换法不能改变IAP操作时间。

(56)编译软件keil不运行,是什么原因?
   答:可能是keil版本问题。

(57)赛元芯片在编译软件Keil中无法仿真,是什么原因?
   答:请检查是否安装赛元KEIL C插件。

(58)UART发送数据不正确,是什么原因?
   答:请检查波特率设置是否正确。

(59)I/O模拟PWM输出波形存在抖动,是什么原因?
   答:可能是触控库体内部,TK中断被优先导致。

(60)UART1发送数据异常,是什么原因?
   答:请检查UART1中断内部是否存在多个SSDAT赋值语句。

(61)main函数里面插入汇编,仿真进不了main,怎么办?
   答:工程中要加入INIT.A51文件,要在文件main.SRC里仿真看。

(62)如何先初始化硬件(IO口、中断、看门狗)再清RAM?
   答:可以将startup.A51里清RAM的语句地址都改为0x00,硬件初始化完后后面再写清RAM的程序。

(63)仿真和实际程序运行结果不一致,是什么原因?
   答:请检查仿真设置是否正确。

(64)使用115200波特率时,如何使丢码率达标?
   答:可通过HRC来调节。

(65)UART通信连续发送时,超过2字节接收端只收到两个,是什么原因?
   答:可能是TI未清0,发送数据前把中断关闭了,导致无法进中断,无法执行发送程序。

(66)赛元SC92F7309仿真不能调试,但需要仿真开发,怎么办?
   答:赛元SC92F7309不支持仿真,可用SC92F732x进行仿真再移植。

(67)编译软件Keil中,编程编译不通过,是什么原因?
   答:检查编译软件KEIL是否未注册。

(68)编译软件keil中无赛元SC92F7422型号选择怎么办?
   答:请更新赛元MCU库。

(69)编译后程序多处警告/ERRER,是什么原因?
   答:检查LIB文件导入是否出错。

(70)定时器T0运行过程,周期不稳定,是什么原因?
   答:可能是程序问题,请检查优先级寄存IP和IP1的设置位是否出错导致。

(71)使用赛元SC92F8546芯片的UART1功能,没有数据发出,是什么原因?
   答:可能是UART程序逻辑错误。

(72)使用赛元芯片的PWM功能无输出,是什么原因?
   答:请检查PWM占空比和周期的值是否相同,导致的没有波形。

(73)使用赛元芯片做仿真调试时,WATCH1窗口查询不到整个数组的数据,只能查到数组下标0的数据,是什么原因?
  答:请检查程序中是否嵌入汇编指令导致,可尝试去掉嵌入汇编程序,来查看仿真是否正常。

(74)使用赛元芯片, UART发送数据错误,是什么原因?
  答:请检查:
       将TX口设置为输入带上拉,再试一下;
      ②波特率是否计算错误。

(75)使用赛元SC LINK时;KEIL编译出来的Checksum,跟HEX文件装入烧录器的Checksum不一致,是什么原因?
  答:KEIL编译的Checksum只是编译器编译出来的,与真实的不符,SOC PRO51中的是正确的。

(76)使用赛元芯片时,程序频繁进入外部中断,是什么原因?
  答:请检查是否在外部中断程序中频繁操作了TR0和TF0,或者是TR1和TF1。

(77)使用赛元芯片,在TXD空闲状态下有时为低电平,是什么原因?
  答:将TX口设置为输入带上拉,再试一下

(78)使用赛元SC92F7351芯片时,不能进行仿真,是什么原因?
  答:该型号不支持仿真,建议用赛元SC92F7321芯片来开发。

(79)使用赛元芯片,在用KEIL仿真时经常出现闪退现象,是什么原因?
  答:请检查:仿真设置。或者可尝试更换电脑试一下。

(80)使用赛元芯片时,结构体数组中存放多个函数指针,会产生复位,是什么原因?
  答:请检查:是否未设置code区从0X100后开始。

(81)使用赛元SC92F7250芯片时,主函数while中做IO口翻转和PWM功能,IO口刚上电翻转之后就不翻转了,是什么原因?
  答:检查一下程序,会不会有死循环。

(82)用赛元SC92F7250 芯片,可否用PWM输出7.8hz方波来驱动电机?
  答:芯片输出不了这么低的频率。

(83)使用赛元芯片时,外部中断频繁的唤醒stop,是什么原因?
  答:请检查:是否同时打开了外部中断0和外部中断1,且没有将外部中断口设置为输入带上拉模式。另外请检查程序中频繁操作了TR0和TF0,或者是TR1和TF1。

(84)使用赛元SC92F8546芯片时,PWM输出不正确,是什么原因?
  答:请检查:程序设置问题。

(85)使用赛元SC92F8003芯片时,上电时T0,T1正常,stop唤醒后不能进入T2中断,是什么原因?
  答:请检查:是否开了外部中断,没有写外部中断服务函数,导致程序跑飞。

(86)使用赛元MCU在STOP唤醒后,代码是从哪儿开始执行的?
  答:唤醒后代码是从 STOP函数的下一行代码开始执行的。

(87)使用赛元SC92F7323芯片,Fsys=24M运行,ADC不准,定时器不准,是什么原因?
  答:24M有温度需求,建议Fsys=12M;另外请检查软件设置TIMER0、TCON寄存器设置是否有错。

(88)使用赛元SC92F7250芯片,开启ADC以及定时器后,TIMER0中断函数无法进入,是什么原因?
  答:可能为:程序逻辑标志位设限所致,纠正后可解决。

(89)使用赛元SC92F8003芯片,用timer1控制蜂鸣器驱动,同时用timer0定时,将timer1中断优先级置高,将timer0定时器优先级置低,发现打开timer0中断,控制蜂鸣器的P24口电平会出现抖动,是什么原因?
  答:请检查:timer0中断与timer1中断是否同时操作了同一组IO口,当在timer0中断中操作了P2口的其他IO口,就会影响蜂鸣器所在的P24口的电平,将读IO功能关闭之后,可正常。

(90)使用赛元MCU时,ADC通道切换后采集的数值不变,是什么原因?
  答:可能是:通道切换错误。

(91)使用赛元SC92F8003芯片,PWM不输出,ADC无法采样,是什么原因?
  答:可能程序中PWM周期小于占空比设置值;检查:ADC采样完成标志位是否写错。

(92)赛元MCU的PWM驱动能力和IO口的驱动能力是否一致?
  答:是一样的。

(93)使用赛元SC92F7251芯片,外部中断唤醒STOP有时会需要3次才能唤醒,是什么原因?
  答:请检查程序:定时器中断中是否操作了TF1,TF0,TR0,TR1,导致外部中断标志被误清除,屏蔽后可解决。

(94)使用赛元SC92F8003芯片,采用查表法无法正确读到数组中的数据,是什么原因?
  答:检查程序操作逻辑是否正确。

(95)使用赛元SC92F7445芯片,仿真时功能无效,不仿真功能正常,是什么原因?
  答:检查仿真运行操作是否有误,查看全速运行是否正常。

(96)使用赛元SC92F7445芯片,打开AD采样,定时器失效,是什么原因?
  答:检查程序:在AD中断打开时是否操作了IE,而关闭了定时器中断。

(97)使用赛元SC92F7547芯片,EMI测试余量不足,怎么办?
  答:建议降频和调频来解决。

(98)使用赛元SC92F7463芯片,PWM互补模式没有波形,是什么原因?
  答:检查占空比设置是否为0了。

(99)使用赛元SC92F8003芯片,仿真时进入STOP模式,通过按键无法唤醒STOP模式,是什么原因?
  答:在STOP模式下无法正常仿真。

(100)使用赛元SC92F8003芯片,UART发送数据出错,是什么原因?
  答:检查TX口是否设置为输出低导致,将TX口设置为输入带上拉可解决。

(101)使用赛元SC92F8445B芯片,程序运行数分钟后会复位,是什么原因?
  答:检查是否存在显示数组下标自加到255后溢出为0,导致全显,限制下标自加后程序可正常。

(102)使用赛元SC92F7323芯片,程序经常跑飞是什么原因?
  答:可能是SRAM资源分配不科学导致,推荐合理分配SRAM资源。

(103)使用赛元SC92F8003芯片,外部中断无法唤醒stop模式,是什么原因?
  答:检查程序:在进入stop模式之前,是否将总中断关掉了。

(104)使用赛元SC92F8446B芯片,ADC数据上电1S内不稳定,是什么原因?
  答:检查程序:是否有ADC通道转换,但ADC数据没有做任何处理的问题。

(105)使用赛元SC92F7252芯片,程序编译为3894 Byet,但烧录提示超过4K,是什么原因?
  答:可能为ROM前256没有使用导致,可重新使用前256 ROM空间。

(106)使用赛元SC92F7003芯片,stop唤醒后程序没跑,是什么原因?
  答:可能是外部中断函数中没有清零。

(107)使用赛元SC92F7252芯片,如何进行仿真?
  答:赛元SC92F7252芯片不支持仿真,建议用SC92F7322来仿真。

(108)使用赛元SC92F8445B芯片,仿真不了,是什么原因?
  答:可能是进入仿真前没有烧录。

(109)基于赛元SC92F7323芯片写的I/O逻辑输出程序,用于赛元SC92F7322芯片后无法正常,是什么原因?
  答:SOP20/SOP28封装转换,I/O口出脚方位有所变化。

(110)KEIL里面想对RAM参数全部清0,如何操作?
  答:可以将startup.A51里写清RAM的程序。内部清RAM不能指定,内部清RAM的起始地址是从0开始,外部清RAM可以指定。

(111)使用赛元SC92F7252芯片,AD值有偏差,是什么原因?
  答:检查是否把AD口设置为输出模式,在AD口切换时会有偏差,将IO设置为输入模式后可解决。

(112)使用赛元SC92F8363B芯片,在测试时按键跳键,是什么原因?
  答:检查触控程序的触控和悬空的IO口是否都设置为了输入模式,改为输出模式后,可正常。

(113)使用赛元SC92F7352芯片,程序编译时显示DATA溢出,怎么办?
  答:可将部分数据定义为idata来解决。

(114)使用赛元SC92F7252芯片,①定时器定时不准;②PWM无法输出波形;③UART发送数据错误,是什么原因?
  答:①检测定时时间计算是否错误;②可能是:PWM中没有将对应的IO口设为PWM输出;③可能是:波特率计算错误。

(115)使用赛元SC92F7252芯片,打开ADC程序后,数码管才能显示,关掉ADC初始化,数码管就不显示,是什么原因?
  答:数码管显示是在定时器中断里面扫描的,可能是:定时器初始化没有打开总中断,而ADC初始化中才打开了总中断导致。

(116)使用赛元芯片,EEPROM读出对应地址数据有误,是什么原因?
  答:检查对EEPROM地址设置是否错误。

(117)使用赛元SC92F7547芯片,进入低功耗,电流为80uA,是什么原因?
  答:可能是IO口设置为输入不带上拉模式,导致功耗偏大。

(118)使用赛元SC93F8433芯片,过EMI测试,需要做调频,调频后UART通信会出错,是什么原因?
  答:可能是UART波特率设置偏差较大,将波特率设置寄存器进行加1和减1可解决。

(119)使用赛元SC92F7422芯片,在波特率为115200时,通信数据有错误,是什么原因?
  答:可能是波特率设置偏差较大,修改波特率设置寄存器值可解决。

(120)使用赛元芯片,PWM关闭使能,再重新使能后,周期不一样,是什么原因?
  答:检查程序,在使能pwm时是否修改了周期。

(121)使用赛元芯片,UART1无法输出正确数据,是什么原因?
  答:可能是SSI初始化设置错误。

(122)使用赛元SC92F8463B芯片,测试骚扰功率不过,超过1DB,怎么办?
  答:可降低主频为6M进行尝试。

(123)使用赛元SC93F8433芯片,板子有时候会复位,是什么原因?
  答:可将option选择code设置从0x100开始。

(124)使用赛元SC92F7546编译时,编译报超字节错误,但编译上显示data:137,xdata=0,而SC92F7546的SRAM空间为2K,是什么原因?
  答:答:7546分内部256,外部1784bytes,其中内部分data=128bytes与idata=128bytes;用户定义时未定义xdata区,故将137bytes全都放在的data区,故报超字节错误,正确应该将一部分数据定义为xdata区。

(125)使用赛元SCW8916B芯片,水位校验不成功,是什么原因?
  答:检查校验码是否正确。

(126)使用赛元SC92F8446B芯片认证测试,骚扰功率超出2DB,判NG,是什么原因?
  答:可加调频,Fsys为8M,余量可达6DB,结果PASS。

(127)使用赛元SC92F7251芯片,UART接受数据帧出错,是什么原因?
  答:可能是程序写法问题,检查接收SBUF操作是否未在中断函数内部执行。

(128)使用赛元SC92F7320芯片,定时器中断定时流水灯,进不去中断什么原因?
  答:可能是程序问题,检测调用定时器初始化函数,是否错把定时器初始化函数放到主函数的while里面去了。

(129)使用赛元SC92F8547芯片,UART的TX口空闲时出现低电平,是什么原因?
  答:可将UART的TX口以及RX口设置为输入带上拉模式。

(130)使用赛元SC92F8547芯片,定时器中断定时250us时间,打开TK会出现定时器中断有延时情况,是什么原因?
  答:可将定时器中断优先级设为高,将TK优先级设为低,来解决。

(131)赛元提供的demo程序,发送AA串口调试助手接收不正确,是什么原因?
  答:赛元提供的demo程序是在主循环里面一直发现AA,会导致串口调试助手起始位判断错误,然后导致数据一直出错,推荐加延时进行验证。

(132)使用赛元SC92F7445B芯片,UART连续发送32bit数据会死机,是什么原因?
答:检测程序是否是发送完32bit后没有启动下一次发送,导致的死机误判。

(133)使用赛元SC92F7545芯片,仿真不了,是什么原因?
  答:检测仿真设置是否正确;检查连线是否正确;烧录口是否有连接其他东西。

(134)使用赛元SC92F8003芯片,降低主频,会影响指令运算周期吗?
  答:降低主频,指令周期的个数不变,但是每条指令执行的时间变长了。

(135)使用赛元SCW8916B芯片,MTTF测试标准是多少?
  答:芯片的测试标准是MTTF>87600 hours。

(136)使用赛元SC92F7323芯片,外部32K晶振,BTM计时偏差较大,是什么原因?
  答:检测在程序中是否频繁操作系统分频,外部时钟源,LVR等信息。

(137)相同工程文件电脑编译提示1987-2009,但在其他电脑上编译正常,是什么原因?
  答:为keil软件问题,需要重新新建工程文件来解决。

( 138)使用赛元芯片时,在stop模式下,芯片未使用的IO口如何设置?
  答:未使用的IO口设置为强推挽输出低。

(139)使用赛元SC92F7250芯片,当用UART  ,Timer1时,会影响到Timer0,是什么原因?
  答:检查在UART初始化里面是否操作了TMOD和TCOM两个寄存器,而没有使用或等于,影响了timer0的设置。

(140)使用赛元SC93F8433芯片,寄存器,没有外部中断标志位,请问芯片在外部中断产生后,是靠硬件自动完成的吗?
  答:外部中断标志是硬件自动清0的。

(141)使用赛元芯片,写eeprom为啥老是校验失败呢?
  答:写EEPROM是因为程序中操作了EEPROM,在进行校验之前芯片已经上电了,就会执行程序,执行程序就会修改EEPROM的内容,就会导致校验时失败。

(142)使用赛元SC92F7546芯片,LCD无法点亮,测试SEG口波形不正常,是什么原因?
  答:检查程序,查看RAM地址是否没有被置1,导致程序逻辑错误,导致置1未生效。

(143)使用赛元SC92F8463B芯片,UART通信,TXD口会有毛刺和不正常的低电平产生,是什么原因?
  答:可能是程序没有while循环,导致执行完以后跳转到起始地址,使得芯片复位,从而出现了奇怪的现象。

(144)使用赛元SC92F7250芯片,在12M主频下,波特率不稳、乱码多,是什么原因?
  答:12M主频下115200波特率误差大,建议换用其他波特率。

(145)使用赛元SC92F7323芯片,eeprom 对地址01写入55 无法回读,是什么原因?
  答:检查在option里是否未设置code从0x100开始的。

(146)使用赛元SC92F8003芯片,ADC采集数据不稳定,是什么原因?
  答:可能是VDD不准,可加长ADC采样转换时间,选用2.4V为基准电压。

(147)程序运行过程,VREF需切换,如何操作?
  答:可用OPINX配合OPREG操作。

(148)使用赛元SC92F7461B芯片,IIC通信出错,一直发送0x00,是什么原因?
  答:可能是硬件问题:上拉电阻选择不合适导致。

(149)使用赛元SC92F7323芯片,外部中断2无法进入中断服务函数,是什么原因?
  答:请检查程序是否开启外部中断2的服务函数。

(150)使用赛元SC92F8270芯片,计时器溢出,是指THn 和TLn所有位都是1就溢出吗?
  答:是的。

(151)使用赛元SC92F8003芯片的外部中断,有时会出现外部中断2次产生的问题,是什么原因?
  答:检查程序,是否存在定时器中断里面进行了TF0的清除动作,导致外部中断的标志被误置起,导致中断2次进入。

(152)赛元芯片flash和EEPROM初始值是多少?
  答:FLASH里面程序是不固定的,EEPROM里面是0x00。

(153)使用赛元SCW8916B芯片,5V供电,RXD通信后输入3.3V的信号,是否可以正常检测到?
  答:通过测试,可以正常通信。

(154)使用赛元SC92F7250芯片,仿真时,ADC没有数据,是什么原因?
  答:7250不支持仿真。

(155)使用赛元芯片,如果内部EEPROM坏了,然后对它进行写操作,会不会造成程序死掉?
  答: 92系列芯片会死掉,95系列芯片不会死掉。

(156)使用赛元SC92F8003芯片,定时器进不了中断,是什么原因?
  答:可能是仿真设置有误。

(157)使用赛元SC92F8545芯片,LED闪烁抖动显示,是什么原因?
  答:可能是程序中Sys_scan()函数耗时偏长所致。

(158)使用赛元芯片,定时器无法进中断,是什么原因?
  答:检查程序中定时器配置是否正确。

(159)使用赛元SC92F8462芯片,寄存器定义成idata时,仿真时无法清这个寄存器,当定义成XDATA时就可以清,是什么原因?
  答:可能是超字节,超出部分字节没有清。

(160)使用赛元SC92F8462B芯片,PWM周期不正确,是什么原因?
  答:可能是程序中PWM采样周期计算方式错误。

(161)使用赛元SC92F7321芯片,在KEIL编译界面不会出来下载的按钮,是什么原因?
  答:在Utilities框下点setting,选相应芯片型号后可解决。

(162)使用赛元芯片,仿真下是否可以实时查看watch窗口的变量值?
  答:目前仿真不支持实时查看变量值。

(163)赛元芯片PWM是否能做到100HZ?
  答:PWM不能做到100HZ,周期比较长建议可以使用定时器来做。

(164)使用赛元SC92F7250芯片,进入stop后会被反复唤醒,是什么原因?
  答:检查在休眠前看门狗是否关闭。

(165)使用赛元SC92F8003芯片,编译中RAM超过128B会报错,但实际有256B,是什么原因?
  答:赛元芯片内部RAM分为高128B和低128B,使用RAM空间高128B需要将一部分变量定义为idata区。

(166)使用赛元SC92F8463B芯片,在仿真模式下是否可以使用IIC?
  答:仿真口上的IIC在仿真模式下是不能使用的。

(167)使用赛元SC92F8003芯片,在16M主频情况下工作电压是否能到2.5V?
  答:2.5V工作电压不建议跑16M,16M下需要保证供电电压大于2.9V。

(168)使用赛元SC92F7446B芯片,程序如何加密?
  答:赛元92系列芯片是默认加密的,且芯片前256bytes禁止MOVC,用户可将关键算法放在前256bytes。

(169)赛元SC92F8547芯片,使用UART时,是否会占用定时器?
  答:使用UART0要占用定时器,使用UART1不占用定时器。

(170)赛元SC92F8446B芯片,P0.6用作外部中断, P0口的其他IO变为输入,就会一直进中断,是什么原因?
  答:其他P0口需要设为输入带上拉,否则不稳定。

(171)使用赛元空片,测stop模式下电流有50uA,是什么原因?
  答:注意将未使用的IO口设为强推挽输出低,并关闭LED。

(172)使用赛元SC92F8462B芯片,串口数据偶尔丢包,是什么原因?
  答:检查串口GPIO初始化设置是否未吻合赛元要求设计,一般建议设置为输入带上拉模式。

(173)使用赛元SC92F7323芯片,多路ADC,遇到某1路ADC值偏低,是什么原因?
  答:检查程序中是否在定时器中断或者MAIN函数内部触发了ADC转换。

(174)使用赛元SC92F7421芯片,定时器定时时间不准,是什么原因?
  答:检查是否未在定时器中断里面进行重装载。

(175)使用赛元SC92F8446B芯片,定时器捕获结果与实际不符,是什么原因?
  答:检查主频是否选错。

(176)使用赛元SC92F8446B芯片,UART通讯出错,是什么原因?
  答:将UART的TX口和RX口设置为输入带上拉。

(177)赛元SC92F8003芯片的EEPROM默认的读取值是0xff吗?
  答:赛元SC92F8003的EEPROM默认的读取值为0x00。

(178)赛元SC92F7421芯片,UART通信需要115200的波特率,计算出来后偏差较大,是什么原因?
  答:可微调主频把波特率调准。

(179)使用赛元SC95F7613芯片,外部中断无法唤醒stop模式,是什么原因?
  答:检查程序,可能是外部中断口与UART口冲突了,将UART关掉,可以进外部中断。

(180)使用赛元SC92F8462B芯片的定时器2,不管怎么改变初始值,定时时间都是8us,是什么原因?
  答:检查程序,在定时器中断里面是否没有对TF2清0。

(181)使用赛元SC92F7322芯片,将timer和外部中断0同时打开后,外部中断标志无法硬件清零,在外部中断里将外部中断0中断标志软件清零,但偶尔还是会有无法清除的情况,是什么原因?
  答:可尝试将外部中断0和外部中断1的中断标志都清除。

(182)想在外部中断函数中,启动定时器,但规格书上注意事项写了当使用定时器功能时,不要在外部中断服务函数内操作TR0、TR1、TF0、TF1。请问该如何实现操作?
  答:外部中断中不能启动定时器0和定时器1,但是可以启动定时器2。因为TR0和TR1与外部中断标志是在同一个寄存器上,如果频繁操作TR0和TR1,就有可能让TF0和TF1置低,会导致程序频繁进入外部中断。

(183)赛元SC92FW24芯片,使用UART1,进不了接收中断,是什么原因?
  答:检查程序中中断函数的中断号是否正确。

(184)使用赛元LB1010弹簧按键类型触摸学习板,用官网例程烧录应用程序后,发现触摸按键无效,是什么原因?
  答:检查烧录时,LVR设置是否低于供电电压。

(185)在SC92F7250芯片测试时,程序一直在STARTUP1里面执行不下去,是什么原因?
  答:赛元SC92F7250不能仿真,在仿真中无法执行命令语句。

(186)赛元不能仿真的芯片型号有哪些?
  答:赛元SC92F725X,SC92F735X,SC92F7308、SC92F7309都不支持仿真。

(187)使用赛元SC92F7446B芯片,仿真输出IO逻辑异常,是什么原因?
  答:可能是KEIL未正确设置成功。

(188)赛元SC92F8462B芯片,ADC采样时IO口怎样设置?
  答:建议设置为输入模式。

(189)使用赛元SC92F8363B芯片,定时器中断不准,是什么原因?
  答:检查定时中断内部函数是否过多。

(190)使用赛元SC92F7445B芯片,SSI和烧录口在同一个端口,仿真时,这两个引脚的串口能使用吗?
  答:这两个口可以共用,但是在仿真模式下不能用SSI功能。

(191)使用赛元SC92F7547芯片,IAP操作后发现数据不正确,是什么原因?
  答:检查程序,是否存在变量类型定义有误。检查程序中是否将地址变量的类型定义成了char型,导致地址错误,数据写入出错。

(192)赛元SC92F7252芯片能不能驱动LCD段码显示屏?
  答:只可驱动二分之一偏置的LCD。

(193)赛元SC92F7252单片机ADC能不能同时测三个通道的电压?
  答:可以检测多通道电压,但是需要切换,详情查阅赛元92系列MCU应用指南(赛元官网可下载)。

(194)赛元芯片,是否可用128k时钟作为系统时钟?
  答:128k时钟不可做系统时钟。

(195)使用赛元SC92F8003芯片,定时器不准,是什么原因?
  答:检查程序中是否打开了PWM中断导致。

(196)使用赛元SC92F7308芯片,如何将系统时钟选为24M?
  答:赛元SC92F7308的系统时钟不能选为24M,最高12M。

(197)使用赛元SC92F7323芯片,芯片运行异常,是什么原因?
  答:检查复位脚是否接GND导致。

(198)使用赛元SC92F8003芯片,不进STOP模式,AD转化完成标志位就可以置1,进入stop唤醒以后AD转化完成的标志位就无法置1了,是什么原因?
  答:检查程序:把唤醒放到stop下面。

(199)使用赛元SC92F8003芯片,打开定时器2的捕获功能之后,定时器1失效,是什么原因?
  答:检查定时器2中断函数中是否没有做TF2清零动作,导致定时器2一直进中断。

(200)使用赛元SC92F8446B芯片,变量不定义为XDATA就会数据出错,是什么原因?
  答:DATA超出范围。

(201)使用赛元芯片,进入仿真后不受控制,程序自动运行且无法停止,是什么原因?
  答:检查keil device界面设置是否有问题,导致仿真异常。

(202)利用赛元SC92F8003例程的外部中断1下降沿触发,第一次进入中断后,往后没有触发源触发也会自动进入中断服务函数,是什么原因?
  答:检查程序,是否在中断服务函数中操作了TF0=0导致。

(203)使用赛元芯片TWI从机模式,接收数据正常,发送数据错位,是什么原因?
  答:可将TWI中断优先级设到最高。

(204)使用赛元SC92F7323芯片,P05电平会受P00电平的影响,是什么原因?
  答:可能是为Read IO问题导致,请关闭read IO功能。

(205)使用赛元芯片,在Keil中,是不是要连接上SCLINK工具才能显示仿真界面?
  答:要接上烧录工具才能打开仿真界面。

(206)使用赛元SC92F8371芯片,仿真ROM使用超过4K以后,仿真断点打上后 ,会变白,或者断点不会停,是什么原因?
  答:仿真和ROM大小没有关系,只要是ROM不超过芯片大小就可以,原因可能为xdata超出了。

(207)赛元SC92F8363B芯片的EEPROM操作时间是多久?
  答:赛元92系列产品写EEPROM时间较长,需要1ms,95系列芯片EEPROM操作时间会到达us级,大概25us写一个Byte。

(208)使用赛元芯片,UART通信老化时间久了会出现通信出错和通信停止的现象,是什么原因?
  答:查看程序是否存在:在UART1的发送中断标志和接收中断标志位在同一个寄存器上,若进行中断标志清0时,会有误清除的概率,建议重新梳理程序,改为半双工通信,防止发送和接收相互影响。

(209)使用赛元SC92F7321芯片,程序一直复位,是什么原因?
  答:检查程序是否存在ADC转换完成标志判断方式错误,导致程序进入死循环,看门狗溢出复位。

(210)赛元烧录软件配置的参数放在了0-0xFF这段ROM区,所以才建议用户不使用0-0xFF这段地址,是吗?
  答:前0x100以前的ROM空间只能写,不能读,“赛元MCU应用注意事项”说明资料上说明是指导如何在前0x100的ROM空间对code进行加密处理。

(211)使用赛元SC92F8371芯片,如何使用TWI通信唤醒芯片?
  答:唤醒芯片需要外部中断或者是BTM,赛元SC92F8371的TWI口也是外部中断口,可以在进入stop之前开始外部中断,唤醒后设置为TWI,这样需要主机那边在需要唤醒芯片的时候给TWI口一个边沿信号,然后再启动TWI通信。

(212)使用赛元SC92F8463B芯片,仿真无法进行,是什么原因?
  答:检查是否存在双电源(外部)供电导致的无法在线仿真,仿真只能通过电脑连接烧录器进行供电,如果需要外部供电下实现仿真功能,需要先使用烧录器供电使芯片进仿真模式,然后再接入外部电源,然后再去除到烧录器的VDD引线;

(213)使用赛元芯片,UART通讯出错,是什么原因?
  答:请检查是否通讯口没有设置为输入带上拉所导致,UART的通信口需要设置为输入带上拉模式,这样才能保证在空闲模式下口线的状态为高电平。

(214)使用赛元SC92F8003芯片,当串口初始化后,在主循环中重新配置引脚,发数据就会异常,多出1位0x00,在主循环中不加引脚初始化,发送正常,是什么原因?
  答:串口TXD RXD初始化均要注意: 输入模式/ 带内部上拉电阻/逻辑置1。请将RX0/RX1与TX0/TX1设为输入带上拉。

(215)使用赛元SC92F7308芯片,在程序中给变量赋值,芯片工作异常,改为或等于之后才正常,是什么原因?
  答:检查在keil的code range里面是否没有设置0x100,设置之后可正常工作。

(216)使用赛元SC91F832芯片,无法进入仿真,是什么原因?
  答:赛元SC91F832不支持在线仿真。

(217)使用赛元SC92F8363B芯片,串口通信应用不正常,是什么原因?
  答:检查UART 发送/接收标志位,是否逻辑理解搞反所致。

(218)使用赛元芯片,IAP可不可以在CMP或外部中断中进行?
  答:可以。

(219)使用赛元SC92F7546芯片转赛元SC92F7446B芯片, 用SC92F7446B时P16没有高电平输出,SC92F7546正常,是什么原因?
  答:SC92F7446B有read IO功能,关闭read IO可正常。

(220)使用赛元92系列芯片转95 系列CODE,程序数码管显示逻辑不受控,是什么原因?
  答:可能是外部中断内部操控了TR1,需要手动清外部中断标志位。

(221)使用赛元SC92F8370芯片,串口输出乱码,是什么原因?
  答:可能是串口TXD在发送过程,存在其他地方也操控了TXD导致。

(222)使用赛元SC92F8361B芯片,只定义了50多个char型的变量,data空间却占用了80多个,是什么原因?
  答:检查程序,是否使用const关键字定义code类型的变量,IAR是用const,keil C51定义code类型的常量要用code关键字,否则变量是存放在data区的。

(223)使用赛元SC92F7351芯片,为何不能进入仿真?
  答:赛元SC92F7351无在线仿真功能。

(224)使用赛元SC92F7323芯片,进入STOP模式后,单片机引脚还有信号输出,是什么原因?
  答:检查在STOP模式下,是否将芯片未使用的IO口设置为高阻态模式,建议设为强推挽输出低。

(225)使用赛元SC92F7421芯片,用SSI做UART使用,芯片主频16M,9600波特率,发送一个Byte比较慢,需要1ms,是什么原因?
  答:9600的波特率本来发送一个byte大概就是1ms,9600波特率代表的意思是9600bit/S,也就是1S发送9600个bit为,1byte数据加上起始位和结束位一共是10个bit,需要9600us,UART协议就是这样,与芯片无关。

(226)使用赛元SC92F8546芯片,IAP读取数据异常,是什么原因?
  答:检查变量定义是否错误。

(227)赛元95系列MCU前256B是否限制操作MOVC?
  答:95系列前256B无限制。

(228)使用赛元SC92F7252芯片的ADC程序,转换到赛元SC92F7445上就不正常,程序会死在等待转换完成那里,是什么原因?
  答:两颗芯片的ADC转换完成标志位不一样,写法上要做更改。

(229)使用赛元SC91F8322芯片做触摸应用,KEIL编译时RAM未超,但ROM超出,如何压缩触摸库code?
  答:触摸库code无法压缩,可通过调整Keil设置来优化,option设置中C51选项下level:设为9,Emphasis:设为favorsize。

(230)使用赛元SC92F8003芯片,主频选16M,波特率设置为9600,UART通讯异常,是什么原因?
  答:可能是波特率误差影响了通讯,建议改为8M,波特率9600。

(231)使用赛元bootloader升级程序,升级成功之后,用户程序不运行,是什么原因?
  答:检查APP程序是否从0x700开始,更新的时候是全部code更新,改为从0x700开始更新。

(232)赛元95系列芯片是否可允许操控LDROM的1K可作为EEPROM?
  答:不允许此做法。

(233)使用赛元芯片,程序中出现变量无法赋值,是什么原因?
  答:可能是DATA溢出导致,另外注意赛元芯片前256bytes空间是无法进行MOVC操作的。


附件下载如下:

赛元MCU常见(编译)应用问题解决方案.pdf (552.98 KB)








相关帖子

沙发
二九结狐六体| | 2019-2-28 12:31 | 只看该作者

使用特权

评论回复
评论
赛元MCU3 2019-2-28 12:38 回复TA
有什么问题么? 
板凳
3393018959| | 2019-3-22 14:44 | 只看该作者
赛元SC92F8545芯片的xdata 00H地址是不是有啥特殊啊?

我在程序里面定义了一个xdata型的变量,然后发现这个变量运行值不正确,一直在变化,然后点开m51文件,发现这个变量被定义在00H地址。然后我在keil中把xdata的00H地址屏蔽了。这个变量运行值就正确了。。。

所以请教下xdata 00h地址是有什么特殊的吗?

使用特权

评论回复
地板
knk| | 2019-5-15 23:00 | 只看该作者
86是不是写错了,STOP被唤醒之后应该是先进入唤醒STOP的中断函数,退出中断函数后才会执行进入STOP下面的指令。

使用特权

评论回复
5
13750023417| | 2020-7-27 14:19 | 只看该作者
为什么在 SC92F746xB_C.h里面 sbit    ADCEN   = ADCCON^7;这样会报'ADCCON': invalid base address错误

使用特权

评论回复
评论
赛元MCU3 2020-7-27 18:19 回复TA
这一个寄存器是不能位寻址的。 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

802

帖子

13

粉丝