|
入門小生求教各位!單片機(jī)源程序如下:
#include "STC15W4k.h"
#include <intrins.h> // 加入此頭文件后,可使用_nop_庫(kù)函數(shù)
#include <string.h> // 加入此頭文件后,可使用strstr庫(kù)函數(shù)
#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 //系統(tǒng)頻率
#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() //串口引腳選擇函數(shù)
{
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; //寫入預(yù)置值
ET0 =1; //允許定時(shí)器0中斷
TR0=1;
}
void UART_init()
{
SCON = 0x50; //8位數(shù)據(jù),可變波特率// TMOD &= 0x01;
AUXR |= 0x14; //定時(shí)器時(shí)鐘1T模式
T2L = (65536 - (FOSC/4/BAUD)); //設(shè)置波特率重裝值
T2H = (65536 - (FOSC/4/BAUD))>>8;
// ET1 = 1;
AUXR |= 0x10; //定時(shí)器2開始計(jì)時(shí)
ES =1; //串口開關(guān)
}
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; //中斷總開關(guān)
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; //設(shè)置定時(shí)初值
count++;
if(count>=100)
{
count =0;
}
if(PWM_width>count)
{
PWM=0;
}else PWM =1;
}
/*----------------------------
UART 中斷服務(wù)程序
-----------------------------*/
void Uart() interrupt 4
{
if(RI)
{
RI=0; //接收中斷標(biāo)志位清0
rec_data =SBUF;//保存數(shù)據(jù)
rec_flag =1;
}
if(TI)
{
TI=0;
}
}
|
|