/*开天斧3 通讯程序测试 2024 6 9 L134 CODE424**/
#include <REG52.H>
#include <intrins.H>
#include "stdio.h"
#define uint unsigned int
#define uchar unsigned char
#define CMD_IDLE 0 //空闲模式
#define CMD_READ 1 //IAP字节读命令
#define CMD_PROGRAM 2 //IAP字节编程命令
#define CMD_ERASE 3 //IAP扇区擦除命令
#define ENABLE_IAP 0x82 //if SYSCLK<20MHz
#define IAP_ADDRESS 0x0000 //EEPROM首地址
uint xdata tab[300];
typedef unsigned char BYTE;
typedef unsigned int WORD;
uchar kcounter,kstatus; //按键计数标志 按键状态标志
sbit OUT1=P2^0; /****输出***/
sbit OUT2=P2^1;
sbit OUT3=P2^2;
sbit OUT4=P2^3;
uchar i,s; //串口接收计数器
sbit KEY_ADD=P3^5;
sbit KEY_DEC=P3^4;
sbit KEY_SET=P3^3;
sbit KEY_ENTER=P3^2;
sbit INTPUT=P1^2;
uchar DAT2=0;
bit Receive_Flag;
/*---------------延时子程序----------------*/
void delay1 (uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<200;j++)
;
}
/******************************************/
void key_reset()
{
kcounter=0; //计数器归零
kstatus=0; //状态计数器归零
delay1(5);
}
/******************************************/
void Key_ValAdd()
{
kcounter++; //按键计数器加一
kstatus++; //按键状态标志加一
delay1(5);
}
/******************************************/
void Key_Clear()
{
kcounter++; //按键计数器加一
kstatus=0; //按键状态标志归零
}
/*------------初始化串口---------------------*/
void InitUart()
{
SCON=0X50; //8位数据,可变波特率
AUXR|=0x01; //串口1选择定时器2为波特率发生器
AUXR|=0X04; //定时器2时钟为Fosc,即1T
T2L=0XE0; //设置定时器处置 110592》9600
T2H=0XFE; //设置定时器处置 110592》9600
AUXR|=0X10; //启动定时器2
TI=1;
EA=1;
}
/*--------UART 中断服务程序----Buff=SBUF---------------*/
void Uart() interrupt 4 using 1
{
if(RI)
{
Receive_Flag=1;
tab[i]=SBUF; //数组下标位置的数据等于SBUF
RI=0; //
i++;
}
}
/************************************/
void Send(uchar temp)
{
unsigned serial;
serial=temp;
SBUF=(uchar)temp;
while(TI!=1);
TI=0;
}
/*------------------主循环程序----------------*/
void main( ) /*主程序开始*/
{ /**加一**/
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
AUXR=0X80; //STC系列的1T 设置
TMOD=0X01;
InitUart(); //初始化串口
ES=1;
Receive_Flag=0; //接收到数据标志置零
P_SW1 = 0x80; //RXD/P3.0, TXD/P3.1
while(1)
{
OUT1=0;
delay1(2000);
OUT1=1;
if(Receive_Flag==1)
{
OUT4=0;
P_SW1 = 0x00; //RXD_3/P1.6, TXD_3/P1.7
delay1(200);
for(s=0;s<i;s++)
{
Send(tab[s]);
}
Receive_Flag=0;
i=0;
delay1(2000);
OUT4=1;
P_SW1 = 0x80; //RXD/P3.0, TXD/P3.1
}
}
}
HMI触摸屏输入数据 单片机接收到切换串口发送到电脑
于 2024-06-10 05:49:08 首次发布