打印
[开发工具]

发现个免费的PIC14,PIC16编译器

[复制链接]
1599|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yiy|  楼主 | 2019-12-6 16:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
https://jaist.dl.sourceforge.net/project/sdcc/sdcc-win32/3.9.0/sdcc-3.9.0-setup.exe

使用特权

评论回复
沙发
yiy|  楼主 | 2019-12-6 17:17 | 只看该作者
什么是SDCC?
SDCC是可重定目标的,优化的标准C(ANSI C89,ISO C99,ISO C11)编译器套件,针对的是基于Intel MCS51的微处理器(8031、8032、8051、8052 等), Maxim(以前称为Dallas),DS80C390变体, 飞思卡尔(以前基于Motorola)基于HC08 (hc08,s08), 基于Zilog Z80的MCU (z80,z180,gbz80,Rabbit 2000/3000,Rabbit 3000A,TLCS-90),Padauk(pdk14,pdk15)和 STMicroelectronics STM8。支持Padauk(pdk13),Microchip PIC16和PIC18 目标的工作正在进行中 。可以将其重新定位为其他微处理器。

SDCC套件是从具有不同FOSS许可证的不同来源派生的几个组件的集合。SDCC编译器套件包括:

SDAS和sdld,一个retargettable汇编程序和连接,基于ASXXXX,由Alan鲍德温写入; (GPL)。
sdcpp 预处理器,基于GCC cpp ; (GPL)。
ucsim 模拟器,最初由Daniel Drotos编写;(GPL)。
sdcdb 源代码级调试器,最初由Sandeep Dutta编写;(GPL)。
sdbinutils 库归档实用程序,包括从GNU Binutils派生的sdar,sdranlib和sdnm;(GPL)
SDCC运行时库;(GPL + LE)。Pic设备库和头文件是从Microchip头文件(.inc)和链接程序脚本(.lkr)文件派生的。Microchip要求“头文件应声明它们仅可与可靠的Microchip设备一起使用”,这使它们与GPL不兼容。
gcc-test 回归测试,源自 gcc-testsuite;(未明确指定许可,但由于它是GCC的一部分,因此可能是GPL许可)
packihx ; (公共区域)
马克宾 ; (zlib / libpng许可证)
sdcc C编译器,最初由Sandeep Dutta编写;(GPL)。一些功能包括:
广泛的MCU特定语言扩展,可有效利用基础硬件。
一系列标准优化,例如全局子表达式消除,循环优化(循环不变式,归纳变量的强度降低和循环反转),恒定折叠和传播,复制传播,死代码消除以及“ switch”语句的跳转表。
MCU特定的优化,包括全局寄存器分配器。
适用于MCU的自适应后端,应该非常适合其他8位MCU
基于独立规则的窥视孔优化器。
完整的数据类型范围:char(8位,1字节),short(16位,2字节), int(16位,2字节),long(32位,4字节),long long(64位,8字节),浮点数(IEEE 4字节)和 _Bool / bool。
可以在函数中的任何位置添加内联汇编代码。
报告功能复杂性以帮助决定应在汇编器中重写的功能。
很好的自动回归测试选择。
SDCC最初由Sandeep Dutta编写,并根据GPL许可发布。自最初发布以来,已经进行了许多错误修复和改进。从1999年12月起,代码被移至SourceForge,所有“用户都变成开发人员”都可以访问同一源代码树。SDCC会不断更新,包括所有用户和开发人员的输入。

使用特权

评论回复
板凳
dongnanxibei| | 2019-12-6 21:15 | 只看该作者

PIC的头文件在这。

使用特权

评论回复
地板
dongnanxibei| | 2019-12-6 21:24 | 只看该作者
该模块假定
  • 您,读者,对使用C和汇编进行编程有所了解。
  • 您有一个Code :: Blocks IDE,SDCC,GPUTILS和PICDEM 2 Plus演示板。
  • 该代码示例将使用PIC16F877和PIC18F452微控制器。
在开始之前,
  • CodeBlocks.org,SDCC编译器Small Device C编译器GNU PIC Utilities安装最新的Code :: Blocks IDE 。
简单I / O入门
我们将从使用PORTA和PORTB的简单输入输出程序开始。让板上的一些LED点亮。我们应该将值0x0A分配给PORTB。这将点亮RB3和RB1处的LED。每次按下RA4处的开关按钮,该值将被取反;因此,LED将在RB3 / RB1和RB2 / RB0之间切换。
首先,启动您的Code :: Blocks IDE。然后使用菜单“设置”->“编译器和调试器”来设置SDCC编译器选项。
  • 选择“ SDCC编译器”
  • 单击按钮“设置为默认”
  • 单击选项卡“工具链可执行文件”
  • 单击选项卡“其他路径”
  • 验证安装路径和其他目录。
    • 常规安装目录为“ C:\ Program Files \ SDCC”
    • 正常的其他目录是“ C:\ Program Files \ SDCC \ bin”和“ C:\ Program Files \ gputils \ bin”
  • 单击选项卡“搜索目录”
  • 验证搜索目录
    • 普通编译器搜索目录为“ C:\ Program Files \ SDCC \ include”
    • SDCC 3.0及更高版本的“ C:\ Program Files \ SDCC \ non-free \ include”的PIC普通编译器搜索目录
    • 普通链接程序搜索目录为“ C:\ Program Files \ SDCC \ lib”
  • 对于sdcc 3.2.1单击选项卡“其他设置”
    • 单击按钮“高级选项...”
    • 点击“其他”标签
    • 将“目标文件扩展名”的值从rle修改o

其次,创建一个空项目。在菜单栏中,选择“文件”->“新建”->“项目”。选择“空项目”,然后单击GO。输入所需的信息。您将收到警告消息,提示Code :: Blocks不知道如何进行设置。别管他们。
现在更改项目,使其可以与SDCC一起使用;在菜单栏中,选择“项目”->“属性”;选择标签“构建目标”。在目标选项下,将“类型”更改为“本机”。注意,您需要将所有目标设置为“本地”。因此,如果其他目标位于右平面上,请选择它们。设置项目构建选项;在菜单栏中,选择“项目”->“构建选项”。在“编译器设置”选项卡下和“编译器标志”选项卡下,设置PIC 16或14位指令的CPU标志。
注意:有时有必要使用“ Compiler Settings”选项卡并在“ Options”选项卡下设置MCU;例子是在PIC18F452 MCU的代码中添加不带双引号的“ -p18f452”。
设置项目后,我们将创建一个名为SimpleIO.c的C文件。添加名为SimpleIO.c的新文件。
在编辑器中键入以下代码。


使用特权

评论回复
5
dongnanxibei| | 2019-12-6 21:24 | 只看该作者
#include <pic16/pic18f452.h>

// Configurations
code char at __CONFIG1H conf1 = _OSC_HS_PLL_1H & _OSCS_ON_1H;   // Select HS PLL OSC
code char at __CONFIG2L conf2 = _PUT_ON_2L;
code char at __CONFIG2H conf3 = _WDT_OFF_2H;                    // Disable WDT
code char at __CONFIG4L conf4 = _LVP_OFF_4L;                    // Disable LVP

// Main body
void main() {

    // Initializing ports
    PORTA = 0;
    PORTB = 0;

    // Set RA4 as input and RB3-RB0 as output
    TRISA |= 0x10;
    TRISB &= 0xF0;

    // Set value 0x0A to PORTB
    PORTB = 0x0A;

    // If button is pressed, toggle PORTB
    while(1) {
        if(PORTAbits.RA4 != 0)
            PORTB = ~PORTB;
    }
}

使用特权

评论回复
6
dongnanxibei| | 2019-12-6 21:25 | 只看该作者
#include <pic/pic16f877.h>

// Configurations
    typedef unsigned int config;
    config at 0x2007 __CONFIG = _HS_OSC & _PWRTE_ON & _BODEN_OFF & _WDT_OFF & _LVP_OFF;

// Main body
void main() {

    // Initializing ports
    PORTA = 0;
    PORTB = 0;

    // Set RA4 as input and RB3-RB0 as output
    TRISA |= 0x10;
    TRISB &= 0xF0;

    // Set value 0x0A to PORTB
    PORTB = 0x0A;

    // If button is pressed, toggle PORTB
    while(1) {
        if(RA4 != 0)
            PORTB = ~PORTB;
    }
}

使用特权

评论回复
7
hjl2832| | 2020-3-11 13:07 | 只看该作者
Thomas@wang 发表于 2020-3-10 09:51
拜求大神指教,微芯的PIC16F1825 TSSOP14L 找寻国产MCU替代。月需求5000片。
目前情况是:1,有烧录程序估 ...

目前国产PIC核的单片机很多,我这几天用FMD(辉芒微)的完美替换PIC,最主要是便宜。另外经典的是MDT(麦肯)单片机,很多是可以PIN对PIN直接替换的,原烧录代码都不用改,可以直接烧录用(有的要配置一下烧录选项)。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

yiy

103

主题

1777

帖子

4

粉丝