原创 PICMATE开发工具使用心得

2006-10-11 22:52 6002 14 20 分类: MCU/ 嵌入式

PICMATE2004开发工具使用心得<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


关于编译器:

如果用C语言编写程序,要安装一个第三方的编译器。如果是PIC1416系列的单片机,用PICC16。如果是PIC18系列的单片机,用PICC18


建立完项目后,在菜单——项目——编译器设置里,指明所用编译器的安装路径。


对于Hitec-PICC编译器,其中有汇编编译器“PICC Assembler”、C 原程序编译器“PICC Compiler”和连接定位程序“PICC Linker”。注意这里都是“PICC.EXE”。实际上PICC.EXE 只是一个调度管理程序,它会按照所输入的文件扩展名自动调用对应的编译器和连接器,要注意的是C 语言原程序扩展名用“.c”,汇编原程序用“.as”即可。


 


关于项目设置:

在仿真调试前,应在菜单——项目——项目属性里做好对应的设置。最重要的是设定晶振频率和类型。仿真时类型一般选择内部的Programmable Frequency


 


关于变量:

PICC 支持的基本变量类型如下:




类型


长度(位数)


数学表达


bit


1


布尔型位变量,0 1 两种取值


char


8


有符号或无符号字符变量,PICC 缺省认定char 型变量为无符号号数,但可以通过signed改为有符号字节变量


unsigned char


8


无符号字符变量


short


16


有符号整型数


unsigned short


16


无符号整型数


int


16


有符号整型数


unsigned int


16


无符号整型数


long


32


有符号长整型数


unsigned long


32


无符号长整型数


float


24


浮点数


double


24 32


 


浮点数,PICC 缺省认定double 型变量为24 位长,但可以改变编译选项改成32


1 PICC 的基本变量类型


PICC 完全支持数组、结构和联合等复合型高级变量,这和标准的C 语言所支持的高级变量类型没有什么区别。


 


关于函数:

PICC 基本上符合ANSI 标准,除了一点:它不支持函数的递归调用。其主要原因是因为PIC 单片机特殊的堆栈结构。PIC 单片机中的堆栈是硬件实现的,其深度已随芯片而固定,无法实现需要大量堆栈操作的递归算法;另外在PIC 单片机中实现软件堆栈的效率也不是很高。


PICC 在编译时将严格进行函数调用时的类型检查。最好在编写程序代码前先声明所有用到的函数类型。


PICC 可以实现C 语言的中断服务程序。中断服务程序有一个特殊的定义方法:


void interrupt ISR(void);


其中的函数名“ISR”可以改成任意合法的字母或数字组合,但其入口参数和返回参数类型


必须是“void”型,亦即没有入口参数和返回参数,且中间必须有一个关键词“interrupt


 


关于数据寄存器bank 的管理:

    PICC 把单片机中数据寄存器的bank 问题需要自己管理,因此在定义变量时必须决定这些变量具体放在哪一个bank 中。如果没有特别指明,所定义的变量将被定位在bank0除了bank0 内的变量声明时不需特殊处理外,定义在其它bank 内的变量前面必须加上相应的bank 序号。


 


关于C 和汇编混合编程

C 原程序中,如果只需要嵌入少量几条的汇编指令,PICC 提供了一个类似于函数的语句:asm(“clrwdt”); 双引号中可以编写任何一条PIC 的标准汇编指令。


如果需要编写一段连续的汇编指令,PICC 支持另外一种语法描述:用“#asm”开始汇编指令段,用“#endasm”结束。


如:    #asm


movlw 0x20


movwf _FSR


clrf _INDF


incf _FSR,f


btfss _FSR,7


goto $-3


#endasm


 


出现的各种错误提示:

当出现一连串错误提示时,最好每修改一个错误就重新编译一次。有可能一个错误就引起一连串相关错误。


(以红色表示错误或者遗漏的信息)


1


expression syntax    expected


函数格式不完整


void DealTime(void)


{   


if()


{


}


}


 


unsigned char ADType[3]={0x89,0x91,0x99};


 


2


illegal character


非法字符


TMR0=0                           //TMR0赋初值


为逗号为中文逗号


 


3


Warning[000] E:\SAKO\UPS\code\main.c 135 : function declared implicit int


警告:函数未在头文件中声明


 


4


undefined identifier: VinADResult


变量VinADResult未在函数头文件中声明


 


5


Error[000] : Can't find 0x12C words for psect rbss_1 in segment BANK1


连接器告诉你总共有0x12C300)个字节准备放到bank1 中但bank1 容量不够。只有把一部分原本定位在bank1 中的变量改放到其它bank 中才能解决此问题。


 


 


 

PARTNER CONTENT

文章评论6条评论)

登录后参与讨论

用户22591 2007-5-18 10:41

请教一下

飞利浦的 SCN68681C1A44 是 PHILIPS 的UART (通用异步接收器发送器) 解决方案 是内部存有程序的么? 有一块板子上的这个芯片坏了,但是我不知道它内部是不是有编程的?

灵活、可编程的I/O结构 是指内部存有程序么?

谢谢 bfsy@163.com

ash_riple_768180695 2006-12-18 08:40

好文。

用户1053025 2006-11-13 13:08

收到!好文章!

用户77960 2006-10-31 14:47

THANK YOU FOR YOUR SHARE!

用户478270 2006-10-20 09:22

不好意思,上次发的时候不知道为什么没发上来。今天补上~~~

用户1053025 2006-10-12 11:03

心得ni?

相关推荐阅读
用户478270 2007-11-26 15:03
Visual C++中使用gotoxy() / clrscr()等函数
#include < windows.h >void clrscr(void);void clreol(void);void clreoscr(void);void gotoxy(int ...
用户478270 2007-11-15 11:38
putchar()、getch()、getche()和getchar()函数
getch()、getche()和getchar()函数     (1) getch()和getche()函数     这两个函数都是从键盘上读入一个字符。其调用格式为:      getch(); ...
用户478270 2007-11-06 21:10
VM TOOLS安装
以ROOT身份进入Redhat linux9.0以后,会发现我们并没有真正的安装上了VMWARE TOOLS软件包,这个时候需要点击“虚拟”--》“安装虚拟工具”, mount /dev/cdrom ...
用户478270 2007-11-03 16:49
用全加器实现逻辑函数
瑞芯微电子的一道笔试题f(x1,x2,x3) = E(0,2,3,5,6,7) 试用全加器实现。 在网上搜到一篇论文讲的挺全,上传共享。但还是有点没看明白,感觉技巧性太强。...
用户478270 2007-10-18 23:01
Latchup现象和预防措施
Latch up 最易产生在易受外部干扰的I/O电路处, 也偶尔发生在内部电路Latch up 是指cmos晶片中, 在电源power VDD和地线GND(VSS)之间由于寄生的PNP和NPN双极性B...
用户478270 2007-10-18 16:42
N沟道增强型MOS管的工作原理
N沟道增强型MOS管的工作原理1.vGS对iD及沟道的控制作用<?XML:NAMESPACE PREFIX = V /><?XML:NAMESPACE PREFIX = O />...
EE直播间
更多
我要评论
6
14
关闭 站长推荐上一条 /3 下一条