打印
[PIC®/AVR®/dsPIC®产品]

PIC单片机的IO配置与AVR单片机的配置有什么区别。

[复制链接]
2231|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
598330983|  楼主 | 2024-5-23 22:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PIC单片机和AVR单片机在IO(输入/输出)配置上的主要区别体现在寄存器的使用方式和配置步骤上。以下是对这两种单片机IO配置的比较:

PIC单片机的IO配置
PIC单片机以Microchip公司的产品为代表,配置IO通常涉及以下几个主要寄存器:

TRIS寄存器:用于配置IO引脚的方向(输入或输出)。
PORT寄存器:用于读取引脚的状态或向引脚输出数据。
LAT寄存器(某些型号具有):用于输出数据到引脚(解决了读写PORT寄存器的潜在问题)。
ANSEL寄存器:用于配置引脚的模拟功能(在需要将引脚配置为数字IO时,需要关闭模拟功能)。
配置步骤
配置方向:设置TRIS寄存器相应位为0(输出)或1(输入)。
配置模拟功能:设置ANSEL寄存器相应位为0(数字)或1(模拟)。
操作引脚:
读操作:读取PORT寄存器。
写操作:写入LAT寄存器(如果存在)或PORT寄存器。
示例代码
#include <xc.h>

// 假设使用的是PIC16F877A,LED连接在RB0

void main(void) {
    // 配置RB0为输出
    TRISBbits.TRISB0 = 0;
    // 关闭模拟功能
    ANSELbits.ANS0 = 0;

    while(1) {
        // 点亮LED
        LATBbits.LATB0 = 1;
        __delay_ms(500);
        // 熄灭LED
        LATBbits.LATB0 = 0;
        __delay_ms(500);
    }
}


使用特权

评论回复
沙发
598330983|  楼主 | 2024-5-23 22:39 | 只看该作者
AVR单片机的IO配置
AVR单片机(如Atmel公司的产品)配置IO通常涉及以下几个主要寄存器:

DDRx寄存器:用于配置IO引脚的方向(输入或输出)。
PORTx寄存器:用于设置引脚的输出状态或使能上拉电阻。
PINx寄存器:用于读取引脚的状态。
配置步骤
配置方向:设置DDRx寄存器相应位为0(输入)或1(输出)。
操作引脚:
读操作:读取PINx寄存器。
写操作:写入PORTx寄存器。
示例代码
#include <avr/io.h>
#include <util/delay.h>

// 假设使用的是ATmega328P,LED连接在PB0

int main(void) {
    // 配置PB0为输出
    DDRB |= (1 << DDB0);

    while(1) {
        // 点亮LED
        PORTB |= (1 << PORTB0);
        _delay_ms(500);
        // 熄灭LED
        PORTB &= ~(1 << PORTB0);
        _delay_ms(500);
    }
}

使用特权

评论回复
板凳
598330983|  楼主 | 2024-5-23 22:39 | 只看该作者
主要区别总结
方向配置:
PIC使用TRIS寄存器配置引脚方向。
AVR使用DDRx寄存器配置引脚方向。
引脚状态操作:
PIC使用PORT寄存器进行读操作,使用LAT寄存器(如果存在)或PORT寄存器进行写操作。
AVR使用PINx寄存器进行读操作,使用PORTx寄存器进行写操作。
模拟功能配置:
PIC需要使用ANSEL寄存器关闭模拟功能以配置为数字IO。
AVR通常不需要专门的寄存器来关闭模拟功能,直接配置DDRx寄存器即可。

使用特权

评论回复
地板
643757107| | 2024-5-23 23:19 | 只看该作者
首先寄存器名字不同。其实配置方向的话,一个是写1为输出,另外一个写0为输出。

使用特权

评论回复
5
yorkbarney| | 2024-6-4 09:34 | 只看该作者
PIC单片机利用PORTx寄存器来读取或写入数据。在输出模式下,设置PORTx寄存器的位为1或0,以输出高电平或低电平;在输入模式下,读取PORTx寄存器的位来检测当前电平状态。

使用特权

评论回复
6
10299823| | 2024-6-4 10:40 | 只看该作者
PIC和AVR单片机都有不同引脚数的版本,PIC有从8到44引脚不等的型号,而AVR也有从8到40引脚的选项。在选择单片机时,引脚数量会根据项目需求来决定。

使用特权

评论回复
7
lcczg| | 2024-6-4 11:26 | 只看该作者
AVR的管脚寄存器还有对应的虚拟口VPROT,好处是操作执行比普通口更快,单指令周期。

使用特权

评论回复
8
dspmana| | 2024-6-4 12:13 | 只看该作者
PIC和AVR在配置I/O引脚时使用不同的寄存器。PIC使用的是“TRIS”寄存器来配置输入/输出方向,而AVR使用“DDRx”寄存器来设置引脚的方向。例如,对于PIC,如果要将某个引脚配置为输出,需要将对应的TRISx位设置为0;而对于AVR,需要将DDRx相应的位设置为1。

使用特权

评论回复
9
sdCAD| | 2024-6-4 15:19 | 只看该作者
PIC单片机的I/O配置主要涉及以下几个寄存器:

TRISx寄存器:用于设置端口的方向,其中0表示输出,1表示输入14567。例如,TRISA = 0xFF将RA口配置为输入,TRISA = 0x00将RA口配置为输出。
PORTx寄存器:用于读取或设置端口的输出电平14567。例如,PORTA = 0x01将RA0设置为高电平。
LATx寄存器:用于设置端口的输出电平4。例如,LATB = 0x55将RB4和RB5设置为高电平。

使用特权

评论回复
10
fengm| | 2024-6-5 11:36 | 只看该作者
#include <avr/io.h>
#include <util/delay.h> // 假设使用的是ATmega328P,LED连接在PB0
int main(void) {
    // 配置PB0为输出
    DDRB |= (1 << DDB0);
    while(1) {
        // 点亮LED
        PORTB |= (1<< PORTB0);
        _delay_ms(500);
        // 熄灭LED
        PORTB &= ~(1<< PORTB0);
        _delay_ms(500);
    }
}

使用特权

评论回复
11
kkzz| | 2024-6-5 15:10 | 只看该作者
PIC单片机通常拥有专门的外设模块,如Timer1、Timer2等,而AVR则有像Timer/Counter这样的模块。

使用特权

评论回复
12
chenjun89| | 2024-6-5 19:37 | 只看该作者
要配置的内容都是差不多的,只是两者的架构不一样,相关寄存器地址不一样。

使用特权

评论回复
13
elsaflower| | 2024-6-5 20:11 | 只看该作者
PIC单片机和AVR单片机在IO配置上的主要区别在于寄存器的命名、模拟功能的设置以及默认配置的处理。

使用特权

评论回复
14
linfelix| | 2024-6-6 08:21 | 只看该作者
AVR单片机通常没有专门的寄存器来选择模拟或数字功能,其AD转换器相关的寄存器处理模拟输入选择。

使用特权

评论回复
15
10299823| | 2024-6-7 08:51 | 只看该作者
PIC单片机:某些I/O引脚如RA3在PIC中默认为输入,并且无法修改为输出模式

使用特权

评论回复
16
sheflynn| | 2024-6-7 12:21 | 只看该作者
AVR单片机的I/O配置主要涉及以下几个寄存器:

DDRx寄存器:用于设置端口的方向,其中0表示输入,1表示输出14567。例如,DDRA = 0xFF将PA口配置为输出,DDRA = 0x00将PA口配置为输入。
PORTx寄存器:用于设置端口的输出电平或配置内部上拉电阻14567。例如,PORTA = 0x01将PA0设置为高电平。
PINx寄存器:用于读取端口的输入电平14567。例如,PINA将读取PA口的输入电平。

使用特权

评论回复
17
uptown| | 2024-6-7 15:37 | 只看该作者
PIC单片机使用TRIS寄存器配置引脚方向,PORT寄存器用于读取引脚状态或向引脚输出数据,LAT寄存器用于输出数据到引脚

使用特权

评论回复
18
lihuami| | 2024-6-7 19:02 | 只看该作者
AVR单片机的IO配置通常不直接涉及上述特定的寄存器名称,而是使用其自己的寄存器和设置方法来管理IO引脚的功能。

使用特权

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

本版积分规则

246

主题

5384

帖子

22

粉丝