股票

PIC上的“Hello World”—第一个运行程序

之前讲过在 mac 上安装编译环境,MAC下的 PIC 开发环境搭建,现在编译第一个可执行程序。

万事开头难,为了让这个 hello world 能编译通过也是费了不少事情。先贴个代码

  1. #include & lt; stdio.h & gt;
  2. #include & lt; stdlib.h & gt;
  3. #include & lt; pic.h & gt;
  4. #include & lt; xc.h & gt;               /* PIC hardware mapping */
  5. /* __CONFIG(HS & PWRTEN & LVPDIS & WDTDIS & BOREN); */
  6. #pragma config FOSC = HS                /* oscillator select high speed */
  7. #pragma config PWRTE = ON               /* power-up timer enable */
  8. #pragma config LVP = OFF                /* low voltage in-circuit serial programming disable */
  9. #pragma config WDTE = OFF               /* watchdog timer disable */
  10. #pragma config BOREN = ON               /* brown-out reset enable */
  11. void main( void )
  12. {
  13.     TRISBbits.TRISB1    = 0;    /* using pin RB1 as output */
  14.     PORTB           = 0;    /* clear all pins to 0 */
  15.     PORTBbits.RB1       = 1;    /* turn on the LED by writing to the latch */
  16.     while ( 1 )
  17.         continue;
  18. }

程序很短,就一个功能,就是点亮 LED,但是问题却很多。
首先是配置位
__CONFIG(HS & PWRTEN & LVPDIS &WDTDIS & BOREN);
这是旧版本的配置方式,我用的最新 XC8 编译器会给出告警,作为一个强迫症患者,看着一个大大红红的叹号在程序里会很不爽。为了改掉这个,我先是在《MPLAB® XC8 C 编译器 用户指南》里面比葫芦画瓢式的修改,没有的几个就各种猜,最后总算是把叹号去掉了。但是,今天写博客之前才发现我SB 了,官方有 Code Examples 照着上面的选择需要的配置一下就行了。
然后是端口操作。

官方示例用的芯片是 PIC16F18XX 系列,里面的配置位关于端口方向的 TRISCbits.TRISC0这些是一样的,可以照搬。但是端口寄存器名称就有区别了。我用的是 PIC16F873A ,端口寄存器名称和 avr 一样,都是 PORTX,并且 pic 头文件里对每个端口都设置了结构体,这个太好用了,不用数每一个引脚的位置,直接调用结构体就行了。几个变量解释一下,PORTB 是全局变量,unsigned char, 已经在头文件里定义,指向B端口所在的地址;PORTBbits也是全局变量,不过是结构体,结构体类型为 PROTBbits_t。有个小技巧,command 键加鼠标左键,可以直接链接到头文件定义处,这样可以选择你想用的端口对应的结构单元了。

下一步是烧写到芯片里去,我的小外围电路还没搭好,下次继续。

(2014.12.13)

今天发现之前犯了个错误,之前写的TRISBbits.TRISB0= 0; // using pin as output 是配置RB0作为输出,但是后面对端口的置位全是对RB1的操作,结果就是点灯总不亮。这里需要改正为TRISBbits.TRISB1 = 0;

打赏
原文链接:,转发请注明来源!

发表评论