NEC 78k0 串口通信与VB上位机实现

5星 · 超过95%的资源 需积分: 9 20 下载量 7 浏览量 更新于2024-09-20 收藏 34KB DOC 举报
"NEC 78k0 串口与上位机VB通讯程序的实现细节及代码示例" 在微控制器编程中,串行通信是一种常见且重要的通信方式,用于设备间的简单数据交换。本资源涉及的是NEC 78k0系列微控制器与上位机(通常为个人计算机)之间的串口通信程序。该程序涉及到的主要知识点包括串口配置、中断处理以及VB(Visual Basic)上位机程序的交互。 1. **NEC 78k0 串口通信**: - NEC 78k0系列是NEC公司生产的一系列8位微控制器,它们具有内置的串行通信接口(UART),可用于与外部设备进行串行通信。 - 串口通信的基本参数包括波特率、数据位、停止位和校验位。在代码中,这些参数需要通过配置微控制器的特殊功能寄存器(SFRs)来设定。 2. **串口配置**: - 在给出的代码片段中,`init_cpu()`函数可能是用于初始化CPU和串口的。`OSCCTL`寄存器被设置为0x40,这通常用于设置系统时钟频率,从而确定串口的波特率。 - `PCC`寄存器的设置可能用于开启或关闭某些端口引脚,这里设置为0x00,可能是为了配置串口引脚作为输入或输出。 3. **中断处理**: - 串口通信常使用中断来处理接收和发送事件,以避免持续轮询导致的处理器资源浪费。代码中的`#pragma interrupt INTSR6 interpulseR`和`#pragma interrupt INTST6 interpulseT`是针对串口接收(RX)和发送(TX)中断的声明。 - 在中断服务例程中,会处理接收到的数据或准备要发送的数据。 4. **变量定义**: - 在中断服务例程中,定义了几个unsigned char类型的变量,如`a`, `b`, `c`, `d`, `i`, `k`, `ipp`和数组`tttt[200]`,这些可能用于存储临时数据、状态标志或接收缓冲区。 5. **VB上位机通信**: - 在上位机端,通常使用编程语言如VB来建立一个串口通信的程序,设置串口号、波特率等参数,并通过调用读写函数来发送和接收数据。 - VB的`SerialPort`类可以方便地处理串口通信,包括打开、关闭串口,设置通信参数,以及读写数据事件的处理。 这个资源提供了一个从NEC 78k0微控制器到VB上位机的串口通信实例,涵盖了硬件初始化、中断处理和上位机编程的基本概念。实际应用中,开发者需要根据具体需求调整波特率、中断处理逻辑,并确保VB端的程序能够正确响应微控制器发送的数据。

优化这段代码#include <REGX52.H> #include "lcd1602.h" #include "send_IR.h" #include "notsend_IR.h" #include "keybored.h" #include "Delay.h" sbit IR_EN = P2^0; void Send_NEC_0() { NotSend_IR(19); Send_IR(19); } void Send_NEC_1() { NotSend_IR(60); Send_IR(19); } void send(unsigned char s1,unsigned char s2) { unsigned char temp,i; Send_NEC_1(); Send_NEC_0(); Send_NEC_1(); Send_NEC_1(); Send_NEC_0(); Send_NEC_0(); Send_NEC_1(); Send_NEC_0(); Send_NEC_0(); Send_NEC_1(); Send_NEC_0(); Send_NEC_0(); Send_NEC_1(); Send_NEC_1(); Send_NEC_0(); Send_NEC_1(); temp = s1 & 0x001; for(i = 0;i<12;i++) { if(temp) { Send_NEC_1(); } else { Send_NEC_0(); } temp = temp>>1; } Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); temp = s2 & 0x001; for(i = 0;i<12;i++) { if(temp) { Send_NEC_1(); } else { Send_NEC_0(); } temp = temp>>1; } //????? Send_NEC_1(); Send_NEC_1(); Send_NEC_1(); Send_NEC_1(); } void Send1(unsigned char s1,unsigned char s2) { Send_IR(167); NotSend_IR(167); Send_IR(167); send(s1,s2); Send_IR(167); NotSend_IR(167); Send_IR(167); send(s1,s2); Send_IR(167); NotSend_IR(167); Send_IR(167); Send_NEC_1(); Send_NEC_1(); Send_NEC_0(); Send_NEC_1(); Send_NEC_0(); Send_NEC_1(); Send_NEC_0(); Send_NEC_1(); Send_NEC_0(); Send_NEC_1(); Send_NEC_1(); Send_NEC_0(); Send_NEC_0(); Send_NEC_1(); Send_NEC_1(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_1(); Send_NEC_0(); Send_NEC_0(); Send_NEC_1(); Send_NEC_0(); Send_NEC_1(); Send_NEC_0(); }

2023-05-30 上传