标题: STC16F40K128单片机LQFP48核心板PCB文件 使用keil C251的注意事项总结 [打印本页]

作者: 人人学会单片机    时间: 2021-1-20 12:59
标题: STC16F40K128单片机LQFP48核心板PCB文件 使用keil C251的注意事项总结
本帖最后由 人人学会单片机 于 2021-2-2 17:55 编辑




下载:
PCB文件 STC8H8K64S4U+STC16F40K128 LQFP48.zip (13.22 MB, 下载次数: 68)
STC16F40K128的数据手册超过20MB,只能放百度盘下载:https://pan.baidu.com/s/1bp4HLl9
一、编译器相关:
        1、必须安装keil C251编译器,并且,需要把STC16F的型号添加到软件安装目录,并且需要使用STC16F系列的头文件

        2、项目工程Options for Target 的配置
                A、CPU Model 选择:Source (251 native)
                B、Memory Model 选择:需要根据程序复杂程度做选择。一般选择Small:data vars far const ptr-4
                C、Code Rom Size 选择:Large,64K program。Code Rom Size 模式如果是:Huge,64K functions,16M progr,那么会导致P0口的矩阵键盘工作不正常。
        
        3、keil软件的BUG—0xfD的问题,导致了C251的文件名不能出现以下汉字:
        褒饼昌除待谍洱俘庚过糊积箭烬君魁例笼慢谬凝琵讫驱三升数她听妄锡淆旋妖引育札正铸佚冽邶
        埤荦蔟摭啐帻猃恺泯潺妪纨琮椠辇挲臊忑睚铨稞瘕颀螨簖酏觚鳊鼾        

二、芯片接口相关:
        1、除P30 、P31,其余IO口默认都是高祖模式,需要配置IO口模式才能正常使用。

        2、LQFP48的第16脚不同:STC15W是P5.5,STC16F是电压参考脚ADC_VRef+。

        3、和STC8H8K一样,STC16F LQFP48 也没有P1.2,用P4.2来控制NRF24L01_CSN


三、C251的语法与STC16F的寄存器:
        1、xdata 的变量,必须是写成 static u8 xdata count;  而不能写成 static xdata u8 count;

        2、C251的函数中定义的 指向code的指针变量,需要填写数据的存储位置code。例如:(u8 Reg,u8 code *pBuf,u8 len),表示查找code 数组。

        3、16位全局变量保存到xdata区间后,如果不能正常读写,调整Memory Model选择:Large,xdata vars far const ptr-4。也有可能选择Small:data vars far const ptr-4

        4、带参函数赋值时,不支持+-*/ 符号,例如 OLED_Write_Reg(0xb0+PAGE);   改成OLED_Write_Reg(0xb0|PAGE); 即可。加号改成 按位或

        5、STC16F需要在主函数第一句写  WTST=0;  让CPU执行单指令,让CPU速度正常

        6、STC16F需要把AUXR的 EXTRAM位写1,才能读写xdata存储空间。


四、其他
        1、WS2812、DS18B20、LCD1602等 需要短暂延迟的代码 需要增加延迟_nop_();的数量

        2、ADC的寄存器不一样 需要仔细修改,STC15W是内置参考电压。STC16F是ADC_VRef+做参考电压。没有P1.2,ADC脚是P5.4。如果是实时测量ADC,关闭电源会严重影响采集结果。

        3、IIC 函数  每次时钟上升沿之前 加一句 IIC_Delay();延迟。

        4、STC16F单片机的PWM的寄存器,和STC8H8K的PWM寄存器兼容。但是和STC15W的PWM寄存器完全不同。需要全部重新改写。



作者: hu_jia168    时间: 2022-5-16 23:38
编译器都不一样了
作者: 田贺    时间: 2022-5-18 20:18
感谢分享!这下可以少走很多弯路了。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1