控制LED闪烁的仿真电路中,PIC16F630单片机RC5引脚连接LED,源程序控制RC5引脚按设定的时间间隔不断输出010101…,使LED持续闪烁,源程序中所使用的延时函数将在后续案例中大量出现。设计如图3-1所示的仿真电路时要注意限流电阻的阻值,未设置或设置过大都可能导致LED无法闪烁。仿真电路右边为PIC16F630单片机的外部引脚图。
图3-1 闪烁的LED仿真电路及PIC16F630芯片引脚
(一)通用头文件xc.h
源程序最开头注意添加头文件<xc.h>,缺少该头文件时将出现如下编译错误信息:
编译器显示标识符TRISC、PORTC、RC5均未定义。
对于本书所使用的XC8编译器(v1.33),包含头文件xc.h时,实际将导致xc.h→htc.h→pic.h→pic_chip_select.h→pic16f630.h的递次加载,打开pic16f630.h可看到其中定义有:
(二)两个延时宏的应用
另外,由于XC8提供了类似于AVR-GCC的延时宏定义,除中断函数以外,所有延时都可调用__delay_us和__delay_ms,与AVR-GCC提供的延时宏(或称伪函数)相比,XC8的这两个宏前面多出了一个下画线“_”。这两个宏定义在头文件C:\Program Files\Microchip\xc8\v1.33\include\pic.h中,打开该文件可看到如下内容:
由其中的NOTE可知,使用延时函数时,要预先定义振荡器频率:_XTAL_FREQ,单位为Hz。上述两个延时宏的技术资料还可以在XC8编译器PDF手册中看到。未定义_XTAL_FREQ时或者宏调用时设置的延时过大,XC8都将提示编译错误。延时参数必须为常量,且不得超过相应上限值,例如本例器件不得超过50 462 464,否则将出现如下错误提示信息:
实现更长的延时,可考虑定义类似于下面的函数:
在仿真电路中,为使单只LED持续闪烁,程序首先定义RC5为LED控制引脚,并通过端口方向寄存器TRISC将PC端口设为输出(主程序将该端口各引脚全部设为输出,实际上也可以只将TRISC5设为输出),然后在主循环中每隔150ms对RC5取反并输出,从而在该引脚输出…010101…序列,控制LED持续闪烁。
① 修改延时参数,改变LED的闪烁频率。
② 修改仿真电路,编程控制连接在不同引脚的多只LED闪烁。