找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2078|回复: 0
收起左侧

求助proteus串口通信,主要功能是蓝牙控制led亮度,但是在proteus总是仿真不出来,...

[复制链接]
ID:578948 发表于 2020-6-11 11:21 | 显示全部楼层 |阅读模式
主要功能是蓝牙控制led亮度,但是在proteus总是仿真不出来,串口通信没有反应
代码和仿真图如下
#include "reg51.h"
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char UART_data; //定义串口接收数据变量
sbit PWM=P1^0;
unsigned char LD;//亮度位 0-100调节
uchar time=0;
bit flag;//变化标志位
void initTimer(void)
{
TMOD=0x01;
TH0=(65536-10)/256;//赋初值定时
TL0=(65536-10)%256;//0.01ms
}

void initUart(void)
{
TMOD|=0x20;
SCON=0x50;
PCON = 0x00;
TH1=0xfd;
TL1=0xfd;
TR1=1;
ET1=1;
ES=1 ;
REN = 1;
RI=0;
}

void uart(void) interrupt 4
{
if(RI)
{
ES=0; //接收完毕关闭一下,用再打开,避免中断乱开
RI=0;//令接收中断标志位为0(软件清零)
UART_data=SBUF;
ES=1;

if(UART_data == 1){if(LD != 100){ flag=1;LD = LD+10;}}//串口接收到1,增加亮度
if(UART_data == 2){if(LD != 0){ flag=1;LD = LD-10; }} //串口接收到2,减少亮度
if(UART_data == 3){if(LD != 0){ flag=1;LD = 0; }}//串口接收到3,改变亮度为0 即关灯
if(UART_data == 4){if(LD != 100){ flag=1;LD = 50; }}//串口接收到4,改变亮度为50;即开灯
}
}
void timer0(void) interrupt 1
{
TR0=0;//赋初值时,关闭定时器
TH0=(65536-10)/256;//赋初值定时
TL0=(65536-10)%256;//0.01ms
TR0=1;//打开定时器
time++;
}

void main(void)
{
LD = 0;//初始亮度
flag = 0;
//IP=0X10;
initTimer();
initUart();
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(time>=100)//PWM周期等于100*0.01ms
{
time=0;
}
if(time < LD)
{
PWM=1;
}
else
{
PWM=0;
}

}
}
1591845666(1).jpg


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表