hswkcg 发表于 2016-6-12 10:15:12

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

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

hswkcg 发表于 2016-6-12 10:16:31

piccode 发表于 2016-6-8 20:03
SETUP_ADC(ADC_CLOCK_DIV_32);//转换时间设定
                     SETUP_ADC ...

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

pic_flash 发表于 2016-7-14 10:48:47

PIC 编译器, CCS C
版本: PCWHD_V5.061(PIC 编译器)

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

chenhu2012 发表于 2016-7-23 16:10:33

感谢pic_flash的分享!{:titter:}

GunGun 发表于 2016-7-24 10:14:34

突然发现这个软件没有办法装在MPLABX3.0上?

gmyu 发表于 2016-9-14 15:30:47

pic_flash 发表于 2016-7-14 10:48
PIC 编译器, CCS C
版本: PCWHD_V5.061(PIC 编译器)



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

chenhu2012 发表于 2016-9-16 14:14:37

请教:CCS PIC MODBUS库有哪位高手用过,发个例程。谢谢!

1328616904 发表于 2016-10-14 11:18:46

感谢分享,期待分享最新的CCS,喜欢用CCS

chenhu2012 发表于 2016-11-14 09:24:32

{:handshake:}

pic_flash 发表于 2016-11-15 06:06:18

PIC 编译器, CCS C
版本: PCWHD_V5.064(PIC 编译器)

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

chenhu2012 发表于 2016-11-15 08:22:33

谢谢楼主!感谢分享!

GunGun 发表于 2016-11-15 09:00:31

pic_flash 发表于 2016-11-15 06:06
PIC 编译器, CCS C
版本: PCWHD_V5.064(PIC 编译器)



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

pic_flash 发表于 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

GunGun 发表于 2016-11-16 17:28:58

谢谢楼上!

pic_flash 发表于 2016-12-4 10:27:05

PIC 编译器, CCS C
版本: PCWHD_V5.065(PIC 编译器)

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

korren 发表于 2016-12-4 12:14:46

pic_flash 发表于 2016-12-4 10:27
PIC 编译器, CCS C
版本: PCWHD_V5.065(PIC 编译器)



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

chenhu2012 发表于 2016-12-4 18:33:38

谢谢LZ分享!

zenghouyun 发表于 2016-12-9 21:53:31

我初学PIC,使用的第一个PIC单片机是PIC12F675,用一个电位器调节输出脉冲的频率,用的是PICC X8 编译器。

zenghouyun 发表于 2016-12-9 21:58:08

我初学PIC,使用的第一个PIC单片机是PIC12F675,用一个电位器调节输出脉冲的频率,用的是PICC X8 编译器。

pic_flash 发表于 2016-12-18 16:23:59

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

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

jiang887786 发表于 2017-1-21 16:02:55

楼主,有没有PIC24fj128的开发光盘吗?共享一下啊!谢谢

gmyu 发表于 2017-1-21 22:33:04

jiang887786 发表于 2017-1-21 16:02
楼主,有没有PIC24fj128的开发光盘吗?共享一下啊!谢谢

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

我要你的目光 发表于 2017-1-22 22:17:57

pic_flash 发表于 2015-1-3 10:19
我最近犯了一个错误。。就是忽略了PIC 16F1827 的一个 fail-safe clock monitor。
Fail-safe clock monitor ...

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

jiang887786 发表于 2017-1-29 17:15:52

gmyu 发表于 2017-1-21 22:33
这种有usb host的不知道能否连接rt8188?

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

chenhu2012 发表于 2017-2-11 21:54:35

2017年,座等LZ更新。{:titter:}{:titter:}{:titter:}

pic_flash 发表于 2017-2-12 16:56:32

chenhu2012 发表于 2017-2-11 21:54
2017年,座等LZ更新。

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

pic_flash 发表于 2017-2-12 17:15:04

PIC 编译器, CCS C
版本: PCWHD_V5.066(PIC 编译器)

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

chenhu2012 发表于 2017-2-12 17:19:10

谢谢LZ!{:handshake:}{:handshake:}{:handshake:}

chenhu2012 发表于 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");
}

chenhu2012 发表于 2017-2-14 10:33:57

附:PIC16LF1829数据手册

chenhu2012 发表于 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");
}

pic_flash 发表于 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");

chenhu2012 发表于 2017-2-17 09:59:08

pic_flash 发表于 2017-2-14 23:07
你可以用stream

16F887


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

pic_flash 发表于 2017-2-17 14:35:59

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

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

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

chenhu2012 发表于 2017-2-17 18:31:04

我用的是PIC16LF1829,230楼有数据手册。谢谢!

pic_flash 发表于 2017-2-17 20:35:22

chenhu2012 发表于 2017-2-17 18:31
我用的是PIC16LF1829,230楼有数据手册。谢谢!

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

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


#define BUFFER_SIZE 32// 缓存32字节
BYTE buffer;
BYTE next_in = 0;
BYTE next_out = 0;


#int_rda
void serial_isr()
{
   int t;

   buffer=getc();
   t=next_in;
   next_in=(next_in+1) % BUFFER_SIZE;
   if(next_in==next_out)
   next_in=t;         // Buffer full !!
}

#define bkbhit (next_in!=next_out)

BYTE bgetc()
{
   BYTE c;

   while(!bkbhit) ;
   c=buffer;
   next_out=(next_out+1) % BUFFER_SIZE;
   return(c);
}


void main()
{

   enable_interrupts(int_rda);
   enable_interrupts(GLOBAL);

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

   while(1)
   {
      // 延时10秒, 输入一些字符到USART
      delay_ms(10000);
      
//         显示收到的缓冲
      printf("\r\nBuffered data => ");
      while(bkbhit)
      {
         putc( bgetc() );
      }
   
   }

}


chenhu2012 发表于 2017-2-18 09:16:25

pic_flash 发表于 2017-2-17 20:35
我找了官方的范例, 你看看。。。
下面是使用中断接收, 你熟悉了再搞发送中断



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

chenhu2012 发表于 2017-2-18 21:46:50

chenhu2012 发表于 2017-2-18 09:16
十分感谢楼主的大力支持!

谢谢pic_flash先生!{:handshake:}

pic_flash 发表于 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 ,方法如下,
#include <12F508.H>
#fusesIntrc,noPROTECT,WDT,nomclr
#use delay(clock=4000000,restart_wdt)

#define set_options(value)   {#ASM         \
                              MOVLWvalue \
                              OPTION       \
                              #ENDASM}
                              
void main (void)
{
set_options(0b10010111) ; // Bit 6=0.使能弱上拉
While(1);
}

希望上面的技巧能帮助到CCS 同好。。{:smile:}


chenhu2012 发表于 2017-3-30 21:15:05

楼主威武!

chenhu2012 发表于 2017-3-30 21:17:25

如果是没地址,寄存器在PIC内是怎么控制的呢?

pic_flash 发表于 2017-3-30 22:40:18

12F508 应该是继承相容当年老旧的12C508 ,以前12C508 是很简单的, 一个timer, I/O, 中断也没有,。。 那时编程也多是写ASM 的,写 ”OPTION” MPLAB 自动知道是什么。。后来的12F629 的 OPTION 寄存器是有地址的了。。

chenhu2012 发表于 2017-5-12 12:53:49

pic_flash 先生:您有PIC芯片MODBUS通信协议的例子吗?如果有这方面的经验,请指导我下。谢谢!

pcr386 发表于 2017-5-13 09:06:37

不知道是不是支持台系的高仿PIC呢。有没有相关范例?如义隆,飞凌之类的?

pic_flash 发表于 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/viewtopic.php?t=19306&highlight=modbus

http://www.ccsinfo.com/forum/viewtopic.php?t=29537&highlight=modbus


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

pic_flash 发表于 2017-5-14 11:15:49

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

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

chenhu2012 发表于 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的支持!我先看下,捣鼓捣鼓。有问题再请教您!

chenhu2012 发表于 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()
{   
    ;   
}

pic_flash 发表于 2017-5-22 19:46:16

本帖最后由 pic_flash 于 2017-5-22 19:53 编辑

chenhu2012 发表于 2017-5-22 14:44
pic_flash 先生:您好!我第一次用PIC24FJ128GA010芯片,定时器中断不是按我程序运行的,请帮我确认下是什 ...


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

#FUSES NOWDT                  //No Watch Dog Timer
#FUSES NOJTAG                   //JTAG disabled


#INT_TIMER4
voidtimer4_isr(void)
{
// 2ms 中断一次

}

void main()
{

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

   enable_interrupts(INT_TIMER4);
   enable_interrupts(INTR_GLOBAL);

   while(TRUE)
   {
      //TODO: User Code
   }

}

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

chenhu2012 发表于 2017-5-23 08:39:28

pic_flash 先生:您好!十分感谢!可以正常运行,但有点不解:

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

pic_flash 发表于 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。

手册有资料:

chenhu2012 发表于 2017-5-26 19:47:39

明白了,谢谢楼主!

chenhu2012 发表于 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 );
   }
}

chenhu2012 发表于 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).



pic_flash 发表于 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?

pic_flash 发表于 2017-6-2 11:29:30

本帖最后由 pic_flash 于 2017-6-2 11:35 编辑

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


union bits64 {
   int8 b;
   int32 w;
};
typedef union bits64 int64;
int64 scratch64;
int1 BORROW=FALSE;
#bit CARRY=0xFD8.0

//Macro to add two 64bit values. Result into the first
#define M_add64x64(M_a,M_b) \
   #asm\
   movf M_b.b,0\
   addwf M_a.b,1\
   movf M_b.b,0\
   addwfc M_a.b,1\
   movf M_b.b,0\
   addwfc M_a.b,1\
   movf M_b.b,0\
   addwfc M_a.b,1\
   movf M_b.b,0\
   addwfc M_a.b,1\
   movf M_b.b,0\
   addwfc M_a.b,1\
   movf M_b.b,0\
   addwfc M_a.b,1\
   movf M_b.b,0\
   addwfc M_a.b,1\
   #endasm
//Macro as above, to subtract two 64bit values.
#define M_sub64x64(M_a,M_b) \
   #asm\
   movf M_b.b,0\
   subwf M_a.b,1\
   movf M_b.b,0\
   subwfb M_a.b,1\
   movf M_b.b,0\
   subwfb M_a.b,1\
   movf M_b.b,0\
   subwfb M_a.b,1\
   movf M_b.b,0\
   subwfb M_a.b,1\
   movf M_b.b,0\
   subwfb M_a.b,1\
   movf M_b.b,0\
   subwfb M_a.b,1\
   movf M_b.b,0\
   subwfb M_a.b,1\
   #endasm

//Macros to shift a 64bit value
#define M_shiftleft64(x) shift_left(&x,8,0)
#define M_shiftright64(x) shift_right(&x,8,0)
//Macro to zero a 64bit value
#define M_zero64(x) x.w=0L;x.w=0L
#define M_iszero64(x) ((x.w==0L)&&(x.w==0L))
#define bit64_set(x,i) x.b|=(1<<(i&7))

int64 cast32x64(int32 a) {
   //routine to convert a 32bit int to 64bit
   int64 temp;
   int8 i;
   temp.w=a;
   //and clear the top half
   temp.w=0L;
   return temp;
}

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

int64 add64x64(int64 a,int64 b) {
   //simple 64 bit addition call - returns (a+b)
   M_add64x64(a,b);
   return a;
}

int64 sub64x64(int64 a,int64 b) {
   //64 bit subtraction call as above - returns (a-b)
   M_sub64x64(a,b);
   return a;
}

int64 mult32x32(int32 a,int32 b) {
   //Routine to multiply two 32bit values with a 64bit result
   int64 temp2;
   int8 i;
   //zero output
   M_zero64(temp2);
   //Not trying to break any records for efficiency, so all in C, and not using
   //hardware multiply
   //start by moving the int32, into the low half of the int64
   scratch64=cast32x64(b);
   //Now need to work through all 32 bits in the 'a' variable
   for (i=0;i<32;i++) {
      //if source bit in 'a' is one, perform addition
      if (bit_test(a,i))
         M_add64x64(temp2,scratch64);
      //rotate the second value here
      M_shiftleft64(scratch64);
   }
   return temp2;
}

int64 div64x64(int64 a,int64 b) {
   //Routine to divide 'a' by 'b' in 64bit arithmetic
   //returns with result, leaving remainder in the scratch64
   int8 bitno=0,ctr;
   int64 temp;
   if (M_iszero64(b)) {
      if (!M_iszero64(a)) {
         //need maximum result
         temp.w=temp.w=0xFFFFFFFF;
         M_zero64(scratch64);
         return temp;
      }
      //Else 0/0=1
      M_zero64(temp);
      M_zero64(scratch64);
      temp.b=1;
      return temp;
      //return 1
   }
   M_zero64(temp);
   bitno=0;
   //Now position divisor to suit find top bit in A, and rotate b till it's
   //top bit is in the same position
   if (a.w!=0) {
      for(ctr=31;!bit_test(a.w, ctr);ctr--) ;
      //Now rotate b till it's top bit matches.
      while (!bit_test(b.w, ctr)) {
         M_shiftleft64(b);
         ++bitno;
      }
   }
   else {
      for(ctr=31;!bit_test(a.w, ctr);ctr--) ;
      bitno=ctr;
      //Now rotate b till it's top bit matches.
      while (!bit_test(b.w, ctr)) {
         M_shiftleft64(b);
         ++bitno;
      }
   }      
   //bitno now stores how far b had to rotate
   while (bitno) {
      //Loop for bitno bits, performing subtract, shift & test
      scratch64=I_A_LT_B(a,b);
      if (!BORROW) {
         a=scratch64;
         //Set output bit if no borrow
         bit64_set(temp,bitno);
      }
      if (M_iszero64(a)) break;
      M_shiftright64(b);
      bitno--;
   }
   scratch64=a;
   return temp;
}

chenhu2012 发表于 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>
flaot32TestValue[ ] = {1234.56,2345.78,3456.89};
void main()
{
    delay_ms(500);

    while(TRUE)
    {         
      
       fprintf(COM1,"TestValue=%4.2f \n\r",TestValue);
       fprintf(COM2,"TestValue = %4.2 f\n\r",TestValue);
    }
}

pic_flash 发表于 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);
fprintf(COM2,"TestValue = %4.2f\n\r",TestValue);/// 4.2f 要连起

chenhu2012 发表于 2017-8-10 22:13:36

最近有点小忙,没来。顶顶!

korren 发表于 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 ...

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

pic_flash 发表于 2017-8-17 11:02:13

korren 发表于 2017-8-17 10:48
楼主,又没有新版的编译器?

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

chenhu2012 发表于 2017-8-27 21:38:04

顶顶,哈...!

chenhu2012 发表于 2017-9-5 12:35:39

pic_flash先生:有没有PIC关于FIFO的串口发送与接收的程序,搞了半天,没折腾出来{:titter:}{:titter:}{:titter:}

pic_flash 发表于 2017-9-7 17:00:36

chenhu2012 发表于 2017-9-5 12:35
pic_flash先生:有没有PIC关于FIFO的串口发送与接收的程序,搞了半天,没折腾出来{:ti ...

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

gmyu 发表于 2017-9-7 18:17:01

pic_flash 发表于 2017-9-7 17:00
你是指串口接收缓存吗? 看看你的源码?

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

pic_flash 发表于 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

gmyu 发表于 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。

chenhu2012 发表于 2017-9-8 11:52:29

pic_flash 发表于 2017-9-7 17:00
你是指串口接收缓存吗? 看看你的源码?


#define TxBufferSize32   
char TxBuffer;   //缓冲器
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 = 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 + 1;
       if(TxIndexRe==TxBufferSize)
       {
         TxIndexRe=0;
       }
   }
   else
   {
       disable_interrupts(INT_TBE);
   }
}

pic_flash 发表于 2017-9-12 09:09:39

/////////////////////////////////////////////////////////////////////////
////                     EX_RS232_BUFFER.C                         ////

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

#if defined(__PCM__)
#include <16F887.h>
#fuses NOWDT
#use delay(crystal=20MHz)
#elif defined(__PCH__)
#include <18F45K22.h>
#fuses NOWDT
#use delay(crystal=16MHz)
#elif defined(__PCD__)
#include <24FJ128GA006.h>
#fuses NOWDT
#use delay(crystal=20MHz)
#endif

#ifdef USE_TX_ISR
#use rs232(UART1, BAUD=9600, RECEIVE_BUFFER=32, TRANSMIT_BUFFER=32, TXISR)
#else
#use rs232(UART1, BAUD=9600, RECEIVE_BUFFER=32, TRANSMIT_BUFFER=32)
#endif

void main()
{
   char c;
   
   printf("\r\nEX_RS232_BUFFER.c\r\n\n");
   
   enable_interrupts(GLOBAL);
   
   while(TRUE)
   {
   #ifndef USE_TX_ISR
      putc_send();      //When not using the TXISR option with a HW UART
                        //this needs called often to cause data be moved
                        //from software buffer to HW transmit register.
                        //If using a software UART it also needs called to
                        //transmit data.
   #endif
   
      if(kbhit())
      {
         c = getc();
         putc(c);
         
         if(c == '\r')
            putc('\n');
         else if(c == '\b')
         {
            putc(' ');
            putc(c);
         }
      }
   }
}
         


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

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

korren 发表于 2017-9-20 09:19:23

pic_flash 发表于 2017-9-12 09:09
范例里面有个 EX_RS232_BUFFER.C
用内建USART, 他自动插入发送和接收缓存功能, 我个人没有使用过, 貌 ...

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

pic_flash 发表于 2017-9-20 20:38:22

PIC 编译器, CCS C
版本: PCWHD_V5.074(PIC 编译器)

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

pic_flash 发表于 2017-9-20 20:45:40

korren 发表于 2017-9-20 09:19
楼主,有新版的编译器更新吗?

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

korren 发表于 2017-9-21 08:47:09

pic_flash 发表于 2017-9-20 20:45
更新了, 需要就下载收藏。

谢谢! 楼主.

gmyu 发表于 2017-9-21 08:59:25

pic_flash 发表于 2017-9-20 20:45
更新了, 需要就下载收藏。

Thanks!!!!

korren 发表于 2017-9-21 11:35:43

pic_flash 发表于 2017-9-20 20:45
更新了, 需要就下载收藏。

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

pic_flash 发表于 2017-9-21 15:29:29

korren 发表于 2017-9-21 11:35
pic_flash, 请教一下在CCS IDE怎样设置编译器的优化级别.

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

我都是使用默认的设定

chenhu2012 发表于 2017-10-16 22:28:51

出差刚回来,顶顶!

chenhu2012 发表于 2017-11-1 23:50:39

{:handshake:}

chenhu2012 发表于 2017-11-30 19:46:34

{:titter:}{:titter:}{:titter:}

chenhu2012 发表于 2017-12-27 17:05:39


出差刚回来,顶顶!

pic_flash 发表于 2017-12-27 21:17:43

PIC 编译器, CCS C
版本: PCWHD_V5.075(PIC 编译器)

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

chenhu2012 发表于 2018-1-2 19:59:27

谢谢楼主!

skype 发表于 2018-1-5 11:21:25

PICC, 8位机,一直没有换过或升级过。

chenhu2012 发表于 2018-1-25 08:02:33

{:handshake:}

zoto 发表于 2018-2-22 23:26:37

太感谢lz了。搞picc单片机 这里是大本营!!

chenhu2012 发表于 2018-2-24 13:48:13

LZ,新年快乐!

wind2100 发表于 2018-3-6 16:06:57

用过CCSTI 的MSP430 用它比较好   PIC32也能用吗?

pic_flash 发表于 2018-3-7 18:52:30

wind2100 发表于 2018-3-6 16:06
用过CCSTI 的MSP430 用它比较好   PIC32也能用吗?

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

pic_flash 发表于 2018-3-7 18:56:52

wind2100 发表于 2018-3-6 16:06
用过CCSTI 的MSP430 用它比较好   PIC32也能用吗?

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

wind2100 发表于 2018-3-8 08:59:52

整个界面就明白 了

pic_flash 发表于 2018-3-8 11:11:48

wind2100 发表于 2018-3-8 08:59
整个界面就明白 了


不是TI 的CCS

chenhu2012 发表于 2018-3-24 16:23:04

顶顶!{:lol:}

chenhu2012 发表于 2018-3-24 19:55:20

pic_flash 发表于 2017-12-27 21:17
PIC 编译器, CCS C
版本: PCWHD_V5.075(PIC 编译器)



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

pic_flash 发表于 2018-3-27 10:53:54

chenhu2012 发表于 2018-3-24 19:55
楼主:有没有PIC 控制电机定们方面的?

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

korren 发表于 2018-4-9 12:47:33

pic_flash 发表于 2017-12-27 21:17
PIC 编译器, CCS C
版本: PCWHD_V5.075(PIC 编译器)



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

pic_flash 发表于 2018-4-9 21:10:00

PIC 编译器, CCS C
版本: PCWHD_V5.078(PIC 编译器)
链接:https://pan.baidu.com/s/1TWVWNwWF5GdxFj9sdAtI_A
密码:lo1l

chenhu2012 发表于 2018-4-13 17:12:30

LZ威武!

chenhu2012 发表于 2018-4-27 19:15:38

{:handshake:}

chenhu2012 发表于 2018-5-9 19:35:24

看看楼主,谢谢分享。

chenhu2012 发表于 2018-5-19 20:46:41


看看楼主{:handshake:}
页: 1 2 [3] 4 5
查看完整版本: 【交流】CCS C PIC 编译器的同好请来交流