搜索
bottom↓
回复: 439

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

  [复制链接]

出0入0汤圆

发表于 2015-1-3 09:59:14 | 显示全部楼层 |阅读模式
本帖最后由 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 同好, 可以一起来交流, 谈谈你们的使用经验, 或分享心得。。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2015-1-3 10:19:50 | 显示全部楼层
我最近犯了一个错误。。就是忽略了PIC 16F1827 的一个 fail-safe clock monitor。
Fail-safe clock monitor 是一些PIC芯片的新功能, 就是当晶振发生错误后, 启动内部的Internal Oscillator。

如果, 不打算使用这个fail-safe clock monitor, 最好是把他关闭。

我的一个汽车安防产品, 之前是使用16F628A的, 后来转用16F1827, 就只是把源码略做修改, 就出货了。
最近, 客户的客户有投诉, 产品会死机。。

经过检查后, 发现当用手去触摸16F1827 的16脚, 接着, 发现PIC 的反应变得异常的缓慢。。
本来是16Mhz, 正常时LED 闪灯只是0.5~1秒, 现在变成几十秒。。变得超级慢~~

过后想起, 很可能是Fail-safe clock monitor,就看看资料手册, 可以在Fuse 里面关闭。
再查看CCS C 16F1827.h


  1. //////// Program memory: 4096x14  Data RAM: 368  Stack: 16
  2. //////// I/O: 16   Analog Pins: 12
  3. //////// Data EEPROM: 256
  4. //////// C Scratch area: 77   ID Location: 8000
  5. //////// Fuses: LP,XT,HS,RC,INTRC_IO,ECL,ECM,ECH,NOWDT,WDT_SW,WDT_NOSL,WDT
  6. //////// Fuses: PUT,NOPUT,NOMCLR,MCLR,PROTECT,NOPROTECT,CPD,NOCPD,NOBROWNOUT
  7. //////// Fuses: BROWNOUT_SW,BROWNOUT_NOSL,BROWNOUT,CLKOUT,NOCLKOUT,NOIESO
  8. //////// Fuses: IESO,NOFCMEN,FCMEN,WRT,WRT_800,WRT_200,NOWRT,PLL_SW,PLL
  9. //////// Fuses: NOSTVREN,STVREN,BORV25,BORV19,DEBUG,NODEBUG,NOLVP,LVP
  10. ////////
复制代码

在第21行, 找到这个Fuse NOFCMEN, 加入到程序的Fuse里, 问题就解决了。

修改后的Fuse

  1. #include <16F1827.H>
  2. #fuses   HS, nolvp, PROTECT, WDT, put, brownout, nomclr, NOFCMEN
  3. #use delay(crystal=16MHz, clock=16MHz, restart_wdt)
复制代码


希望PIC 同好, 要注意这个Fuse, 不要犯和我同样的错误哦~

出0入0汤圆

 楼主| 发表于 2015-1-3 11:30:59 | 显示全部楼层
我个人在写代码时, 常常会写了几行, 就按 <Alt>+<C> 做编译, 如果有错误, 马上就纠正。
CCS C, 每次编译时, 会弹出这个编译成功的提示, 并默认停留三秒:



这三秒的提示, 很烦人, 我一般是去掉。。
按照以下的方法,
1. 点击Option
2. 点击Project
3. 点击Output Files
4. 找到Compile Window up,No Error 那项, 改去 : No



那么, 以后编译后, 编译成功的提示只是一闪而过了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2015-1-3 14:03:37 | 显示全部楼层
szxszx 发表于 2015-1-3 13:50
谢谢楼主提供的好资料,CCS支持的元件多吗

超多的,PIC12, PIC16, PIC18, PIC24, DSPIC 都几乎支持的。。
不然你说说要什么芯片,我查看支持不?

出0入0汤圆

 楼主| 发表于 2015-1-3 14:05:26 | 显示全部楼层
wxws 发表于 2015-1-3 13:38
也想用这个的,不过国内好象真的很少见

我要提醒你的是, 他不是ANSI C, 你如果要把其他的C 源码转去CCS C, 你可能要折腾一番的。。
但是, 你一旦上手, 你就不想换了。。。

出0入0汤圆

 楼主| 发表于 2015-1-3 14:35:17 | 显示全部楼层
本帖最后由 pic_flash 于 2015-1-3 21:49 编辑
firstelec 发表于 2015-1-3 13:31
楼主写的很好啊。
我用CCS有5年了,一开始使用picc16,编译出来的结果有时候也是莫名其妙的。后来发现了CCS ...


是的, Bug 很多。。。只是看你会不会碰上。。
Bug 有时是影响特定的芯片而已。。

我曾经遇到的Bug 是 , EEProm 不能写入。。 (当然后来的版本修正了)
还有一个是 4.xxx 版本时 , 在16F1827 的ADC ,
set_adc_channel(0) //这个内建的功能不正常,
发现后, 我就编写自己的代码, 就解决了。。
当然后来的版本就修正了。。

我的经验是, 以后当你遇到“不按牌理出牌”的结果, 除了检查你的硬体的合理设计外,你就要查看 .lst, 看看ASM代码有没有不合理的地方, 也去CCS 论坛搜索下, 如果有人碰到同样的问题, 你就知道是臭虫了。。
另一个方法是, 你使用其他的版本编译看看。。。

我曾经很长的一段时间, 是使用4.xxx 版本的, 用着高兴, 我其实都不太想升级。。
也要养成一个习惯, 要在你的程序注明, 这个程序是用什么版本的CCS C 编译的, 当有问题时, 能够追溯回。。

其实, 我个人很喜欢的一个CCS C 版本是V3.249, 这个版本是公认最稳定的版本。。能支持到16F628A, 但是新的芯片如 16F18xx, 16F19xx, 12F1xxx 的就不支持了。
版本5.xxx, 其实也是最近才使用的。。


出0入0汤圆

 楼主| 发表于 2015-1-3 21:40:57 | 显示全部楼层
chenhu2012 发表于 2015-1-3 15:39
CCS C 版本V3.24能否共享一下,谢谢!想体验下稳定的版本。

CCS PCWH 3.249
链接:
http://pan.baidu.com/s/1bnAiZ6Z
密码:67g9

喜欢的就收藏吧。。

出0入0汤圆

 楼主| 发表于 2015-1-4 13:48:45 | 显示全部楼层
本帖最后由 pic_flash 于 2015-1-4 13:56 编辑
abutter 发表于 2015-1-4 11:27
如果写的是小工程,我觉得不错;如果大工程,因为大部分代码都不从头写,那么移植就非常重要了。 ...


是的,完全赞同, 因为不是ANSI C, 移植是很折腾的。。

出0入0汤圆

 楼主| 发表于 2015-1-4 13:51:31 | 显示全部楼层
yanghc 发表于 2015-1-4 12:59
PIC CCS C用的人少,交流困难。

这就是我开帖的原因之一。。我也不知道坛上有谁在用, 先互相认识, 以后有问题时, 也懂得要找谁去。。

出0入0汤圆

 楼主| 发表于 2015-1-4 14:09:03 | 显示全部楼层
因为CCS C 含有丰富的内建功能, 丰富的驱动程序, 他会有一些缺点。。

比如,我今天要做一个TCP/IP 相关的项目, 我会很直接依赖和调用CCS C 提供的驱动程序。
我只要懂得如何应用, 我实际是不明白TCP/IP 内部是怎样搞的, 但是能把项目完成就是了。
变成, 知其然, 不知所以然~ 不会激发你去深入研究什么是TCP/IP

我是这么想的, 我们使用CCS C编译器, 不就是为了快速开发吗? CCS C 就正是一个工具, 利用他, 省心多了。。

但是, 我知道有一个老外。。。
他也是CCS C 的高手, 但是, 他是最不喜欢使用内建功能的人。。
比如, 要输出文字到串口

  1. #use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1,stream=port1, ERRORS)
  2. printf("HiThere");
复制代码

就两行, 就这样就完成了, 但是他就是不要。

他认为, 他不知道printf 里的内部代码是什么, 所以拒绝使用。。呵呵

出0入0汤圆

 楼主| 发表于 2015-1-4 14:22:19 | 显示全部楼层
abutter 发表于 2015-1-4 14:08
只有很纯的电子工程师才能老这样吧,呵呵。


是的, 没有错。。我算是很纯的,“怪咖”之一 ~~在一楼我都大概交代我的背景了。。呵呵

因为习惯了, 都只是用PIC, 不理价格的话, PIC 是最齐全,比较可靠稳定的单晶片。。

出0入0汤圆

 楼主| 发表于 2015-1-4 14:31:10 | 显示全部楼层
本帖最后由 pic_flash 于 2015-1-4 14:36 编辑
CHEN_LIU 发表于 2015-1-4 14:18
CCS 以前用过,开始用是有点不习惯


哦。。那么现在还使用吗? 或转去 XC 系列了?  

在以前, 谈到PIC 的C编译器, 人们没有太多选择的。。

当时,Hi-Tech C 是大部分人的首选。。
接着是 CCS C, 那时还是DOS 版本的, 够老旧吧。。

HiTech C 很贵。。不是人人买的起。。 (HitechC 已经被Microchip 并购了, 变成现在的XC 系列)

CCS C, PCM, 价格相对便宜多了。。
所以, 很多学生都比较爱用。。

现在还有mikroC, 他也是很强大, 内建功能也很多。

出0入0汤圆

 楼主| 发表于 2015-1-4 16:43:41 | 显示全部楼层
firstelec 发表于 2015-1-4 16:29
ccs 还有一个好处,他提供了很多实际例子,你不一定马上抄袭,但是这些例子的思路是非常好的,你看了才觉得 ...

没错。。我都是通过例子程序学习的。。
学习中断 , timer , 学习如何缓冲 RS232 等等

不过, 我有把例子的 内建指令, 如
Output_high(pin_A0);

这类内建指令我没有去用的, 一般都会修改去更直接的。。

出0入0汤圆

 楼主| 发表于 2015-1-4 16:48:35 | 显示全部楼层
firstelec 发表于 2015-1-4 16:35
PIC16 PIC18一般情况下代码量不会很大吧。我感觉CCS应付绰绰有余了。

PIC12都可以。。。

就因为他不是ANSI C, 他没有遵照 16bit 的处理, 内部按照14bit 的指令优化, 产生出来的hex 是高度优化的。。

其实, CCS C 是相容97%  ANSI C 标准。

可以参考:
http://www.ccsinfo.com/downloads/ansi_compliance.pdf

出0入0汤圆

 楼主| 发表于 2015-1-4 20:19:17 | 显示全部楼层
CHEN_LIU 发表于 2015-1-4 16:50
用的多的还是Hi-Tech C这个,有新出的片子,好像不支持了。所以最近想在看看ccs,好像支持 ...

如果是已经习惯Hi-tech C的, 我不建议你跳去CCS C, 你比较适合Microchip 的XC 系列。。

不过, 你或许要付费去买。。免费版的XC 是能用, 但是免费版的编译器的结果不是最优化的。
如果你做的工程是比较复杂的,这个就有很大的影响了。。

出0入0汤圆

 楼主| 发表于 2015-1-4 22:03:33 | 显示全部楼层
DIY7777 发表于 2015-1-4 21:16
"不就是为了快速开发吗? CCS C 就正是一个工具, 利用他, 省心多了。"

非常的认同+1

是的, MikroC 也是很丰富的, 他是比较后期才有的。。。。。他有个优点就是, 他是ANSI C 哦~
谢谢你分享的MickoC

出0入0汤圆

 楼主| 发表于 2015-1-5 11:03:35 | 显示全部楼层
wxws 发表于 2015-1-5 08:30
lz 能不能写个初级教程,就是安装+编译+下载。

这个好象要专用下载器和仿真器吧。

如果你是指CCS C, 我的做法是用CCS PCWDH IDE 编写程序, 用proteus 8.1 SP1 仿真,用 PICKIT2 烧录。

CCS 是有提供他们的ICD-U64, 没有用过
我有ICD-U40, 但是,不好用。。我用过几次, 就闲置了。。

我的Pickit3 也是闲置, 最常用的Pickit2。

出0入0汤圆

 楼主| 发表于 2015-1-5 11:07:10 | 显示全部楼层
虽然pickit2 被Microchip 退役了,遇到不支持的芯片时,可以看看这个帖子。

【分享】PICKIT2- 如何烧录新型的PIC 单片
http://www.amobbs.com/thread-5515377-1-1.html

出0入0汤圆

 楼主| 发表于 2015-1-6 09:57:01 | 显示全部楼层
xd785 发表于 2015-1-6 01:12
以前用PIC,用的是PICC,当时试着用CCS,做小东西的开发确实很方便,不过用起来还是觉得不太习惯,, ...

也不是的。。其实小工程, 大工程都可以的。。
不知道你不习惯的是哪个部分? 是编译器的界面不习惯, 还是语法问题, 还是内建指令的混淆?

其实, 有一些内建指令, 我们要摒弃,不要使用。。
比如GPIO 的控制方法, 就有三种方法了。。
等有空时, 我写几个范例出来看看。。

出0入0汤圆

 楼主| 发表于 2015-1-13 13:20:15 | 显示全部楼层
本帖最后由 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。

出0入0汤圆

 楼主| 发表于 2015-1-13 13:32:23 | 显示全部楼层
之前我有提到,在CCS C, 控制I/O 有几种写法, 而且我不建议用内建的方法。
内建的方法如:
Output_high() ,Output_Low() , Output_A() 等等。。这些是CCS C独有的指令, 最好不要用 。。
原因是, 为了和其他的C 更好的相容。。

要控制I/O, 直接用写入Register 的方法, 这个写法, 其实和Hi-tech C, XC 是没有太大的分别了。。
下面是同样的功能, 就是闪在port A 的LED。

  1. // Ex1, 这个是最简单的, 你也不用理 TRIS, 编译器内部会处理TRIS
  2. #include <16F1826.h>
  3. #device *=16 ADC=10
  4. #fuses INTRC_IO, PROTECT,WDT,put,brownout,nolvp, NoMCLR, NOFCMEN
  5. #use delay(internal=16Mhz, restart_wdt)

  6. #define LED pin_A0

  7. void main()
  8. {
  9.    while(1)
  10.    {
  11.       output_high(LED);
  12.       delay_ms(500);
  13.       output_Low(LED);
  14.       delay_ms(500);
  15.    }
  16. }

  17. // Ex2, 和EX1一样 只是示范使用 #define, 可以简单的修改define 的 pin_A0 去其他的I/O
  18. #include <16F1826.h>
  19. #device *=16 ADC=10
  20. #fuses INTRC_IO, PROTECT,WDT,put,brownout,nolvp, NoMCLR, NOFCMEN
  21. #use delay(internal=16Mhz, restart_wdt)

  22. #define LED pin_A0

  23. void main()
  24. {
  25.    while(1)
  26.    {
  27.       output_high(LED);
  28.       delay_ms(500);
  29.       output_Low(LED);
  30.       delay_ms(500);
  31.    }
  32. }

  33. // Ex3, 这是用Output_bit 的控制方法
  34. #include <16F1826.h>
  35. #device *=16 ADC=10
  36. #fuses INTRC_IO, PROTECT,WDT,put,brownout,nolvp, NoMCLR, NOFCMEN
  37. #use delay(internal=16Mhz, restart_wdt)

  38. #define LED pin_A0

  39. void main()
  40. {
  41.    while(1)
  42.    {
  43.       Output_bit(LED,1);
  44.       delay_ms(500);
  45.       Output_bit(LED,0);
  46.       delay_ms(500);
  47.    }
  48. }
复制代码



Ex4, 这个是推荐的写法, 直接控制Register, 会更相容与其他的C 编译器。

  1. // Ex4, 这个推荐使用的方法, 直接控制Register, 会更相容与其他的C 编译器。
  2. #include <16F1826.h>
  3. #device *=16 ADC=10
  4. #fuses INTRC_IO, PROTECT,WDT,put,brownout,nolvp, NoMCLR, NOFCMEN
  5. #use delay(internal=16Mhz, restart_wdt)

  6. #use fast_io ( A )

  7. #byte Port_A  = 0x010C

  8. #bit LED =port_A.0  //LED 接在Port A0

  9. void main()
  10. {
  11. //              76543210
  12.    set_tris_A(0b00000000); //Port A , 全部是输出

  13.    while(1)
  14.    {
  15.       LED=1;
  16.       delay_ms(500);
  17.       LED=0;
  18.       delay_ms(500);
  19.    }
  20. }
复制代码




出0入0汤圆

 楼主| 发表于 2015-1-14 18:19:14 | 显示全部楼层
本帖最后由 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 结束
复制代码


出0入0汤圆

 楼主| 发表于 2015-1-16 19:23:55 | 显示全部楼层
CCS PCWH V5.036
链接: http://pan.baidu.com/s/1c0ngG9a
密码: gh1q

需要的可以收藏。

出0入0汤圆

 楼主| 发表于 2015-1-19 21:15:25 | 显示全部楼层
chenhu2012 发表于 2015-1-19 16:49
有哪位用PIC CCS连接过ICD3?我打算购1台ICD3,请用过的给指导下!

我没有使用ICD, 我很庆幸都能用Proteus 8 来完成除错的部分。

要用ICD 3, 请看
http://www.ccsinfo.com/newsdesk_info.php?newsdesk_id=103

然后你要下载插件以让CCS 辨认你的ICD3:
http://www.ccsinfo.com/downloads/setup_mctools.exe

上面的只是网络上找到的资讯, 不是我个人的经验。。

希望楼主成功连上ICD3后, 回来分享, 报告。

出0入0汤圆

 楼主| 发表于 2015-1-19 21:17:50 | 显示全部楼层
chenhu2012 发表于 2015-1-19 16:49
有哪位用PIC CCS连接过ICD3?我打算购1台ICD3,请用过的给指导下!

我有用过ICD-USB, 那个是CCS 出品的, 很不好用, 很慢。。不爱用, 现在变成集尘器。

出0入0汤圆

 楼主| 发表于 2015-3-1 07:41:18 | 显示全部楼层
CCS PCWH V5.042
链接: http://pan.baidu.com/s/1bnhKqBH
密码: i81s

需要的可以收藏。

出0入0汤圆

 楼主| 发表于 2015-3-1 07:44:11 | 显示全部楼层
最近正在折腾, 要做一个能加密的Bootloader, 打算从Ex_Bootloader.c 修改成我要的模式。。
好像不是那么简单。。

不知道有人完成过PIC 能加密的bootloader 吗?能分享思路吗?

出0入0汤圆

 楼主| 发表于 2015-5-11 11:40:18 | 显示全部楼层
CCS PCWH V5.045
链接: http://pan.baidu.com/s/1qWjy36G
密码: cup1
需要的可以收藏。

CCS PCWH V5.045

5.045 Another version and some more fixes from CCS

5.045  #locate now issues a warning if you locate a variable on top of another
5.045  A PIC24 problem with the < and > operators on floats with interrupts is fixed
5.045  A problem with multiple compilation units and some static variables not being zeroed is fixed
5.045  A warning in string.h has now been eliminated
5.045  A bug allocating multiple odd sized rom structures in PIC24 is fixed


Updated:  PIC12F1571
Updated:  PIC12F1572
New:      PIC16F1574
New:      PIC16F1575
New:      PIC16F1578
New:      PIC16F1579
New:      PIC16F1764
New:      PIC16F1765
New:      PIC16F1768
New:      PIC16F1769

出0入0汤圆

 楼主| 发表于 2015-5-11 11:41:32 | 显示全部楼层
gmyu 发表于 2015-4-14 14:56
顶一下楼主,有兴趣的时候看看,虽然已经用了很多年,发现很多bug。

的确, CCS的 Bug 很多。。但是很快在下个版本就修正。

出0入0汤圆

 楼主| 发表于 2015-5-11 11:57:17 | 显示全部楼层
zhikunWang 发表于 2015-5-7 23:22
以前用PICC开发,刚开始使用CCS,很是不习惯。由一个疑问,CCS编译器是如何分配全局变量和局部变量的?

...

这个我还真不知道。。或许以后找到了答案在告诉你。。
不过, CCS C有个Statistic , 里面显示了RAM 是被那个函数用去的。

出0入0汤圆

 楼主| 发表于 2015-7-9 10:20:04 | 显示全部楼层
chenhu2012 发表于 2015-7-7 13:11
一直关注这个贴,好久没人回复了!

谢谢关注哦 。。。 5.048 我下载好了, 但是一直上传不到百度盘, 一直网络异常。。
现在使用网络版上传, 希望可以上传成功。。

虽然现在是5.048 了, 但是我还是用着5.035, 用着比较踏实, 除非有需要了, 才会去更新。。

另外, 我也有个习惯, 就是在C 文件里, 有写这个是用什么版本的CCS C 编译的, 方便以后除错时, 有个依据。。不同的版本 , 有时产生出不同的hex 。。

出0入0汤圆

 楼主| 发表于 2015-7-9 10:22:52 | 显示全部楼层
ANHOME 发表于 2015-7-7 16:19
https://mega.nz/#!tMZjDJDS!S9D8AK_cKVD44Y1uPXVKOjx5OmELstUD264AAML4vj0

不过需要注册,我还没时间弄 ...

谢谢你。。
这个连接在中国能操作吗? 只是想知道而已。。
我这里(国外)下载是不需要注册。。。

出0入0汤圆

 楼主| 发表于 2015-7-9 10:24:38 | 显示全部楼层
chenhu2012 发表于 2015-5-11 16:05
谢谢楼主的无私奉献。方便的话,留个联系方式,以便交流。谢谢!

这里就是一个交流平台啊。。
私人电邮的话, 我私信你吧。。

出0入0汤圆

 楼主| 发表于 2015-7-9 10:39:52 | 显示全部楼层
这里有人用Proteus 吗?
目前是 Proteus 8.3.Sp1  demo 版本, 然后和谐。。

出0入0汤圆

 楼主| 发表于 2015-7-9 14:31:06 | 显示全部楼层
CCS PCWH V5.048
链接: http://pan.baidu.com/s/1pJ3M9Ft
密码: kjtp
需要的可以收藏。

CCS PCWH V5.048
Recent changes include:
5.048  Compiler now does type checking on EXTERNs
5.048  A compiler IDE hang problem with some complex structures is fixed

出0入0汤圆

 楼主| 发表于 2015-7-19 23:31:11 | 显示全部楼层
miscell 发表于 2015-7-10 10:09
有时用用,最新版没和谐

Proteus 8.3 Sp1 (含和谐)
链接:http://pan.baidu.com/s/1hqEQR1i
密码:qgm5

出0入0汤圆

 楼主| 发表于 2015-7-19 23:33:30 | 显示全部楼层
sanger 发表于 2015-7-10 14:04
函数内的局部变量是分配到堆栈里的还是?

这我不太清楚, 你可以在编译后, 查看 .sta  文档,或许你能看出来是怎么分配的。

出0入0汤圆

 楼主| 发表于 2015-8-8 21:28:08 | 显示全部楼层
maxking 发表于 2015-8-8 10:03
我也有个项目要用到PIC,打算用CCS。很希望能和楼主多交流。

没有问题的。。  :)

出0入0汤圆

 楼主| 发表于 2015-9-6 12:54:03 | 显示全部楼层
maxking 发表于 2015-9-4 14:47
网上的资料,提供给大家参考下。

感谢chenhu2012, Maxking 分享的资料 ~~

出0入0汤圆

 楼主| 发表于 2015-9-17 11:05:06 | 显示全部楼层
gmyu 发表于 2015-9-16 20:41
楼主知不知道怎么在最新的mplab x ide里面配置CCS编译,我以前好像自动就加进去了。现在要手动加,还加不 ...

抱歉哦。。这个我不知道。。
我没有用MPLAB 很久了。。
都是直接用CCS 的 IDE,  Proteus 模拟, 配合PICKIT2烧录 ~

出0入0汤圆

 楼主| 发表于 2015-9-17 12:36:26 | 显示全部楼层
gmyu 发表于 2015-9-17 11:10
Thank you! 还是用notepad++编辑,然后类似你的方法,kit2比kit3好么?

为什么不用CCS 带的IDE 环境呢? 那个不错啊。。

Pickit2 只是烧录用, 独立程序就能操作了。。
Pickit3 以前有独立程序, 但是不稳定, 现在不知道有没有改善。。
不然, pickit3 要挂在Mplab 使用, 太麻烦了。。

出0入0汤圆

 楼主| 发表于 2015-9-17 15:19:48 | 显示全部楼层
gmyu 发表于 2015-9-17 13:36
好的编辑器看上去更舒服一点,很多方面更专业,以前用insight。

给你发了消息,以后多交流,谢谢! ...

也没问题, 看你习惯用什么, 就用那个软件好了。。最重要是顺手。。。作业流畅。。

出0入0汤圆

 楼主| 发表于 2015-9-23 10:10:54 | 显示全部楼层
CCS PCWH V5.049
链接: http://pan.baidu.com/s/1kT6HIdx
密码: 28sk

需要的可以收藏。

Version 5.049
5.049  Added support for the new and different 24 bit GS chips and the 16F183xx chips
5.049  A problem with PIC24 function pointers inside a structure in large memory spaces is fixed
5.049  Debugger issue with some floating point numbers is fixed
5.049  Fixed a bug involving signed ints in a switch statement
5.049  An inline assembly error when using an indirect goto is fixed
5.049  Debugger now shows a full 32 bit enum as it should

Updated:  PIC12F1840
Updated:  PIC12LF1840T39A
Updated:  PIC12LF1840T48A
Updated:  PIC16F1619
New:      PIC16F18313
New:      PIC16F18323
New:      PIC16F18324
New:      PIC16F18325
New:      PIC16F18344
New:      PIC16F18345
Updated:  PIC18F85J94

出0入0汤圆

 楼主| 发表于 2015-10-9 18:00:49 | 显示全部楼层
CCS PCWH V5.050
链接: http://pan.baidu.com/s/1ntJ6iYP
密码: 5fwd

需要的可以收藏。

Version 5.050

RECENT CHANGES

5.050  Support for the new 4x chips is in
5.050  An incorrect warning concerning enum assignments is removed
5.050  A linker bug that sometimes combined global variables with the same name is fixed
5.050  Added USB and TCP/IP wizards for 24 bit parts
5.050  Fixed a bug in #USE PWM for parts with more than 6 remappable OC pins
5.050  Added a PLL_WAIT option to #use delay to wait for the PLL to start up
5.050  Fixed a bug in tx_buffer_available() where the wrong count was returned
5.050  Fixed a bug when negative number were used with %W on 24 bit parts
5.050  Added a feature to use OSCTUNE on 24 bit parts to get the requested clock speed

Updated:  PIC16F1705
Updated:  PIC16F1782
Updated:  PIC16F1783

出0入0汤圆

 楼主| 发表于 2015-10-9 18:02:14 | 显示全部楼层
ersha4877 发表于 2015-10-9 16:51
这个软件TCPIP这块的资料从那里入手,用软件配置了下,可以编译通过,但后面怎么入手啊,有这方面的资料 ...

你需要电路图是吗?

出0入0汤圆

 楼主| 发表于 2015-10-9 18:19:42 | 显示全部楼层
ersha4877 发表于 2015-10-9 16:51
这个软件TCPIP这块的资料从那里入手,用软件配置了下,可以编译通过,但后面怎么入手啊,有这方面的资料 ...

找到手上的旧资料。。
链接: http://pan.baidu.com/s/1c04Vyuc
密码: 7uag

资料适用于CCS 以下的Ethernet 开发板

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2015-10-10 09:11:46 | 显示全部楼层
ersha4877 发表于 2015-10-9 19:32
谢谢了,手头有PIC18F97J60的芯片,不知道是否有这个的资料,谢谢

上面给你的范例程序是使用 18F67J60, 你可以改去18F97J60
最重要的源码你都有了。。

标准电路如下:

祝你成功~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2015-10-16 12:11:44 | 显示全部楼层
cvi670 发表于 2015-10-15 15:41
谢谢  大家对PIC资料  分享  
我现在有个开发项目  用到PIC16F676 可以用CCs么   

强烈建议使用新颖的PIC16F1503 , 2K, 含ADC, 16Mhz
16F676 只有1K, 价格也会贵过16F1503

上面两种MCU 都可以使用CCS C 开发。

出0入0汤圆

 楼主| 发表于 2015-10-27 12:36:13 | 显示全部楼层
cvi670 发表于 2015-10-27 10:08
请问  PIC16F676  可以用  ICD2  或者  kit3  进行在线仿真么
请问  PIC16F676  可以用  ICD2  或者  kit3  进行在线仿真么
我买了这个两个  弄了两天  还是不行  总是  弹出错误

是不实际。。 676 才1K, 才14脚。。
是什么错误?


好像 需要在线 仿真的话  需要AC162052仿真头是么

那个其实是16F676-ICD, 20 脚的。。




我没有用ICD2 做仿真, 我几乎都是用Proteus 做仿真。 (虽然, Proteus不是100% 准确)

如果是新产品, 不建议用16F676。。。

如果是自己玩的就算了。。另外, 要记住 OSCCAL的值, 不要弄丢。。
建议先用烧录器读出(最后一个地址的值), 用笔写在芯片上, 如果万一在烧录过程中丢失, 还可以还原。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2015-10-29 16:23:58 | 显示全部楼层
本帖最后由 pic_flash 于 2015-10-29 18:04 编辑
cvi670 发表于 2015-10-29 10:01
恩  我明白了  想做一个  车库遥控器解码的程序


哦。。做类似PT2272 的解码吗?
那么不需要ADC, 16F630 , 16F1503 也可以了。

用Proteus 可以开发这个, 利用Pattern Generator 模拟接收机收到的遥控的信号

我曾经用这个Pattern generator,产生125Khz RFID 卡号的输出逻辑, 然后解码,可以善用这个功能。

出0入0汤圆

 楼主| 发表于 2015-11-10 10:27:19 | 显示全部楼层
cvi670 发表于 2015-11-9 22:24
你好  最近又遇到了一个问题  

我用676做的 解码程序  在一个板子上调试可以  我下载到其他一样的板子上 ...

676 的内部4Mhz , 出厂前已经调整准确的, 你有改动过OSCCAL 的数值吗?

出0入0汤圆

 楼主| 发表于 2015-11-10 12:19:48 | 显示全部楼层
cvi670 发表于 2015-11-10 11:39
调试总是不行 后来就修改了一下  但是还是不行
您觉得是哪块的问题呢

不知道。。PIC 的质量是相对稳定的, 除非损坏。。
要不就是你的源码的问题。。

方便的话, 放出源码看看。。

出0入0汤圆

 楼主| 发表于 2015-11-13 10:24:41 | 显示全部楼层
cvi670 发表于 2015-11-12 14:41
感谢您的回答  现在已经可以了  好像PIC单片机内部时钟 个体有差异  致使定时器 不能准确定时 造成的 ...

如果可以, 你使用16F1503, 就没有那种问题了。。

出0入0汤圆

 楼主| 发表于 2015-11-17 23:13:33 | 显示全部楼层
本帖最后由 pic_flash 于 2015-11-17 23:23 编辑
cvi670 发表于 2015-11-17 18:42
今天在看国产单片机时   发现了一个  问题   
因为PIC16F676我采用的是3.0V电源  是不是造成内部晶振不稳 ...


3V 是可以运行内部晶振4Mhz的。。

我看了一下手册, 是可能有误差, 考虑电压, 温度。。

如果你可以试验, 先用外部晶振试验看看,应该是要稳定运行的。。那么你的代码没有问题吧。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2015-11-17 23:24:55 | 显示全部楼层
PIC 编译器, CCS C
版本: PCWHD_V5.051  (PIC 编译器)

百度云下载:
链接: http://pan.baidu.com/s/1pJreCcj
密码: c243

Version 5.051

RECENT CHANGES
A new release of the CCS C compiler for PICmicro(r) microcontrollers
has been released. The new version is: 5.051

Recent changes include:
5.051  A linker bug affecting multiple compilation unit builds is fixed
5.051  A segmentation fault for some Linux compiles is fixed
5.051  An optimization error involving << with mixed byte and dword operands is fixed
5.051  Fixed a syntax error with spi_write4() and spi_read4() functions for 24 bit parts
5.051  Fixed a syntax error with #pin_select for some PIC18 devices
5.051  Fixed a bug when #opt compress is used on some programs
5.051  Fixed an issue with #use pwm and MCP1911x devices
5.051  The 24 bit Wizard now has a MODBUS configuration page

Updated:  PIC16F1503

出0入0汤圆

 楼主| 发表于 2015-11-22 15:09:50 | 显示全部楼层
chenhu2012 发表于 2015-11-22 11:12
楼主:您好,有没有proteus以下液晶的驱动程序(PIC CCS版),如果有,可否共享下。谢谢!

Toshiba T6963C ...

ST7920 , CFAG12864JTMI  128x64 , CCS 的驱动我有,但是, 在Proteus 模拟不到。。

Nokia 3310 的LCD 48x84, 这个我就有, Proteus也能模拟, 但是, 应该你不会要吧。。

出0入0汤圆

 楼主| 发表于 2015-11-28 09:38:39 | 显示全部楼层
haowei029 发表于 2015-11-27 02:19
你好,请问MPLAB我已经安装了,请问再装CCS的话,MPLAB能自动关联CCS吗?
我遇到PICC编译过后,下载成功 ...

我很久都没有使用MPLAB 了。。
安装后, 是CCS C 去关联 MPLAB。。

先提醒你, CCS C 不是ANSI C 标准。。 你先考虑, 再看要不要使用。

出0入0汤圆

 楼主| 发表于 2015-11-28 09:42:31 | 显示全部楼层
haowei029 发表于 2015-11-27 02:19
这个是最新的是吗?稳定不啊?

CCS C 从来都是有很多臭虫的,只是你会不会碰到而已。。
CCS C 的版本更新很快。。其实, 也不需要盲目的去更新, 只要有一个版本适合你用, 就继续使用哪个版本。。

比如, 我之前还是用着旧版本, 新版有16F1503 的更新, 我才换去最新的。

出0入0汤圆

 楼主| 发表于 2015-12-1 10:45:42 | 显示全部楼层
haowei029 发表于 2015-11-28 13:39
有点奇怪,PICC编译PIC12F609,简单的将所有IO电平配置一样,结果IO有的高有的低,实在没辙了。所以想换C ...

CCS C能用吗? 如果不能, 把你的测试源码放出来, 我看看。。

出0入0汤圆

 楼主| 发表于 2015-12-1 10:46:41 | 显示全部楼层
zmh169 发表于 2015-11-30 10:43
路过,看看热闹。没用过CCS_C,还是习惯PICC,也就是microchip的新版XC。

XC 很好。。因为是ANSI C 标准。。
CCS C 是容易上手。。

出0入0汤圆

 楼主| 发表于 2015-12-11 11:17:52 | 显示全部楼层
lyy10308211 发表于 2015-12-8 23:27
楼主,准备上手,问一个问题,ccs里面的库可以看到源码吗?就是能不能把库里面的源码修改一下,比如printf ...

不可以。。Printf 是内建指令。。我们不知道他是怎样搞的。。
但是, 你可以基于printf(), putc() 的指令, 改成你自己的 myprintf()

CCS 的Printf 指令, 不是ANSI C 标准, 所以, 你要看手册,,,

相关的指令:
printf (string)
printf (cstring, values...)
printf (fname, cstring, values...)

fprintf (stream, cstring, values...)
sprintf(string, cstring, values...);
bytes=sprintf(string, cstring, values...)

putc (cdata)
putchar (cdata)
fputc(cdata, stream)

putc_send();
fputc_send(stream);

出0入0汤圆

 楼主| 发表于 2016-1-31 18:22:11 | 显示全部楼层
PIC 编译器, CCS C
版本: PCWHD_V5.053  (PIC 编译器)

百度云下载:
链接: http://pan.baidu.com/s/1kUzXtOV
密码: cb52

Recent changes include:
5.053  A corrupted device database in the V5.052 release is fixed

Recent changes include:
5.052  Variable length argument functions now allow a single parameter
5.052  A bug with some 16 bit additions done in a call to spi_write() has been fixed
5.052  A problem with the bit order in lcd_symbol() when used with 16 bit segments is fixed

Updated:  PIC16F505
Updated:  PIC16F1829
Updated:  PIC18F25K80
Updated:  PIC18F26K80
Updated:  PIC18F45K80
Updated:  PIC18F46K80
Updated:  PIC18F65K80
Updated:  PIC18F65J94
Updated:  PIC18F66K80
Updated:  PIC18F66J94
Updated:  PIC18F66J99
Updated:  PIC18F67J94
Updated:  PIC18F85J94
Updated:  PIC18F86J94
Updated:  PIC18F86J99
Updated:  PIC18F87J94
Updated:  PIC18F95J94
Updated:  PIC18F96J94
Updated:  PIC18F96J99
Updated:  PIC18F97J94
Updated:  PIC16F1773
Updated:  PIC16F1776

出0入0汤圆

 楼主| 发表于 2016-1-31 18:23:16 | 显示全部楼层
chenhu2012 发表于 2016-1-28 08:07
LZ,你好久没更新了。期待中...

呵呵。。更新了。。下载收藏吧

出0入0汤圆

 楼主| 发表于 2016-4-26 23:23:02 | 显示全部楼层
PIC 编译器, CCS C
版本: PCWHD_V5.056  (PIC 编译器)

百度云下载:
链接: http://pan.baidu.com/s/1pLTCQeB
密码: mnne

出0入0汤圆

 楼主| 发表于 2016-4-30 11:01:44 | 显示全部楼层
PIC 编译器, CCS C
版本: PCWHD_V5.058  (PIC 编译器)

百度云下载:
链接: http://pan.baidu.com/s/1nvKTBVN
密码: xe4b

出0入0汤圆

 楼主| 发表于 2016-5-20 15:24:56 | 显示全部楼层
hswkcg 发表于 2016-5-17 20:45
楼主能开贴讲解下里面内部函数的参数大概怎么理解和使用的吗,比如说我在看手册时知道配置定时器中断时的参 ...

里面有很多的范例, 你可以参考。。
或者用他的wizard 帮你建立框架。。

出0入0汤圆

 楼主| 发表于 2016-6-2 12:35:51 | 显示全部楼层
PIC 编译器, CCS C
版本: PCWHD_V5.059  (PIC 编译器)

百度云下载:
链接: https://pan.baidu.com/s/1geUuC63
密码: 34i1

出0入0汤圆

 楼主| 发表于 2016-6-2 12:40:09 | 显示全部楼层
yemingxp2 发表于 2016-6-2 09:40
需要用到PCH compiler V5.027,请问楼主的PCWHD可以替代使用吗?

为什么要 5.027 ?
最新的版本都可以替代。。。

出0入0汤圆

 楼主| 发表于 2016-6-2 12:41:44 | 显示全部楼层
hswkcg 发表于 2016-5-31 08:54
我看别人的程序模仿的话是知道如何配置这些的,但是不是很清楚配置后具体什么含义,就像定时器配置好后, ...

你给个例子看看?

出0入0汤圆

 楼主| 发表于 2016-7-14 10:48:47 | 显示全部楼层
PIC 编译器, CCS C
版本: PCWHD_V5.061  (PIC 编译器)

百度云下载:
链接: http://pan.baidu.com/s/1i4XG7UP
密码: jmf6

出0入0汤圆

 楼主| 发表于 2016-11-15 06:06:18 | 显示全部楼层
PIC 编译器, CCS C
版本: PCWHD_V5.064  (PIC 编译器)

百度云下载:
链接: http://pan.baidu.com/s/1bpGEKuN
密码: 3uwg

出0入0汤圆

 楼主| 发表于 2016-11-16 17:14:50 | 显示全部楼层
GunGun 发表于 2016-11-15 09:00
谢谢。谁能研究一下安装在最新版的MPLABX下?好像装不了?

我没有使用MPLAB X 的经验, 不过在官网找到这个, 你参考看看

Using CCS C Compiler in MPLAB® X
http://www.ccsinfo.com/content.php?page=mplab_support

视频教学
http://www.ccsinfo.com/videos/mplabx-plugin.wmv

出0入0汤圆

 楼主| 发表于 2016-12-4 10:27:05 | 显示全部楼层
PIC 编译器, CCS C
版本: PCWHD_V5.065  (PIC 编译器)

百度云下载:
链接:http://pan.baidu.com/s/1boAZSsv
密码:aadq

出0入0汤圆

 楼主| 发表于 2016-12-18 16:23:59 | 显示全部楼层
zenghouyun 发表于 2016-12-9 21:58
我初学PIC,使用的第一个PIC单片机是PIC12F675,用一个电位器调节输出脉冲的频率,用的是PICC X8 编译器。 ...

建议使用12F1501, 比12F675 强大。

出0入0汤圆

 楼主| 发表于 2017-2-12 16:56:32 | 显示全部楼层
chenhu2012 发表于 2017-2-11 21:54
2017年,座等LZ更新。

目前是 有的是PCWHD_V5.066 。。待会 分享

出0入0汤圆

 楼主| 发表于 2017-2-12 17:15:04 | 显示全部楼层
PIC 编译器, CCS C
版本: PCWHD_V5.066  (PIC 编译器)

百度云下载:
链接:http://pan.baidu.com/s/1mhOY13E
密码:jrwl

出0入0汤圆

 楼主| 发表于 2017-2-14 23:07:41 | 显示全部楼层
本帖最后由 pic_flash 于 2017-2-14 23:08 编辑
chenhu2012 发表于 2017-2-14 11:50
仔细看了下数据手册,搞定了,如下:
#use standard_io(A)
#use standard_io(B)


你可以用stream

16F887
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,stream=port1, ERRORS, UART1 )
#use rs232(baud=1200, rcv=PIN_B0,stream=port2, ERRORS)

fprintf(port1,"\n\r11111111111111111");
fprintf(port2,"\n\r22222222222222222");

出0入0汤圆

 楼主| 发表于 2017-2-17 14:35:59 | 显示全部楼层
chenhu2012 发表于 2017-2-17 09:59
pic_flash先生:这两天出差回来确认下,您教的方法可行。谢谢!新问题:如果这个时候用接收或发送中断,M ...

我记得我还欠你一个程序范例, 那个让我整理一下。。。

我稍后发一个 UART中断的范例给你试试。。
请问你用什么PIC芯片? 我用你的型号做例子, 仿真

出0入0汤圆

 楼主| 发表于 2017-2-17 20:35:22 | 显示全部楼层
chenhu2012 发表于 2017-2-17 18:31
我用的是PIC16LF1829,230楼有数据手册。谢谢!

我找了官方的范例, 你看看。。。
下面是使用中断接收, 你熟悉了再搞发送中断

  1. #include <16F1829.h>
  2. #device *=16 ADC=10
  3. #fuses   INTRC_IO, PROTECT,NoWDT,put,NoBrownout,nolvp
  4. #use delay(internal=32Mhz, restart_wdt)
  5. #use rs232(baud=9600, xmit=PIN_B7, rcv=PIN_B5,ERRORS)


  6. #define BUFFER_SIZE 32  // 缓存32字节
  7. BYTE buffer[BUFFER_SIZE];
  8. BYTE next_in = 0;
  9. BYTE next_out = 0;


  10. #int_rda
  11. void serial_isr()
  12. {
  13.    int t;

  14.    buffer[next_in]=getc();
  15.    t=next_in;
  16.    next_in=(next_in+1) % BUFFER_SIZE;
  17.    if(next_in==next_out)
  18.      next_in=t;           // Buffer full !!
  19. }

  20. #define bkbhit (next_in!=next_out)

  21. BYTE bgetc()
  22. {
  23.    BYTE c;

  24.    while(!bkbhit) ;
  25.    c=buffer[next_out];
  26.    next_out=(next_out+1) % BUFFER_SIZE;
  27.    return(c);
  28. }


  29. void main()
  30. {

  31.    enable_interrupts(int_rda);
  32.    enable_interrupts(GLOBAL);

  33.    printf("\r\n\Running...\r\n");

  34.    while(1)
  35.    {
  36.       // 延时10秒, 输入一些字符到USART
  37.       delay_ms(10000);
  38.       
  39. //         显示收到的缓冲
  40.       printf("\r\nBuffered data => ");
  41.       while(bkbhit)
  42.       {
  43.          putc( bgetc() );
  44.       }
  45.    
  46.    }

  47. }


复制代码

出0入0汤圆

 楼主| 发表于 2017-3-30 16:55:53 | 显示全部楼层
本帖最后由 pic_flash 于 2017-3-30 16:59 编辑

今天修改客户送来的一个延时器, 看是很简单, 但是不能按要求操作。。他提供了C 源码 (HTC 编译器)。
检查后, 发现是程序臭虫, GP0,1,2 是连接 DIP 开关, DIP 的另一端接地。
这个需要上拉电阻, 原程序有启动了弱上拉。。但是, 问题出在, GP2是不支持弱上拉的, 我查了手册才知道。

因为之前的源码是按照HTC C 写的, 写到也很乱, 需要的延时又不准, 误差大。
所以我决定从新写过。。
在写的过程, 我发现不能 用set_pullup();  也不能用port_x_pullups ( ) 指令, CCS 报错。
那么就只好自己控制Pull up 了。。查了手册, 是在Option 的 bit 6.




问题是, Option 是一个没有地址的寄存器, CCS 要怎样修改OPTION 的值呢?

需要借助ASM ,方法如下,
  1. #include <12F508.H>
  2. #fuses  Intrc,noPROTECT,WDT,nomclr
  3. #use delay(clock=4000000,restart_wdt)

  4. #define set_options(value)   {#ASM         \
  5.                               MOVLW  value \
  6.                               OPTION       \
  7.                               #ENDASM}
  8.                               
  9. void main (void)
  10. {
  11.   set_options(0b10010111) ; // Bit 6=0.使能弱上拉
  12.   While(1);
  13. }
复制代码

希望上面的技巧能帮助到CCS 同好。。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2017-3-30 22:40:18 | 显示全部楼层
12F508 应该是继承相容当年老旧的12C508 ,以前12C508 是很简单的, 一个timer, I/O, 中断也没有,。。 那时编程也多是写ASM 的,写 ”OPTION” MPLAB 自动知道是什么。。后来的12F629 的 OPTION 寄存器是有地址的了。。

出0入0汤圆

 楼主| 发表于 2017-5-14 11:13:45 | 显示全部楼层
本帖最后由 pic_flash 于 2017-5-14 11:17 编辑
chenhu2012 发表于 2017-5-12 12:53
pic_flash 先生:您有PIC芯片MODBUS通信协议的例子吗?如果有这方面的经验,请指导我下。谢谢! ...


MODBUS 我没搞过, 您可以参考:
http://www.ccsinfo.com/forum/vie ... mp;highlight=modbus

http://www.ccsinfo.com/forum/vie ... mp;highlight=modbus


建议:
http://www.ccsinfo.com/forum/search.php
搜索MODBUS, 有大量的零粹范例

出0入0汤圆

 楼主| 发表于 2017-5-14 11:15:49 | 显示全部楼层
pcr386 发表于 2017-5-13 09:06
不知道是不是支持台系的高仿PIC呢。有没有相关范例?如义隆,飞凌之类的?

CCS C 是支持官方PIC 的。。至于高仿的, 如果是真高仿100%相容,那么是支持的。。

出0入0汤圆

 楼主| 发表于 2017-5-22 19:46:16 | 显示全部楼层
本帖最后由 pic_flash 于 2017-5-22 19:53 编辑
chenhu2012 发表于 2017-5-22 14:44
pic_flash 先生:您好!我第一次用PIC24FJ128GA010芯片,定时器中断不是按我程序运行的,请帮我确认下是什 ...


  1. #include <24FJ128GA010.h>
  2. #device ICSP=1
  3. #use delay(crystal=20000000)

  4. #FUSES NOWDT                    //No Watch Dog Timer
  5. #FUSES NOJTAG                   //JTAG disabled


  6. #INT_TIMER4
  7. void  timer4_isr(void)
  8. {
  9. // 2ms 中断一次

  10. }

  11. void main()
  12. {

  13.    setup_timer4(TMR_INTERNAL | TMR_DIV_BY_8, 2500);// 2.000 ms

  14.    enable_interrupts(INT_TIMER4);
  15.    enable_interrupts(INTR_GLOBAL);

  16.    while(TRUE)
  17.    {
  18.       //TODO: User Code
  19.    }

  20. }
复制代码


上面的代码, 是使用PIC24 wizard 产生是, Timer4 每2ms中断一次。。试试看。。

出0入0汤圆

 楼主| 发表于 2017-5-25 15:33:11 | 显示全部楼层
本帖最后由 pic_flash 于 2017-5-25 15:34 编辑
chenhu2012 发表于 2017-5-23 08:39
pic_flash 先生:您好!十分感谢!可以正常运行,但有点不解:

2ms =   0.05us    *      2          *     ...


PIC24 的结构和 PIC16 Fosc/4(RISC) 不一样。。
PIC24 的指令只要 2 机器周期 Fosc/2。

手册有资料:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2017-6-2 11:26:21 | 显示全部楼层
本帖最后由 pic_flash 于 2017-6-2 11:32 编辑

int64 没有弄过。。
%lu 是给long
%f 是float
printf 可能无法显示64位, 我不确定。。

你这行应该不对。。 fprintf(COM1,"Z2= %lu\n\r",Z2);
64位不知道怎样显示...

我也不知道 64位的运算结果正确吗。。可能你先显示hex?

出0入0汤圆

 楼主| 发表于 2017-6-2 11:29:30 | 显示全部楼层
本帖最后由 pic_flash 于 2017-6-2 11:35 编辑

下面是Telmah 大大的源码,他自己另外写来做64位运算的.
我没有验证过, 只是给你参考
来源: http://www.ccsinfo.com/forum/viewtopic.php?t=28815


  1. union bits64 {
  2.    int8 b[8];
  3.    int32 w[2];
  4. };
  5. typedef union bits64 int64;
  6. int64 scratch64;
  7. int1 BORROW=FALSE;
  8. #bit CARRY=0xFD8.0

  9. //Macro to add two 64bit values. Result into the first
  10. #define M_add64x64(M_a,M_b) \
  11.    #asm\
  12.    movf M_b.b[0],0\
  13.    addwf M_a.b[0],1\
  14.    movf M_b.b[1],0\
  15.    addwfc M_a.b[1],1\
  16.    movf M_b.b[2],0\
  17.    addwfc M_a.b[2],1\
  18.    movf M_b.b[3],0\
  19.    addwfc M_a.b[3],1\
  20.    movf M_b.b[4],0\
  21.    addwfc M_a.b[4],1\
  22.    movf M_b.b[5],0\
  23.    addwfc M_a.b[5],1\
  24.    movf M_b.b[6],0\
  25.    addwfc M_a.b[6],1\
  26.    movf M_b.b[7],0\
  27.    addwfc M_a.b[7],1\
  28.    #endasm
  29. //Macro as above, to subtract two 64bit values.
  30. #define M_sub64x64(M_a,M_b) \
  31.    #asm\
  32.    movf M_b.b[0],0\
  33.    subwf M_a.b[0],1\
  34.    movf M_b.b[1],0\
  35.    subwfb M_a.b[1],1\
  36.    movf M_b.b[2],0\
  37.    subwfb M_a.b[2],1\
  38.    movf M_b.b[3],0\
  39.    subwfb M_a.b[3],1\
  40.    movf M_b.b[4],0\
  41.    subwfb M_a.b[4],1\
  42.    movf M_b.b[5],0\
  43.    subwfb M_a.b[5],1\
  44.    movf M_b.b[6],0\
  45.    subwfb M_a.b[6],1\
  46.    movf M_b.b[7],0\
  47.    subwfb M_a.b[7],1\
  48.    #endasm

  49. //Macros to shift a 64bit value
  50. #define M_shiftleft64(x) shift_left(&x,8,0)
  51. #define M_shiftright64(x) shift_right(&x,8,0)
  52. //Macro to zero a 64bit value
  53. #define M_zero64(x) x.w[0]=0L;x.w[1]=0L
  54. #define M_iszero64(x) ((x.w[0]==0L)&&(x.w[1]==0L))
  55. #define bit64_set(x,i) x.b[i>>3]|=(1<<(i&7))

  56. int64 cast32x64(int32 a) {
  57.    //routine to convert a 32bit int to 64bit
  58.    int64 temp;
  59.    int8 i;
  60.    temp.w[0]=a;
  61.    //and clear the top half
  62.    temp.w[1]=0L;
  63.    return temp;
  64. }

  65. int64 I_A_LT_B(int64 a,int64 b) {
  66.    //Internal routine to _compare_ two 64 bit values
  67.    //Actually performs subtraction, and returns this, with the 'borrow'
  68.    //flag in the global variable 'BORROW'. Performs a-b, hence flag is
  69.    //set if A less than B
  70.    M_sub64x64(a,b);
  71.    if (CARRY==0) BORROW=TRUE;
  72.    else BORROW=FALSE;
  73.    return a;
  74. }

  75. int64 add64x64(int64 a,int64 b) {
  76.    //simple 64 bit addition call - returns (a+b)
  77.    M_add64x64(a,b);
  78.    return a;
  79. }

  80. int64 sub64x64(int64 a,int64 b) {
  81.    //64 bit subtraction call as above - returns (a-b)
  82.    M_sub64x64(a,b);
  83.    return a;
  84. }

  85. int64 mult32x32(int32 a,int32 b) {
  86.    //Routine to multiply two 32bit values with a 64bit result
  87.    int64 temp2;
  88.    int8 i;
  89.    //zero output
  90.    M_zero64(temp2);
  91.    //Not trying to break any records for efficiency, so all in C, and not using
  92.    //hardware multiply
  93.    //start by moving the int32, into the low half of the int64
  94.    scratch64=cast32x64(b);
  95.    //Now need to work through all 32 bits in the 'a' variable
  96.    for (i=0;i<32;i++) {
  97.       //if source bit in 'a' is one, perform addition
  98.       if (bit_test(a,i))
  99.          M_add64x64(temp2,scratch64);
  100.       //rotate the second value here
  101.       M_shiftleft64(scratch64);
  102.    }
  103.    return temp2;
  104. }

  105. int64 div64x64(int64 a,int64 b) {
  106.    //Routine to divide 'a' by 'b' in 64bit arithmetic
  107.    //returns with result, leaving remainder in the scratch64
  108.    int8 bitno=0,ctr;
  109.    int64 temp;
  110.    if (M_iszero64(b)) {
  111.       if (!M_iszero64(a)) {
  112.          //need maximum result
  113.          temp.w[0]=temp.w[1]=0xFFFFFFFF;
  114.          M_zero64(scratch64);
  115.          return temp;
  116.       }
  117.       //Else 0/0=1
  118.       M_zero64(temp);
  119.       M_zero64(scratch64);
  120.       temp.b[0]=1;
  121.       return temp;
  122.       //return 1
  123.    }
  124.    M_zero64(temp);
  125.    bitno=0;
  126.    //Now position divisor to suit find top bit in A, and rotate b till it's
  127.    //top bit is in the same position
  128.    if (a.w[1]!=0) {
  129.       for(ctr=31;!bit_test(a.w[1], ctr);ctr--) ;
  130.       //Now rotate b till it's top bit matches.
  131.       while (!bit_test(b.w[1], ctr)) {
  132.          M_shiftleft64(b);
  133.          ++bitno;
  134.       }
  135.    }
  136.    else {
  137.       for(ctr=31;!bit_test(a.w[0], ctr);ctr--) ;
  138.       bitno=ctr;
  139.       //Now rotate b till it's top bit matches.
  140.       while (!bit_test(b.w[1], ctr)) {
  141.          M_shiftleft64(b);
  142.          ++bitno;
  143.       }
  144.    }      
  145.    //bitno now stores how far b had to rotate
  146.    while (bitno) {
  147.       //Loop for bitno bits, performing subtract, shift & test
  148.       scratch64=I_A_LT_B(a,b);
  149.       if (!BORROW) {
  150.          a=scratch64;
  151.          //Set output bit if no borrow
  152.          bit64_set(temp,bitno);
  153.       }
  154.       if (M_iszero64(a)) break;
  155.       M_shiftright64(b);
  156.       bitno--;
  157.    }
  158.    scratch64=a;
  159.    return temp;
  160. }
复制代码

出0入0汤圆

 楼主| 发表于 2017-6-3 12:48:51 | 显示全部楼层
#use rs232(baud=115200,xmit=PIN_F3,rcv=PIN_F2,bits=8,stream=COM1)
#use rs232(baud=115200,xmit=PIN_F5,rcv=PIN_F4,bits=8,stream=COM2)

  fprintf(COM1,"TestValue=  %4.2f \n\r",TestValue[0]);  
  fprintf(COM2,"TestValue = %4.2f\n\r",TestValue[1]);  /// 4.2f 要连起

出0入0汤圆

 楼主| 发表于 2017-8-17 11:02:13 | 显示全部楼层
korren 发表于 2017-8-17 10:48
楼主,又没有新版的编译器?

有 5.073, 但是据说有臭虫, 就不提供了。。
其他更新的版本还没有资源

出0入0汤圆

 楼主| 发表于 2017-9-7 17:00:36 | 显示全部楼层
chenhu2012 发表于 2017-9-5 12:35
pic_flash先生:有没有PIC关于FIFO的串口发送与接收的程序,搞了半天,没折腾出来{:ti ...

你是指串口接收缓存吗? 看看你的源码?

出0入0汤圆

 楼主| 发表于 2017-9-7 22:49:48 | 显示全部楼层
gmyu 发表于 2017-9-7 18:17
CCS是不是只支持ICD调试啊?手上有个kit3只能在外部下载,论坛有出ICD的没有,多少钱能搞一个? ...

使用CCS C 的IDE是不可以使用PICKIT3。

但是, 你可以使用MPLAB 配PICKIT3, + CCS C 编译器
http://www.ccsinfo.com/downloads.php

也参考:
https://www.ccsinfo.com/faq.php?page=icd2_real_ice

出0入0汤圆

 楼主| 发表于 2017-9-12 09:09:39 | 显示全部楼层
  1. /////////////////////////////////////////////////////////////////////////
  2. ////                       EX_RS232_BUFFER.C                         ////

  3. //Comment out following define if you don't want to use TBE interrupt to
  4. //transmit data.
  5. #define USE_TX_ISR

  6. #if defined(__PCM__)
  7. #include <16F887.h>
  8. #fuses NOWDT
  9. #use delay(crystal=20MHz)
  10. #elif defined(__PCH__)
  11. #include <18F45K22.h>
  12. #fuses NOWDT
  13. #use delay(crystal=16MHz)
  14. #elif defined(__PCD__)
  15. #include <24FJ128GA006.h>
  16. #fuses NOWDT
  17. #use delay(crystal=20MHz)
  18. #endif

  19. #ifdef USE_TX_ISR
  20. #use rs232(UART1, BAUD=9600, RECEIVE_BUFFER=32, TRANSMIT_BUFFER=32, TXISR)
  21. #else
  22. #use rs232(UART1, BAUD=9600, RECEIVE_BUFFER=32, TRANSMIT_BUFFER=32)
  23. #endif

  24. void main()
  25. {
  26.    char c;
  27.    
  28.    printf("\r\nEX_RS232_BUFFER.c\r\n\n");
  29.    
  30.    enable_interrupts(GLOBAL);
  31.    
  32.    while(TRUE)
  33.    {
  34.      #ifndef USE_TX_ISR
  35.       putc_send();      //When not using the TXISR option with a HW UART
  36.                         //this needs called often to cause data be moved
  37.                         //from software buffer to HW transmit register.
  38.                         //If using a software UART it also needs called to
  39.                         //transmit data.
  40.      #endif
  41.      
  42.       if(kbhit())
  43.       {
  44.          c = getc();
  45.          putc(c);
  46.          
  47.          if(c == '\r')
  48.             putc('\n');
  49.          else if(c == '\b')
  50.          {
  51.             putc(' ');
  52.             putc(c);
  53.          }
  54.       }
  55.    }
  56. }
  57.          
复制代码


范例里面有个 EX_RS232_BUFFER.C
用内建USART, 他自动插入发送和接收缓存功能, 我个人没有使用过, 貌似CCS C 的新内建功能。
#use rs232(UART1, BAUD=9600, RECEIVE_BUFFER=32, TRANSMIT_BUFFER=32, TXISR)

可以先看看, 如果不适合, 还有其他的方法的

出0入0汤圆

 楼主| 发表于 2017-9-20 20:38:22 | 显示全部楼层
PIC 编译器, CCS C
版本: PCWHD_V5.074  (PIC 编译器)

百度云下载:
链接:http://pan.baidu.com/s/1qY0Wl6c
密码:waef

出0入0汤圆

 楼主| 发表于 2017-9-20 20:45:40 | 显示全部楼层
korren 发表于 2017-9-20 09:19
楼主,有新版的编译器更新吗?

更新了, 需要就下载收藏。

出0入0汤圆

 楼主| 发表于 2017-9-21 15:29:29 | 显示全部楼层
korren 发表于 2017-9-21 11:35
pic_flash, 请教一下在CCS IDE怎样设置编译器的优化级别.

优化是使用内建指令
#opt x
x 是1~9
9 是最小空间
1 是最快速度, 但是空间大。。

我都是使用默认的设定

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2017-12-27 21:17:43 | 显示全部楼层
PIC 编译器, CCS C
版本: PCWHD_V5.075  (PIC 编译器)

百度云下载:
链接:https://pan.baidu.com/s/1slWNC2D
密码:5m1e

出0入0汤圆

 楼主| 发表于 2018-3-7 18:52:30 | 显示全部楼层
wind2100 发表于 2018-3-6 16:06
用过CCS  TI 的MSP430 用它比较好   PIC32也能用吗?

PIC32 目前还不支持, 架构不一样, 未来不知道。。

出0入0汤圆

 楼主| 发表于 2018-3-7 18:56:52 | 显示全部楼层
wind2100 发表于 2018-3-6 16:06
用过CCS  TI 的MSP430 用它比较好   PIC32也能用吗?

TI 的CCS (Code Composer Studio ) 和本帖的CCS  (Custom Computer Service, 公司名)不一样

出0入0汤圆

 楼主| 发表于 2018-3-8 11:11:48 | 显示全部楼层
wind2100 发表于 2018-3-8 08:59
整个界面就明白 了


不是TI 的CCS

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2018-3-27 10:53:54 | 显示全部楼层
chenhu2012 发表于 2018-3-24 19:55
楼主:有没有PIC 控制电机定们方面的?

试试在这里搜索找一下。。
https://www.ccsinfo.com/forum/
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-16 01:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表