搜索
bottom↓
楼主: pic_flash

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

  [复制链接]

出0入0汤圆

发表于 2016-6-12 10:15:12 | 显示全部楼层
GunGun 发表于 2016-6-4 08:10
setup_adc (ADC_CLOCK_INTERNAL|ADC_TAD_MUL_0) ;
关于这个,在帮助文件里有以下的描述
Configures one of  ...

非常感谢你的回答,我想请问下能否根据我列的那些代码,帮我列下计算进中断的时钟周期的计算公式。还有你回答的这段也看不大明白,请指教,谢谢

出0入0汤圆

发表于 2016-6-12 10:16:31 | 显示全部楼层
piccode 发表于 2016-6-8 20:03
SETUP_ADC(ADC_CLOCK_DIV_32);//转换时间设定
                     SETUP_ADC ...

我在195楼列出的问题,能帮我指教下吗,谢谢了

出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-7-23 16:10:33 | 显示全部楼层
感谢pic_flash的分享!

出0入0汤圆

发表于 2016-7-24 10:14:34 | 显示全部楼层
突然发现这个软件没有办法装在MPLABX3.0上?

出0入4汤圆

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

请教,LZ搞过24FJ32么,关于USB的,不知如何入手啊。怎么分host或者从模式?

出0入0汤圆

发表于 2016-9-16 14:14:37 | 显示全部楼层
请教:CCS PIC MODBUS库有哪位高手用过,发个例程。谢谢!

出0入0汤圆

发表于 2016-10-14 11:18:46 | 显示全部楼层
感谢分享,期待分享最新的CCS,喜欢用CCS

出0入0汤圆

发表于 2016-11-14 09:24:32 | 显示全部楼层

出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-15 08:22:33 | 显示全部楼层
谢谢楼主!感谢分享!

出0入0汤圆

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

谢谢。谁能研究一下安装在最新版的MPLABX下?好像装不了?

出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-11-16 17:28:58 | 显示全部楼层
谢谢楼上!

出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-4 12:14:46 | 显示全部楼层
pic_flash 发表于 2016-12-4 10:27
PIC 编译器, CCS C
版本: PCWHD_V5.065  (PIC 编译器)

楼主好人呀,造福向我一样屌丝们!

出0入0汤圆

发表于 2016-12-4 18:33:38 | 显示全部楼层
谢谢LZ分享!

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

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

出0入0汤圆

发表于 2017-1-21 16:02:55 | 显示全部楼层
楼主,有没有PIC24fj128的开发光盘吗?共享一下啊!谢谢

出0入4汤圆

发表于 2017-1-21 22:33:04 | 显示全部楼层
jiang887786 发表于 2017-1-21 16:02
楼主,有没有PIC24fj128的开发光盘吗?共享一下啊!谢谢

这种有usb host的不知道能否连接rt8188?

出0入0汤圆

发表于 2017-1-22 22:17:57 | 显示全部楼层
pic_flash 发表于 2015-1-3 10:19
我最近犯了一个错误。。就是忽略了PIC 16F1827 的一个 fail-safe clock monitor。
Fail-safe clock monitor ...

因为这个问题,我们批量出去的产品全部返修了……

出0入0汤圆

发表于 2017-1-29 17:15:52 | 显示全部楼层
gmyu 发表于 2017-1-21 22:33
这种有usb host的不知道能否连接rt8188?

不知道啊,还没有入门呢!

出0入0汤圆

发表于 2017-2-11 21:54:35 | 显示全部楼层
2017年,座等LZ更新。

出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-12 17:19:10 | 显示全部楼层
谢谢LZ!

出0入0汤圆

发表于 2017-2-14 10:29:26 | 显示全部楼层
pic_flash 高手:请教个问题。我用PIC16LF1829做2个串口测试时,单个使用时都可以与上位机通信(硬件没问题)。但同时使用时,只能用 XMIT=PIN_C4,RCV=PIN_C5 。程序如下:(帮分析下)
#include <16LF1829.h>

#use delay(crystal=20000000)


#use standard_io(A)
#use standard_io(B)
#use standard_io(C)

void TestRS232PortA();
void TestRS232PortB();

void main()
{
   delay_ms(500);
   while(TRUE)
   {

       TestRS232PortA();
       delay_ms(20);
       TestRS232PortB();
       delay_ms(20);
      
       output_toggle(PIN_C0);
   }

}

void TestRS232PortA();
void TestRS232PortA()
{  
    #use RS232(BAUD=9600,XMIT=PIN_B7,RCV=PIN_B5)
   
    printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n\r");
    printf("+++++++++++++++++++++++++++++++++++++++++++++++++++\n\r");
    printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\r");
}

void TestRS232PortB();
void TestRS232PortB()
{  
    #use RS232(BAUD=9600,XMIT=PIN_C4,RCV=PIN_C5)
   
    printf("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n\r");  
    printf("+++++++++++++++++++++++++++++++++++++++++++++++++++\n\r");
    printf("///////////////////////////////////////////////////\n\r");
}

出0入0汤圆

发表于 2017-2-14 10:33:57 | 显示全部楼层
附:PIC16LF1829数据手册

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2017-2-14 11:50:07 | 显示全部楼层
仔细看了下数据手册,搞定了,如下:
#use standard_io(A)
#use standard_io(B)
#use standard_io(C)

#BIT Rx = 0x11D.7
#BIT Tx = 0x11D.2

void TestRS232PortA();
void TestRS232PortB();

void main()
{
   delay_ms(500);
   while(TRUE)
   {

       TestRS232PortA();
       delay_ms(20);
       TestRS232PortB();
       delay_ms(20);
      
       output_toggle(PIN_C0);
   }

}

void TestRS232PortA();
void TestRS232PortA()
{  
    Rx=0;Tx=0;
    #use RS232(BAUD=9600,XMIT=PIN_B7,RCV=PIN_B5)
   
    printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n\r");
    printf("+++++++++++++++++++++++++++++++++++++++++++++++++++\n\r");
    printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\r");
}

void TestRS232PortB();
void TestRS232PortB()
{  
    Rx=1;Tx=1;
    #use RS232(BAUD=9600,XMIT=PIN_C4,RCV=PIN_C5)
   
    printf("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n\r");  
    printf("+++++++++++++++++++++++++++++++++++++++++++++++++++\n\r");
    printf("///////////////////////////////////////////////////\n\r");
}

出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 09:59:08 | 显示全部楼层
pic_flash 发表于 2017-2-14 23:07
你可以用stream

16F887

pic_flash先生:这两天出差回来确认下,您教的方法可行。谢谢!新问题:如果这个时候用接收或发送中断,MCU是怎么判定的呢?

出0入0汤圆

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

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

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

出0入0汤圆

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

出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-2-18 09:16:25 | 显示全部楼层
pic_flash 发表于 2017-2-17 20:35
我找了官方的范例, 你看看。。。
下面是使用中断接收, 你熟悉了再搞发送中断

十分感谢楼主的大力支持!

出0入0汤圆

发表于 2017-2-18 21:46:50 | 显示全部楼层
chenhu2012 发表于 2017-2-18 09:16
十分感谢楼主的大力支持!

谢谢pic_flash先生!

出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 21:15:05 | 显示全部楼层
楼主威武!

出0入0汤圆

发表于 2017-3-30 21:17:25 | 显示全部楼层
如果是没地址,寄存器在PIC内是怎么控制的呢?

出0入0汤圆

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

出0入0汤圆

发表于 2017-5-12 12:53:49 | 显示全部楼层
pic_flash 先生:您有PIC芯片MODBUS通信协议的例子吗?如果有这方面的经验,请指导我下。谢谢!

出0入0汤圆

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

出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-15 08:13:55 | 显示全部楼层
pic_flash 发表于 2017-5-14 11:13
MODBUS 我没搞过, 您可以参考:
http://www.ccsinfo.com/forum/viewtopic.php?t=19306&highlight=modbus ...

谢谢LZ的支持!我先看下,捣鼓捣鼓。有问题再请教您!

出0入0汤圆

发表于 2017-5-22 14:44:56 | 显示全部楼层
pic_flash 先生:您好!我第一次用PIC24FJ128GA010芯片,定时器中断不是按我程序运行的,请帮我确认下是什么问题,谢谢!【芯片其它功能都能正常】
   #use delay(clock=20MHz, xtal=20MHz)  //MCU工作时钟设定
   setup_timer4(TMR_INTERNAL | TMR_DIV_BY_1);    //使用内部时钟,预分频1 【Timer4是16位定时器,最大计数65536】
   set_timer4(55536); //2ms   【因为是用20MHz的晶振,1次计数时间为0.2us ;0.2us*10000=2ms】
   enable_interrupts(INT_TIMER4);   //打开Timer4中断充许
   enable_interrupts(GLOBAL); //打开总中断充许

#INT_TIMER4                         //Timer4中断处理函数
  void InterruptsTimer4()
  {     
    ;   
  }

出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-23 08:39:28 | 显示全部楼层
pic_flash 先生:您好!十分感谢!可以正常运行,但有点不解:

2ms =   0.05us    *      2          *     2500    *     8
        【晶振时钟  *  机器周期  *  初始化值  *  预分频】
机器周期为什么不是4呢?

出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-5-26 19:47:39 | 显示全部楼层
明白了,谢谢楼主!

出0入0汤圆

发表于 2017-5-31 20:13:01 | 显示全部楼层
pic_flash 先生:请教个问题。PIC CCS编译器中fprintf不能正确输出浮点数且程序没有任何动作。程序如下:

H文件:
#include <24FJ128GA010.h>
#device ICSP=1
#device ADC=10
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOJTAG                   //JTAG disabled
#FUSES CKSFSM                   //Clock Switching is enabled, fail Safe clock monitor is enabled
//#FUSES HS     
#use delay(clock=40MHz, xtal=40MHz)
#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)

C文件:
#include  <TestPIC24FJ128.h>
#include  <stdlib.h>
#include  <stdio.h>

void main()
{
   delay_ms(500);
   float Z1=3.14;
   int64 Z2=0;
   while(TRUE)
   {         
      Z2 = Z1 * 10000;
      fprintf(COM1,"Z2= %lu\n\r",Z2);  
      fprintf(COM2,"X = %lu\n\r",123 );
   }
}

出0入0汤圆

发表于 2017-5-31 20:16:18 | 显示全部楼层
chenhu2012 发表于 2017-5-31 20:13
pic_flash 先生:请教个问题。PIC CCS编译器中fprintf不能正确输出浮点数且程序没有任何动作。程序如下:

H ...

输出浮点数以外的格式,没有问题。查了下资料,说是要用标准输出函数,但我已经使用了。

If fprintf() is used then the specified stream is used where printf() defaults to STDOUT (the last USE RS232).



出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 09:10:46 | 显示全部楼层
pic_flash 发表于 2017-6-2 11:29
下面是Telmah 大大的源码,他自己另外写来做64位运算的.
我没有验证过, 只是给你参考
来源: http://www. ...

PIC_FLASH先生:您好!float64没折腾出来, flaot32也能满足要求。但用” fprintf  “不能正常输出,单个串口” printf  “可正常使用。测试代码如下:
【因我必须要用2个串口,请帮我确认下,谢谢。】
C文件:
#include  <TestPIC24FJ128.h>
#include  <stdlib.h>
#include  <stdio.h>
flaot32  TestValue[ ] = {1234.56,2345.78,3456.89};
void main()
{
    delay_ms(500);
  
    while(TRUE)
    {         
      
       fprintf(COM1,"TestValue=  %4.2f \n\r",TestValue[0]);  
       fprintf(COM2,"TestValue = %4.2 f\n\r",TestValue[1]);
    }
}

出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-10 22:13:36 | 显示全部楼层
最近有点小忙,没来。顶顶!

出0入0汤圆

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

楼主,又没有新版的编译器?

出0入0汤圆

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

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

出0入0汤圆

发表于 2017-8-27 21:38:04 | 显示全部楼层
顶顶,哈...!

出0入0汤圆

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

出0入0汤圆

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

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

出0入4汤圆

发表于 2017-9-7 18:17:01 | 显示全部楼层
pic_flash 发表于 2017-9-7 17:00
你是指串口接收缓存吗? 看看你的源码?

CCS是不是只支持ICD调试啊?手上有个kit3只能在外部下载,论坛有出ICD的没有,多少钱能搞一个?

出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入4汤圆

发表于 2017-9-8 11:03:14 | 显示全部楼层
pic_flash 发表于 2017-9-7 22:49
使用CCS C 的IDE是不可以使用PICKIT3。

但是, 你可以使用MPLAB 配PICKIT3, + CCS C 编译器

谢谢,64位win7,提示要32位的jvm.dll. 搞不定,继续用MPLAB IPE。

出0入0汤圆

发表于 2017-9-8 11:52:29 | 显示全部楼层
pic_flash 发表于 2017-9-7 17:00
你是指串口接收缓存吗? 看看你的源码?


#define TxBufferSize  32   
char TxBuffer[TxBufferSize ];   //缓冲器
char UARToutLenhgs=0,TxIndexWr=0,TxIndexRe=0;

unsigned UARTputOneByteIn(char OneByte);
unsigned UARTputOneByteIn(char OneByte)
{
   if(UARToutLenhgs==TxBufferSize )  //缓冲器已满,返回0
   {
      return(0);
   }
   
   disable_interrupts(INT_TBE);       //存字节到缓冲器前关闭发送?
   UARToutLenhgs=UARToutLenhgs + 1 ;  //待发送字节数加1
   TxBuffer[TxIndexWr] = OneByte;     //发送字节数通过写指针写到缓冲器
   TxIndexWr = TxIndexWr + 1;        //写指针加1
   if(TxIndexWr >= TxBufferSize)     //判定是否越界
   {
      TxIndexW=0;
   }
   enable_interrupts(INT_TBE);   
   return(1);                        //返回发送成功标志
}


#INT_TBE
void UART1TxInterrupt()
{
   if(UARToutLenhgs>0)
   {
       UARToutLenhgs = UARToutLenhgs - 1 ;
       putc(TxBuffer[TxIndexRe]);
       TxIndexRe = TxIndexRe + 1;
       if(TxIndexRe==TxBufferSize)
       {
           TxIndexRe=0;
       }
   }
   else
   {
       disable_interrupts(INT_TBE);
   }
}

出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 09:19:23 | 显示全部楼层
pic_flash 发表于 2017-9-12 09:09
范例里面有个 EX_RS232_BUFFER.C
用内建USART, 他自动插入发送和接收缓存功能, 我个人没有使用过, 貌 ...

楼主,有新版的编译器更新吗?

出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 08:47:09 | 显示全部楼层
pic_flash 发表于 2017-9-20 20:45
更新了, 需要就下载收藏。

谢谢! 楼主.

出0入4汤圆

发表于 2017-9-21 08:59:25 | 显示全部楼层
pic_flash 发表于 2017-9-20 20:45
更新了, 需要就下载收藏。

Thanks!!!!

出0入0汤圆

发表于 2017-9-21 11:35:43 | 显示全部楼层
pic_flash 发表于 2017-9-20 20:45
更新了, 需要就下载收藏。

pic_flash, 请教一下在CCS IDE怎样设置编译器的优化级别.

出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-10-16 22:28:51 | 显示全部楼层
出差刚回来,顶顶!

出0入0汤圆

发表于 2017-11-1 23:50:39 | 显示全部楼层

出0入0汤圆

发表于 2017-11-30 19:46:34 | 显示全部楼层

出0入0汤圆

发表于 2017-12-27 17:05:39 | 显示全部楼层

出差刚回来,顶顶!

出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-1-2 19:59:27 | 显示全部楼层
谢谢楼主!

出0入8汤圆

发表于 2018-1-5 11:21:25 | 显示全部楼层
PICC, 8位机,一直没有换过或升级过。

出0入0汤圆

发表于 2018-1-25 08:02:33 | 显示全部楼层

出0入0汤圆

发表于 2018-2-22 23:26:37 | 显示全部楼层
太感谢lz了。搞picc单片机 这里是大本营!!

出0入0汤圆

发表于 2018-2-24 13:48:13 | 显示全部楼层
LZ,新年快乐!

出0入0汤圆

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

出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 08:59:52 | 显示全部楼层
整个界面就明白 了

出0入0汤圆

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


不是TI 的CCS

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2018-3-24 16:23:04 | 显示全部楼层
顶顶!

出0入0汤圆

发表于 2018-3-24 19:55:20 | 显示全部楼层
pic_flash 发表于 2017-12-27 21:17
PIC 编译器, CCS C
版本: PCWHD_V5.075  (PIC 编译器)

楼主:有没有PIC 控制电机定们方面的?

出0入0汤圆

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

试试在这里搜索找一下。。
https://www.ccsinfo.com/forum/

出0入0汤圆

发表于 2018-4-9 12:47:33 | 显示全部楼层
pic_flash 发表于 2017-12-27 21:17
PIC 编译器, CCS C
版本: PCWHD_V5.075  (PIC 编译器)

楼主, 5.078可以上传一下吗?这个编译不错,下次我打算做一个USB-ICD来玩玩.

出0入0汤圆

 楼主| 发表于 2018-4-9 21:10:00 | 显示全部楼层
PIC 编译器, CCS C
版本: PCWHD_V5.078  (PIC 编译器)
链接:https://pan.baidu.com/s/1TWVWNwWF5GdxFj9sdAtI_A
密码:lo1l

出0入0汤圆

发表于 2018-4-13 17:12:30 | 显示全部楼层
LZ威武!

出0入0汤圆

发表于 2018-4-27 19:15:38 | 显示全部楼层

出0入0汤圆

发表于 2018-5-9 19:35:24 | 显示全部楼层
看看楼主,谢谢分享。

出0入0汤圆

发表于 2018-5-19 20:46:41 | 显示全部楼层

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

本版积分规则

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

GMT+8, 2024-4-19 11:33

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

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