2019-03-25 18:44发布
dcexpert 发表于 2018-9-1 12:37 这个是宏的一种特殊用法,就是将两个内容合成一个,在使用一系列有规律的寄存器时非常有用,在很多程序里 ...
迈尔风随 发表于 2018-9-1 21:42 这种宏定义用法能适用很多MCU吗,我看不懂都是些什么意思
dcexpert 发表于 2018-9-2 14:54 大部分C编译器都支持的。
werjufour 发表于 2018-9-1 20:42 为什么我实际的效果跟我软件上面的延时不一样呢?
dcexpert 发表于 2018-9-2 15:07 哪里不同了? 如果只是延时,先在程序中定义_XTAL_FREQ,它代表系统时钟频率 #ifndef _XTAL_FREQ ...
最多设置5个标签!
这种宏定义用法能适用很多MCU吗,我看不懂都是些什么意思
大部分C编译器都支持的。
比如说:
#define IO_OUTPUT 0
#define IO_INPUT 1
#define PIN_DIR(pin, DIR) MACRO_CONCAT3(_TRIS, MACRO_ARG21(pin), MACRO_ARG22(pin)) = DIR
在程序中,定义了LED的引脚:
#define LED1 A, 1
初始化时设置:
PIN_DIR(LED1, IO_OUTPUT)
它的实际结果就是
_TRISA1 = 1
这样的用法看起来很复杂,但是好处是可以让程序有较好的移植性和可读性,在不同的C编译器和不同单片机上更方便的移植代码。
更详细的解释可以参考我在《AVR单片机应用专题精讲》一书中的说明和举例。
哪里不同了?
如果只是延时,先在程序中定义_XTAL_FREQ,它代表系统时钟频率
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 4000000L
#endif
然后用 __delay_ms() 或者 __delay_us() 就可以进行延时了。注意前面是两个下划线,不要写错了。
如果延时效果不同,说明时钟设置或者默认配置字不对,请参考手册设置。为了保证效果,可以将配置字写在程序中,而不是通过编程器设置(不同的PIC单片机配置字是不同的)。如:
#pragma config FOSC = INTOSC // Oscillator Selection bits (INTOSC oscillator: CLKIN function disabled)
首先要谢谢你。就是我在MPLAB SIM软件仿真里跑表显示的是300MS左右,但是在Proteus仿真里面却要延时3s左右。
自带的延时函数延时__delay_ms() 这个函数我不知道延时了多长时间。比如说要延时50ms 我系统时钟频率和实际参数填多少?
一周热门 更多>