上位机程序
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication13
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
serialPort1.PortName = "COM7";
serialPort1.BaudRate = 4800;
serialPort1.Open();
Byte[] BSendTemp = new Byte[1]; //建立临时字节数组对象
BSendTemp[0] = Byte.Parse(this.textBox1.Text);//由文本框读入想要发送的数据
this.serialPort1.Write(BSendTemp, 0, 1);//发送数据
serialPort1.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
}
}
单片机程序
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit PWM=P2^0;// P2.0输出pwm
uchar time; // 定义占空比的变量
unsigned char ch;
void main()
{
TMOD=0x01;//定时器0工作方式1
TH0=0x0dc;//(65536-10)/256;//赋初值定时
TL0=0x00;//(65536-10)%256;//0.01ms
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1;
while(1)
{
}
}
void tim0() interrupt 1
{
TR0=0;//赋初值时,关闭定时器
TH0=0x0DC;//(65536-10)/256;//赋初值定时
TL0=0x00;//(65536-10)%256;//0.01ms
TR0=1;//打开定时器
time++;
if(time>=100) //1khz
time=0;
if(time<=ch)
PWM=1;
else PWM=0;
}
void Usart() interrupt 4
{
if (RI)
{
RI = 0 ;
ch=SBUF;
}
}