【交流】CCS C PIC 编译器的同好请来交流

2020-02-06 09:45发布

本帖最后由 pic_flash 于 2015-1-3 10:01 编辑

在AMO论坛, PIC 的使用者算是很少, 然而, 使用CCS C 编译器的同好, 我想更是少。。
开这帖的目的, 是看看有谁正在用, 或有谁曾经用过CCS C 。。然后, 可以讨论大家在使用CCS C 遇到的问题, 如语法, 发现臭虫, 等等的问题。

先介绍我个人, 自从2003, 我就开始用PIC, 第一个PIC 型号是16F84A, 使用的是DOS 版的 CCS C!

我曾学习过PIC basic, 但是只是很短的时间, 过后就转用CCS C, 一直用到现在, 就没有再换过。。
我也真的不会Hi-tech C, Microchip 的 XC 编译器 也没用过。。 ASM 也不会。。。

CCS C, 我想比较少人用的原因, 我个人认为是以下的原因:
1. 他不是标准的ANSI C, 其他的ANSI C 源码, 不能简单快速的转去CCS C
2. 他不支持指针 ,pointer to constant。 Pointer to RAM 是可以的
3. 臭虫多。。几乎每个版本都有臭虫! 但是臭虫也未必会影响你。。

那么, CCS C有好处吗?
1. 他简单, 容易使用, 新手很容易就上手。
2. 含有丰富的内建功能, 函数等等
3. 含有很多范例程序
4. 因为他不是ANSI C, 也不支持Pointer to constant 的关系, 他不考虑太多的相容性, 所以, 他的编译结果是很优越的,产生的hex 是比较小。

不要小看CCS C, 很多老外都是使用CCS C, 而且都是高手中的高手。。。
我最喜欢的就是逛 CCS 论坛, 里面高手如云,偶像如PCM Programmer, Ttelmah前辈等等,

General CCS C discussion
http://www.ccsinfo.com/forum/viewforum.php?f=1

Code Library (源码资源很丰富)
http://www.ccsinfo.com/forum/viewforum.php?f=2

在CCS C 论坛, 不要随意开帖,先用搜索的功能, 如果没有答案, 才开帖询问。


希望CCS C 同好, 可以一起来交流, 谈谈你们的使用经验, 或分享心得。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
99条回答
gwj221
1楼-- · 2020-02-12 14:27
挺好的 , 准备试用 ,看看
huarana
2楼-- · 2020-02-12 15:08
不是标准c这点比较头疼啊 - -

现在的工作要经常使用不同内核的单片机。。

代码基本复用了。
pic_flash
3楼-- · 2020-02-12 20:25
本帖最后由 pic_flash 于 2015-1-13 13:34 编辑
huarana 发表于 2015-1-13 10:48
不是标准c这点比较头疼啊 - -

现在的工作要经常使用不同内核的单片机。。


是的, CCS C 就不适合你用了。。

你在另一帖问到, 如何预设 EEprom 的值, 给大家参考~~

下面是CCS C 的写法, 假设是16F1827


  1. #include <16F1827.H>
  2. #fuses   INTRC_IO,nolvp,PROTECT,noWDT,put,brownout,nomclr,cpd
  3. #use delay(clock=16000000)

  4. //#rom  0x2100=  // for 16F628A
  5. #rom  0xF000={ // for 16F1826
  6. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  7. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  8. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  9. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  10. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  11. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  12. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  13. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  14. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  15. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  16. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  17. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  18. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  19. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  20. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  21. }

  22. void main()
  23. {
  24.    While(1)
  25.    {
  26.    
  27.    }
  28. }
复制代码

这些EEprom 值是编译后直接含在hex 里, 在pickit2 烧录时, 会默认写入EEprom。
pic_flash
4楼-- · 2020-02-13 01:19
 精彩回答 2  元偷偷看……
huarana
5楼-- · 2020-02-13 05:48
pic_flash 发表于 2015-1-13 13:20
是的, CCS C 就不适合你用了。。

你在另一帖问到, 如何预设 EEprom 的值, 给大家参考~~


嗯,多谢。那个问题解决了,  pic.h头文件里有相应的库,调用了一下就好了。

另外,其实我还是蛮喜欢  你所说的内建库的使用的 ,就像 set_in_hi(RS);  set_in_in(RS);  ,因为这样移植起来非常方便,任何单片机,都只需要写几个宏就可以移植过去。

尤其是对某些io口频繁切换输入输出等等类似的情况下更是好用。  

当然 用 LED1=1;比较直观,但是有时候有需要LED1这个脚的输入输出方式改变,变成输入脚就不太好弄,  举例来说 就是 IIC 。

这也是个人习惯问题。熟练了都一样   
pic_flash
6楼-- · 2020-02-13 09:06
本帖最后由 pic_flash 于 2015-1-14 18:21 编辑
huarana 发表于 2015-1-14 10:57
嗯,多谢。那个问题解决了,  pic.h头文件里有相应的库,调用了一下就好了。

另外,其实我还是蛮喜欢   ...


I2C, 在CCS 的使用, 两种模式, 硬I2C , 或软I2C 。。

这个我就是应用他内建的功能了。。
CCS 在这些I2C USART 之类的库, 已经很成熟了,效率也高。。所以我不折腾去写自己的库。。

但是,如果是其他移植过来的源码, 也不是不可以。。只是比较麻烦移植。。
所以 , 这就是为什么CCS 鲜少人使用的关系。。这个是事实。。

I2C 的使用如下:


  1. #use i2c(master, sda=Pin_C4, scl=Pin_C3)// 告诉编译器, 你要启用I2C功能
  2. i2c_start();            // i2C 开始
  3. ack = i2c_write(0xa0);  // 写入
  4. data=i2c_read(0); //读出
  5. i2c_stop(); // I2C 结束
复制代码

一周热门 更多>