0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用MAX232在PIC和PC之间进行通信的过程

科技观察员 来源:allaboutcircuits 作者:Jens Christoffersen 2022-04-26 17:28 次阅读

这是使用计算机和 PIC 控制 LED、风扇、继电器或螺线管的一种简单方法。

要求

一台装有 Microchip MPLAB X IDE 并安装了 XC8 v1.34 编译器的计算机。(我使用的是 MPLAB X v3.05 和 XC8 v1.34)

PIC16F628A 微控制器

一个 MAX232 驱动器/接收器

一种对 MCU 进行编程的方法

Eagle 的零件清单(见下文)

带串口接口电脑/串口转USB线

如果你想把电路放在面包板上,你需要一块面包板和一些跳线

介绍

Maxim Integrated Products 于 1987 年创建了 MAX232 IC。它是双驱动器/接收器,通常将 RX、TX、CTS 和 RTS 信号从/到 PC 的串行端口(最高可达 25 v)从/到 TTL 电平(5 伏)。使用 MAX232 IC,您可以轻松地将 PIC 微控制器连接到 PC。这带来了很多机会。您可以控制 LED、风扇、继电器和螺线管等。在此操作方法中,我们将简单地打开然后关闭 LED。这听起来很简单,但有了这些知识,您已经可以构建很多东西了!您将需要一台带有串行端口或串行到 USB 转换器的计算机。我正在使用 USB 转 RS-232 适配器。在Wikipedia上阅读有关 RS-232 的更多信息

有关 USART、USART 配置和初始化的更深入阅读,请阅读 Microchip 的: AN774 - 与 PICmicro USART 的异步通信。对于 ASM 程序员,此链接为您提供了一些源代码示例。

硬件

我们要做的第一件事是制作框图。这是我们的小工具的图表,分成块。这是一个很好的帮助,可以让我们保持在正轨上,它让我们可以忽略我们想要我们的电路做什么。

jc_blockdia_max232.png

我们需要:

一种对我们的 MCU(ICSP 块)进行编程的方法

电脑与单片机通信,半双工,电脑块

MCU 控制 LED/输出,MCU 块

查看 LED/ 输出块

LED/输出块可以是 LED、风扇、继电器或螺线管,或您想要控制的任何其他东西。您需要解决的一个重要问题是确保您的 MCU 具有 USART 端口。我们使用的是 PIC16F628A,它有一个端口。IC 支路 7 和 8 分别是 PORTBbits.RB1 和 PORTBbits.RB2。如果您使用不同的 MCU,则必须考虑到这一点。

绘制电路时,您将需要组件数据表。PIC16F628A 的数据表可在此处找到。当您遇到困难时,这将是您的指南。另一个 IC 的数据表在这里: MAX232CPE。

此原理图中未考虑硬件握手。为了满足硬件握手,您必须在 X2 上放置一些跳线:

jc_max232hh_2.png

制作框图后,我们将绘制原理图:

jc_PIC16F628-max232_4.png

单击图像以获得更好的分辨率。

poYBAGJnuyiACicjAAByCFoS5qE617.png

零件清单

这是零件列表文件的屏幕截图。该文件由 EagleCAD 生成。

jc_PIC16F628-MAX232-parts-2.png

硬件做好之后,就是软件的时候了。

软件

编写软件时,您必须在附近有硬件数据表。我的设置允许我在一个屏幕上显示数据表,而在另一个屏幕上显示编程环境。这样,我可以在几秒钟内访问数据表。

这是基于 MPLAB X IDE 和 XC8 编译器的。所有内容均可在www.microchip.com免费下载。在编写代码时评论代码是一个好习惯。当你写它时,你可能会认为你会记住所有行的作用——你可能会记住第二天或一周的剩余时间。但是一个月后呢?你还会记得吗?使用评论。他们以后会节省很多工作,其他人会感谢你。以下代码注释得很好,因此无需逐行查看。因此,事不宜迟,这里是:

// INCLUDES

#include 
#include 
#include 
#include 

// CONFIG
#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = ON       // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)
#pragma config BOREN = ON       // Brown-out Detect Enable bit (BOD enabled)
#pragma config LVP = ON         // Low-Voltage Programming Enable bit (RB4/PGM pin has PGM function, low-voltage programming enabled)
#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

// DEFINITIONS
#define _XTAL_FREQ 16000000      // Tell the compiler that we are useing 16MHz

// GLOBAL VARIABLES
unsigned int choice;            // Variable to hold user choice
bool getchar_active = false;    // Boolean variable

// FUNCTION PROTOTYPE
void interrupt tc_int(void);
void UART_init(void);
unsigned char getch();
unsigned char getche(void);
void showMenu(void);


// FUNCTIONS
void UART_init(void){
    TXSTAbits.BRGH = 0;     // Setting BRGH to use LOW speed
    TXSTAbits.SYNC = 0;     // Setting async mode
    TXSTAbits.TX9 = 0;      // Setting 8-bit transmission
    RCSTAbits.CREN = 1;     // Enable continious receive
    
    SPBRG = 25;             // Setting the SPBRG register to use 16MHz with BRGH 0
    
    PIE1bits.RCIE = 1;      // USART receive interrupt enable
    RCSTAbits.SPEN = 1;     // Enable serial port
    TXSTAbits.TXEN = 1;     // Enable transmit
    
    return;
}

unsigned char getch()
{
    getchar_active = true;  // Boolean variable set to true
    while(getchar_active)   // While true
        continue;           // Carry - on
    return RCREG;           // return the value in RCREG
}

unsigned char getche(void){ 
    unsigned char c;
    putch(c = getch());
    return c;
}

void putch(unsigned char byte){     // Adding Carrier Return and Line feed
    while(!TXSTAbits.TRMT);
    TXREG = byte;
    if ('\n'==byte){
        while (!TXSTAbits.TRMT);
       TXREG = '\r';
    }
    return;
}

void interrupt tc_int(void){
    if(RCIE && RCIF)                // Check RC Inter bit & Inter Flag
    {
        getchar_active = false;
        RCREG;
    }
    return;
}

void showMenu(){
        printf("\n\n*****************************************************\n");
        printf("**        PIC, MAX232 and PC communication demo    **\n");
        printf("*****************************************************\n");
        printf("\n\t1. LED on.\n");
        printf("\t2. LED off.\n"); 
        printf("Your choice: ");
}
/*
 * THIS IS THE MAIN PROGRAM
 */
int main(int argc, char** argv) {
TRISA = 0b00000000;     // All output
PORTB = 0b00000000;     // All low

TRISB = 0b00000110;     // RB1 & RB2 set as input ref datasheet
PORTB = 0b00000000;     // All low

    UART_init();        // Initialize the UART
    
    INTCONbits.PEIE = 1;    // Enable peripheral interrupt
    INTCONbits.GIE = 1;     // Enable global interrupt
    
    do {
        showMenu();         // Show awesome menu

        choice = getchar(); // Assign char from getchar to choice

        switch(choice){     // Menu options
            case '1': printf("\n\n\t\t** Led is ON **\n");
                    PORTBbits.RB3 = 1;
                    break;
            case '2': printf("\n\n\t\t** Led is OFF **\n");
                    PORTBbits.RB3 = 0;
                    break;
            default:    printf("\n\n\t\t** Invalid choice. RTFM :-D **\n\n");
            break;
        }
    } while (choice !=3);
   
    return (EXIT_SUCCESS);
}

如果源代码编译时没有错误或警告,您可以对 MCU 进行编程,并将其连接到您的计算机。打开您喜欢的串行通信程序并使用 9600-8-N-1 进行端口设置。给电路通电,您应该会在屏幕上看到一个小菜单。它适用于 Windows 和 Linux。见最后的短视频。

结论

我们使用 PIC16F628A 和 MAX232 通过 PC 控制 LED。我们没有使用很多硬件,也没有很多代码。我们也没有费心制作自己的库来写入 UART 端口:我们使用了标准的 printf 函数。我们的代码使用了 PIC 的 9% 的数据存储器和 21% 的程序存储器。您可以从本页底部下载源代码。

图片

jc_pic16f628-max_complete.JPG

竞争电路

jc_pic16f628max_mcu.JPG

微控制器部分。

jc_pic16f628max_max232.JPG

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    237

    文章

    22441

    浏览量

    645834
  • 计算机
    +关注

    关注

    19

    文章

    6642

    浏览量

    84469
  • PIC
    PIC
    +关注

    关注

    8

    文章

    507

    浏览量

    86670
收藏 人收藏

    评论

    相关推荐

    MAX232与单片机通信电路图

    ` 本帖最后由 eehome 于 2013-1-5 10:10 编辑 实验板加个串行接口吧。借助电脑转件直观的看单片机的输出结果,以后我还会用一些简单的实例讲解单片机和PC串口通讯的简单应用和编程。如果你用的是成品实验板或仿真器,那你就可以跳过这一段了。 MAX232
    发表于 10-27 12:00

    两个单片机通过max232串口通信,max232如何连线啊?

    请教高手:两个单片机通过max232串口通信,max232如何连线啊?
    发表于 07-20 21:02

    PC机通过USB转串口然后与MAX232连接进行PC机与单片机的多机

    PC机通过USB转串口连接MAX232,该MAX232与3个单片机的再用MAX232并联进行多机通信
    发表于 04-17 12:11

    只用串口座和max232可以进行烧录吗

    上网查了好多,看了好多u***转串口的,什么p***啊,ch340了,max232了,已经晕了,有哪位大神可以告诉我这些有什么区别吗?,ch340和max232是必须同时用吗?如果只用串口座,max232可以
    发表于 04-18 19:24

    关于stm32使用max232进行串口通信问题

    各位大神,小弟刚刚接触stm32不久,最近学习串口通信时遇到了一些问题。还望大神们赐教。关于这个stm32,使用了max232之后还能不能使用串口线来进行串口通信啊?还有就是这个u**
    发表于 08-08 21:24

    美信经典接口芯片MAX232技术文章、应用技巧、通信问题集锦

    故障率比较高(答疑)使用MAX232时发现故障率比较高,做了21套板子,上电通信时,有一片刚上电时就坏掉了,有一片用了几天
    发表于 03-14 10:54

    max232的串口通信和烧录

    通信,max232如何连线啊?max232pcb中无法生成?!max232能用0.1uf电容吗求max
    发表于 08-29 17:18

    基于MAX232的正负电源设计

    电容分别为1μF和0.1μF时,MAX232的负载电流、输出电压曲线。由图2可知,选取外部电容为1μF时输出负压比0.1μF变化更缓慢,负载电流更大;相同通信数据率时,外部电容为1μF时输出电流比
    发表于 10-18 16:36

    PIC16f886 USART使用MAX485代替MAX232

    我有一个工作通信电路之间的两个PIC(使用16f886的硬件通用技术)写在汇编和连接两个MAX232。我想用MAX485代替。我必须改变密码
    发表于 10-08 10:12

    202单片机和PC的串行MAX232接口原理图

    202单片机和PC的串行MAX232接口原理图
    发表于 04-02 12:18 2545次阅读
    202单片机和<b class='flag-5'>PC</b>的串行<b class='flag-5'>MAX232</b>接口原理图

    MAX232与单片机通信电路图资料下载

    MAX232与单片机通信电路图MAX232是一种双组驱动器/接收器,片内含有一个电容性电压发生器以便在单5V电源供电时提供EIA/TIA-232-E电平
    发表于 03-22 14:11 63次下载

    基于MAX232实现PC机与CPU通信

    本文介绍了基于MAX232实现PC机与CPU通信,介绍了MAX232芯片的应用及利用MAX232芯片制作的硬件接口电路,通过串口将它们读到
    发表于 12-18 09:45 6823次阅读
    基于<b class='flag-5'>MAX232</b>实现<b class='flag-5'>PC</b>机与CPU<b class='flag-5'>通信</b>

    max232芯片介绍_max232接线图

    本文对max232芯片进行了简单介绍,同时也分享了max232芯片接线图。
    发表于 01-05 16:05 3.9w次阅读
    <b class='flag-5'>max232</b>芯片介绍_<b class='flag-5'>max232</b>接线图

    MAX232与51单片机如何连接_MAX232与51单片机连接图

    当用单片机和PC机通过串口进行通信,尽管单片机有串行通信的功能,但单片机提供的信号电平和RS232的标准不一样,因此要通过
    发表于 01-19 08:51 2.9w次阅读
    <b class='flag-5'>MAX232</b>与51单片机如何连接_<b class='flag-5'>MAX232</b>与51单片机连接图

    MAX232的引脚说明及工作原理

    MAX232是一种广为人知的IC,用于在微控制器和个人计算机(PC之间建立串行通信。该 IC 用于在串行通信
    的头像 发表于 07-02 14:21 4879次阅读
    <b class='flag-5'>MAX232</b>的引脚说明及工作原理