Tag: pic

当没有数据类型可以保存完整数字时,将hex转换为十进制

好的,所以我在C中使用PIC微处理器。它是一个16F,因此它不能保存大于32位的整数(unsigned int32是可用的最大数据量) 从阅读器,我收到一个5字节的ID代码。 为了传输它,我必须逐位编码为BCD。 我无法将其打印到字符串,因为它比数据大小大,并且无法处理它。 我无法分割它,因为没有为它定义操作。 我无法找出任何解决方案,有没有人以前处理过这个问题? 编辑: 我收到一系列5个字节的数字:“FF-FF-FF-FF-FF”。 我需要将其转换为十进制“0123456789012”(13位数,长度为256 ^ 5十进制),以通过RS232发送。 第二个函数(使用ASCII,并发送它)我已经有它工作,但我需要完整数字的字符串表示,然后我可以用它做任何事情。

将Fletcher校验和从32位重新编码为8位

这次转换是否正确? uint8_t fletcher8( uint8_t *data, uint8_t len ) { uint8_t sum1 = 0xff, sum2 = 0xff; while (len) { unsigned tlen = len > 360 ? 360 : len; len -= tlen; do { sum1 += *data++; sum2 += sum1; tlen -= sizeof( uint8_t ); } while (tlen); sum1 = (sum1 & 0xff) + (sum1 […]

XC8错误224:非法#指令(第一行)

我正在使用Microchip的XC8编译器。 他们希望我#include 而不是包含特定于芯片的标头。 但是,当我在代码的第一行添加此代码时,我收到错误: Error [224] C:\…\main.c; 1.4 illegal “#” directive 当我在指令之前放置换行符时,我没有收到错误。 为什么是这样? 我的完整代码: #include #pragma config OSC =INTIO67, WDT = OFF, LVP = OFF, PBADEN = OFF void main() { while (1); } 使用换行符,代码看起来一样,但顶部有一个空行。

将输出端口设置为高电平C

我正在使用MPLAB使用CCS编译器在C中编译程序。 我想使用定义的端口将输出端口设置为高或低。 #bit portOut1 = PORTC.0 所以,我想将portOut1设置portOut1高或低。 我用过3种方法来做,但只有一种方法有效。 但我对此并不满意。 1 :(不起作用,为什么?) portOut1 = output5.value; 2 :(不起作用,为什么?) output_bit(portOut1,value); 3 :(显然工作) output_bit(pin_c0, value); 我不明白为什么第一种和第二种方式不起作用。 而且我不想使用第三种,因为除非我发表评论,否则我不知道这个引脚是做什么的,我认为这不是一个好的程序实践。 有人知道这样做的方法吗? 或者我做错了什么?

我可以在Microchip C18中创建一个接受ram和rom指针的函数吗?

当我声明一个接受const char*的函数并且我传递一个字符串文字时,我得到一个 警告:[2066]类型限定符在分配中不匹配 因为字符串文字是rom const char* 。 反过来也是这样。 尽管PIC是哈佛架构,但内存映射到一个连续的地址空间,因此理论上应该可以同样的方式支持ram和rom指针。 可能我必须使用rom指针,因为它们是24位而ram指针是16位。 但是,只是将const char*转换为const rom char*不起作用。

基于pic 18f4550的比特值发音

更新2 我想在我的pic 18f4550上制作一个可以播放声音(可以说是红色,绿色和蓝色)的程序,有一个扬声器连接到picdem,该部分工作正常,我用C的微芯片版本6.83编写了以下程序编译器。 我需要检索.wav文件的位值,当我说红色时(这有一个位模式)。 我正确的问题,如何获取我的.wav文件的位值。 void main (void) { TRISD = 0x00; // PORTD als uitgang TRISB = 0b00110000; // RB4 en RB5 als ingang TRISA = 0x00; // RA output RCONbits.IPEN = 0; // interrupts INTCONbits.GIE = 1; INTCONbits.RBIE = 1; while(1) { _asm sleep _endasm } } #pragma interrupt ISR void ISR (void) […]

在PIC18上使用C的multithreading

在编写PIC18时 ,如何创建并行运行的线程,因为没有操作系统?