PIC18F452+Proteus双机通信 串口通信 键盘更改波特率源程序

发布者:SereneSerenity最新更新时间:2020-07-12 来源: 51hei关键字:PIC18F452  Proteus  双机通信  串口通信  波特率 手机看文章 扫描二维码
随时随地手机看文章

系统功能

1、实现双机之间的通信

(1)在主机上通过4*4键盘上的键值“1”“2”“3”设定波特率(2400、4800、9600),发给从机,两者正常通信;

(2)从机将采集到的压力信号传到主机,主机通过LCD显示在第一行,我们可以观察到主机的LCD显示的数和从机的保持一致。

(3)主机通过获取按键“5”“6”“7”,改变从机的ADC采样率分别为“10s”“20s”“30s”,由于ADC采样率不易直接观察改变,可将采样率的值通过从机的三个不同颜色的小灯显示。


2、从机通过ADC采样获取压力传感器模拟输出端口的电压值,并将电压值转化为压力值,通过自身的LCD显示;


3、主机获得从机采集的压力值之后,和初始设定的压力值(我设置的是10-12为正常)进行对比,若在设定的压力值之间,LCD第二行显示“

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

单片机源程序如下:

  1. /* Main.c file generated by New Project wizard

  2. *

  3. * Created:   周日 十二月 22 2019

  4. * Processor: PIC18F452

  5. * Compiler:  MPLAB C18

  6. */


  7. #include

  8. #include

  9. #include

  10. #include

  11. #include


  12. #define LCD1602EN PORTBbits.RB3             //定义LCD1602使全能端

  13. #define LCD1602RW PORTBbits.RB4                                //定义LCD1602读写端

  14. #define LCD1602RS PORTBbits.RB5                                //定义LCD1602寄存端(1是数据突破口,0是指令寄存器)

  15. #define DATAPORT  PORTD                                                //数据端口


  16. //*********方向位************

  17. #define ENTRIS   TRISBbits.TRISB3

  18. #define RWTRIS   TRISBbits.TRISB4

  19. #define RSTRIS   TRISBbits.TRISB5

  20. #define DATATRIS   TRISD


  21. void delay(void);

  22. void InitLCD1602(void) ;

  23. void LCD1602cmd(unsigned char LCDcmd);

  24. void LCD1602Write(unsigned char LCDdata);


  25. unsigned char x,y;

  26. int i,j1,j2,j3,j4,k,m;

  27. float temp,v,p;

  28. char res[2];


  29. void main()

  30. {  

  31.     TRISCbits.TRISC6=0;     //设定RC6为TX端口

  32.     TRISCbits.TRISC7=1;

  33.    TRISC=0X80;

  34.    SPBRG=0X19;

  35.      

  36.    //TRISD=0X00;

  37.    TXSTA=0X20;

  38.    RCSTA=0X90;

  39.    

  40.    InitLCD1602();

  41.                   //设置起始位置

  42.    while (1){

  43.      

  44.       while (!DataRdyUSART());

  45.            getsUSART(res,2);

  46.        LCD1602cmd(0x80);

  47.           LCD1602Write(res[0]);

  48.       

  49.       }

  50.       

  51. }



  52. //  A/D convertor采集子程序

  53. void ad_convertor( void )

  54. {


  55.    OpenADC( ADC_FOSC_32 &

  56.             ADC_RIGHT_JUST &

  57.             ADC_5ANA_1REF  &

  58.               ADC_20_TAD ,

  59.             ADC_CH0 &

  60.             ADC_INT_OFF

  61.           );

  62. //  A/D 时钟源,晶振32分频率

  63. //  A/D 转换结果右对齐

  64. //  A/D 参考电压源,电源工作电压

  65. //  通道选择

  66. //  中断关闭,查询模式

  67.     Delay10TCYx( 5 ); // Delay for 50TCY

  68.     ConvertADC(); // Start conversion

  69.     while( BusyADC() ); // Wait for completion

  70.     temp = ReadADC(); // Read result

  71.     CloseADC(); // Disable A/D converter

  72.     //display the result

  73. }

  74. //***************************************************

  75. void InitLCD1602(void)

  76. {

  77.         DATATRIS = 0x00;                                        //设数据口、RS、RW为输出

  78.         DATAPORT = 0x00;                                         //赋初值

  79.         

  80.         ENTRIS   = 0;                                               //设E端口为输出

  81.         RWTRIS   = 0;

  82.         RSTRIS         = 0;

  83.         

  84.         LCD1602RW = 0;                                                //赋初值

  85.         LCD1602EN = 0;                                                //赋初值               

  86.         LCD1602RS = 0;                                                //赋初值                                       

  87.         

  88.         LCD1602cmd(0x38);                                //设置为四线模式   

  89.         LCD1602cmd(0x01);                                //清屏

  90.         LCD1602cmd(0x06);                                //设置为AC加1,显示不发生位移

  91.         LCD1602cmd(0x0C);                                //设置为光标无,显示开,0x0f:光标有且闪烁,显示开


  92.         Delay1KTCYx(2);

  93. }


  94. void LCD1602cmd(unsigned char LCDcmd)

  95. {

  96.                         

  97.         LCD1602EN = 1;                                        //E端拉高

  98.         DATAPORT =LCDcmd;                                //对LCD的数据口PORTD口赋值

  99.         LCD1602RS = 0;                                //是指令,还是数据

  100.         LCD1602EN = 0;                                        //E下降沿读取数据

  101.         Delay1KTCYx(2);                        //2ms左右

  102.       

  103. }


  104. void LCD1602Write(unsigned char LCDdata)

  105. {

  106.                         

  107.         LCD1602EN = 1;                                        //E端拉高

  108.         DATAPORT =LCDdata;                                //对LCD的数据口PORTD口赋值

  109.         LCD1602RS = 1;                                //是指令,还是数据

  110.         LCD1602EN = 0;                                        //E下降沿读取数据

  111.         Delay1KTCYx(2);                        //2mus左右

  112.       

  113. }



  114. void delay(void){

  115.    for(x=255;x>0;x--)

  116.       for(y=255;y>0;y--);

  117.    }


NORMAL”,低于最小压力值显示“LOW”,高于最高压力值显示“HIGH”。并且将这三个状态通过不同颜色的LED显示。

关键字:PIC18F452  Proteus  双机通信  串口通信  波特率 引用地址:PIC18F452+Proteus双机通信 串口通信 键盘更改波特率源程序

上一篇:PIC单片机FFT音乐频谱Proteus仿真程序
下一篇:基于PIC16F877单片机的简易数字电压表设计及proteus仿真

推荐阅读最新更新时间:2024-11-05 13:02

51单片机串口通信的发送与接收
51单片机的串口,是个全双工的串口,发送数据的同时,还可以接收数据。 当串行发送完毕后,将在标志位 TI 置 1,同样,当收到了数据后,也会在 RI 置 1。 无论 RI 或 TI 出现了 1,只要串口中断处于开放状态,单片机都会进入串口中断处理程序。 在中断程序中,要区分出来究竟是发送引起的中断,还是接收引起的中断,然后分别进行处理。 看到过一些书籍和文章,在串口收、发数据的处理方法上,很多人都有不妥之处。 接收数据时,基本上都是使用 中断方式 ,这是正确合理的。 即:每当收到一个新数据,就在中断函数中,把 RI 清零,并用一个变量,通知主函数,收到了新数据。 发送数据时,很多的程序都是使用的 查询方式 ,就是执行 while(T
[单片机]
STM32串口通信(一)
关于STM32串口通信USART的一些个人浅见: 1:对STM32中文数据手册解读之后,相信大家对USART串行通信有些了解,学习51的时候也都接触过,使用串口只要弄明白原理就很简单了 发送和接收数据的过程从图上可以直观的看出 USART串口通信涉及到几个重要的寄存器 1:)状态寄存器 2)数据寄存器 3)波特比率寄存器 例:若要设置比特率为9600,那么DIV就是468.75,则此寄存器的高12位应存值:468,低4位存值:0.75*16=12(十进制小数换算成十六进制小数);最后将整数和小数拼接:BRR=468 4+12;(详细过程可参照源代码;) 4)控制寄存器1: 5)控制寄存
[单片机]
STM32<font color='red'>串口通信</font>(一)
有害气体红外感应及语音警示控制系统的设计
0引言 利用红外感应系统感应附近有无有害气体,当红外感应系统感受到有有害气体接近时,送出持续一段时间的高电平;单片机通过开启中断,启动语音芯片,单片机通过串口通信,从上位机提取的有害气体参数提示给附近人体,并经过与安全值的比较判定当前环境是否安全。对语音芯片的使用,先将必要的文字、数字信息录制进去,放音时,通过单片机自动寻址,把实时参数读取出来。为便于以后系统改进或移植到其他系统,可设计录音、放音电路,通过切换录制不同内容。系统设计友好、方便,给人的信息也更加直接。 1系统总体设计方案 在气体浓度是现有可利用的数据的基础上,考虑了系统的衔接性和可移植性。系统总体方案见图1。 本系统分为四大模块:核心控制模块、语
[单片机]
ARM7与FPGA相结合的应用
  ARM7与FPGA相结合在工业控制和故障检测中的应用   工业控制中往往需要完成多通道故障检测及多通道命令控制(这种多任务设置非常普遍),单独的CPU芯片由于其外部控制接口数量有限而难以直接完成多路检控任务,故利用ARM芯片与FPGA相结合来扩展检控通道是一个非常好的选择。这里介绍用Atmel公司ARM7处理器(AT91FR40162)和ALTERA公司的低成本FPGA芯片(cyclone2)结合使用完成多通道检控任务的一种实现方法。    各部分功能简介   图1为此系统的结构连接框图。如图所示,ARM芯片与FPGA芯片之间通过数据总线、地址总线及读写控制线相连,而与终端PC则通过串口通信;FPGA与目标设备通过命令控
[应用]
TMS320F240与PC机串行通讯的设计
  1 引言   TMS320F240系列是美国TI公司于1997年推出的,专为数字电机控制和其它控制应用系统而设计的16位定点数字信号处理器。它将数字信号处理的高速运算功能与面向电机的强大控制能力结合在一起,从而成为传统的多微处理器单元和多片设 计系统的理想替代品。F240片内外设包括双10位A/D转换器,带有锁相环PLL时钟模块,带中断的看门狗定时器模块,串行通信接口SCI及串行外设接 口SPI,另外,还集成了一个事件管理模块EVM。因此,TMS320F240不仅具有高速数据处理能力,还具有控制和事件管理能力,可完成人机界面、与 上位机进行串行通信等功能。   2 TMS320F240串行通信接口简介   TMS320F
[测试测量]
IAR for AVR_Proteus—联合调制
1)首先是由于IAR for AVR可以产生很多类型的文件。但是在我们所遇到的情况下,只有如下一种设置可以使生成的文件在PROTEUS上得到完美的仿真效果。 下图为详细的设置方法: 两点注意: a、 (这里一定要注意了:它的名字一开始的后缀名不是.d90,那就强制给改掉!!!!! 也不知道是哪位大神给出来的,佩服了) b、 2)就是生成的文件了 果断是.d90文件啊 3)那就是仿真喽 这个不用说就该知道什么意思了~~~,跟以前的Keil和Proteus联合调制差不多的了,一步步走的
[单片机]
IAR for AVR_<font color='red'>Proteus</font>—联合调制
嵌入式实时操作系统μC/OS-II串口通信的设计与实现
ARM是目前嵌入式领域中应用最广泛的RISC微处理器结构,以低成本、低功耗、高性能的特点占据了嵌入式系统应用领域的领先地位,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场。STM32F103VB是基于ARM新内核Cortex-M3的通用微处理器,STM32V评估板是基于该芯片的学习板并集成了仿真调试器(Ulink_Me),可以方便用户快速学习和开发用户程序。目前常见的嵌入式系统有:WinCE、Linux、pSoS、VxWorks和μC/OS-II等。μC/OS-Ⅱ是专门为嵌入式系统应用设计的,具有源码公开、实时性好、可移植裁剪、高效稳定和教学科研免费使用等特点,已经成功移植到8、16、32和64位等多种
[嵌入式]
STM32串口通信printf重定向方法
在源程序中加入如下代码,包含“stdio.h”。 默认使用USART1,确认串口已经初始化成功、 #pragma import(__use_no_semihosting) _sys_exit(int x) { x = x; } struct __FILE { int handle; /* Whatever you require here. If the only file you are using is */ /* standard output using printf() for debugging, no file handling */ /* is r
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved