电路原理图如下:
程序说明
接线:MAX485-1 D+ 链接 MAX485-2 D+ ;MAX485-1 D- 链接 MAX485-2 D-
功能:串口一 自动发送一个tab数据,串口二接收,接收后数据显示在P0口的led灯上
串口二 自动发送一个tab数据,串口一接收,接收后数据显示在p0口的led灯上
按key1,P0口显示0xAA
按key2,P0口显示0x55
按key3,P0口显示0xf0
按key4,P0口显示0x0f
*********************************************************************/
#include "STC12C5A60S2.h" //库文件
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
/********************************************************************
初始定义
*********************************************************************/
uchar dat1=0,dat2=0;
uchar tab[8]={0xfe,0xfd,0xfB,0xf7,0xef,0xdf,0xBf,0x7f};
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
/********************************************************************
串口初始化
*********************************************************************/
void init ()
{
TMOD = 0x20; //定时器1产生波特率
SCON = 0x50; //方式1,8位数据,波特率可变
TH1= TL1 = 0xfd; //波特率 9600
S2CON= 0x50; //方式1,八位数据,可变波特率
BRT= 0XFD; //设置波特率9600
TR1= 1; //启动定时器产生波特率
AUXR= 0x10; //启动波特率发生器
IP= 0x00; //优先级默认
EA = 1; //开总中断
ES= 1; //开串口1中断
IE2=0x01; //开串口2中断
}
/********************************************************************
串口一 发送一个字符
*********************************************************************/
void uart1_txd(uchar x)
{
SBUF = x;
}
/********************************************************************
串口二 发送一个字符
*********************************************************************/
void uart2_txd(uchar x)
{
S2BUF = x;
}
/********************************************************************
*********************************************************************/
void delay ( uint t )
{
uint i,j;
for( i=0; i } /******************************************************************** 主函数 *********************************************************************/ void main() { uchar i; init(); for(i=0;i<8;i++) { uart1_txd(tab[i]);//串口一发送数据 delay(500); P0=dat2; //串口二接收数据在led灯显示 delay(500); uart2_txd(tab[7-i]); //串口二发送数据 delay(500); P0=dat1; //串口一接收数据在led灯显示 delay(500); } while(1) { if(key1==0){delay(20);while(!key1){P0=0xAA;} } if(key2==0){delay(20);while(!key2){P0=0x55;} } if(key3==0){delay(20);while(!key3){P0=0xf0;} } if(key4==0){delay(20);while(!key4){P0=0x0f;} } } } /******************************************************************** 串口二 发送接收中断函数 *********************************************************************/ void uart2_isr() interrupt 8 { if( S2CON & 0x01 ) { S2CON &= ~0x01; dat2= S2BUF; } if( S2CON & 0x02 ) { S2CON &= ~0x02; } } /******************************************************************** 串口一 发送接收中断函数 *********************************************************************/ void uart_isr() interrupt 4 { if( RI ) RI = 0; dat1 = SBUF; if( TI ) TI = 0; } /******************************************************************** 结束 *********************************************************************/
上一篇:51单片机数字频率计仿真(可按键切换量程)
下一篇:单片机6位数电子密码锁源码+PCB+仿真原理图设计(可改密码
推荐阅读最新更新时间:2024-11-01 17:59
设计资源 培训 开发板 精华推荐
- MIC4605-1YM EV,具有单 PWM 输入的 MIC4605-1YM 半桥 MOSFET 驱动器的评估板
- LTC2862ACS8-2 PROFIBUS 兼容线路接口的典型应用
- DC2023A,使用 LTM2987CY 16 电源管理器的演示板
- 使用 Analog Devices 的 LT3091HT7 的参考设计
- STM32MP157C MPU的探索套件
- AS5600 编码器
- AP2132 2A CMOS LDO REGULATOR固定版典型应用
- 使用 ROHM Semiconductor 的 BD4942 的参考设计
- NCP130BMX120TCGEVB:NCP130BMX120TCG 偏置轨 LDO 稳压器演示板
- 使用 NXP Semiconductors 的 MC32BC3770CS 的参考设计