PICMATE2004开发工具使用心得<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
如果用C语言编写程序,要安装一个第三方的编译器。如果是PIC14、16系列的单片机,用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”
PICC 把单片机中数据寄存器的bank 问题需要自己管理,因此在定义变量时必须决定这些变量具体放在哪一个bank 中。如果没有特别指明,所定义的变量将被定位在bank0。除了bank0 内的变量声明时不需特殊处理外,定义在其它bank 内的变量前面必须加上相应的bank 序号。
在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
连接器告诉你总共有0x12C(300)个字节准备放到bank1 中但bank1 容量不够。只有把一部分原本定位在bank1 中的变量改放到其它bank 中才能解决此问题。
用户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?