做一项目,单片机用PIC16F1829,显示是ST7920的12864LCD,9个菜单页面,一些设定按键和一个SPI,一个UART实时接收和发送数据,10个字节收发。先用汇编写,考虑到UART在BANK3,SPI在BANK4,LCD寄存器在BANK0,为了避免数据调用造成频繁BANK切换,把常用数据寄存器和标志位放在无敌的070h-07Fh,程序约1.2K,主要是字库地址码占用大量空间,RAM用了约90字节,还加了一些冗余程序保证系统稳定,实际使用个人认为系统健壮性还是不错的。
考虑到维护和升级不便,又用PICC9.83重写了一次,系统做成各个模块函数。最后编译死活不过,提示 no space for ***错误,只有释放掉我自己定义占用的070h-07Fh才行,在其他地址和BANK设置volatile则没问题,看来PICC也要调用070h-07Fh。用PICC PRO模式下9级优化,程序还有1.6K,而寄存器竟然占用了360个字节,要是RAM小的单片机就不能用了,在汇编里看了一下,BANK切换比较频繁必然实时性差,还有寄存器动态覆盖其稳定性肯定不及使用固定地址寄存器,在PIC16和PIC18上C要达到汇编的效率,确实有不小的差距,特别是对实时和紧凑性要求高的程序。虽然现在基本都是用C了,方便快捷,但有时汇编也是必须的和不能丢的。
另外赞下PIC16F1937,稳压芯片坏了,13V高压直通单片机,换掉稳压块,最后单片机还没被烧掉,太坚强了。
|