入门小生求教各位!单片机源程序如下:
#include "STC15W4k.h"
#include <intrins.h> // 加入此头文件后,可使用_nop_库函数
#include <string.h> // 加入此头文件后,可使用strstr库函数
#include <stdio.h>
sbit PWM = P3^7;
unsigned char count=0;
unsigned int PWM_width=0;
#define S1_S0 0x00 //P_SW3.0
#define S1_S1 0x00 //P_SW3.1
#define FOSC 11059200L //系统频率
#define BAUD 9600 //串口波特率
unsigned char i;
unsigned int rec_data;
float buf;
bit rec_flag;
void delay(unsigned char i)
{
unsigned char j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void qie_huan() //串口引脚选择函数
{
ACC = P_SW1;
ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0
P_SW1 = ACC; //(P3.0/RxD, P3.1/TxD)
}
void Time0_Init()
{
TMOD |= 0x01;
//IE = 0x82;
TH0 = 0xff; // 100us 中断
TL0 = 0xa4; //写入预置值
ET0 =1; //允许定时器0中断
TR0=1;
}
void UART_init()
{
SCON = 0x50; //8位数据,可变波特率// TMOD &= 0x01;
AUXR |= 0x14; //定时器时钟1T模式
T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
T2H = (65536 - (FOSC/4/BAUD))>>8;
// ET1 = 1;
AUXR |= 0x10; //定时器2开始计时
ES =1; //串口开关
}
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;
P6M0 = 0x00;
P6M1 = 0x00;
P7M0 = 0x00;
P7M1 = 0x00;
qie_huan();
Time0_Init();
UART_init();
EA =1; //中断总开关
PWM_width = 30;
while(1)
{
if(rec_flag == 1)
{
if(rec_data=="forward")
{
PWM_width=PWM_width+30;
}
for(i=0;i<sizeof(rec_data);i++)
{
SBUF = rec_data;
}
rec_flag=0;
}
}
}
void Time0_Int() interrupt 1 //100us
{
TH0 = 0xff;
TL0 = 0xa4; //设置定时初值
count++;
if(count>=100)
{
count =0;
}
if(PWM_width>count)
{
PWM=0;
}else PWM =1;
}
/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4
{
if(RI)
{
RI=0; //接收中断标志位清0
rec_data =SBUF;//保存数据
rec_flag =1;
}
if(TI)
{
TI=0;
}
}
|