找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1809|回復: 3
打印 上一主題 下一主題
收起左側

請大神們幫我看看單片機程序我這樣子寫改變脈寬是否正確和兩個定時器使用

[復制鏈接]
跳轉到指定樓層
樓主
ID:981835 發(fā)表于 2022-12-2 16:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
入門小生求教各位!單片機源程序如下:
#include "STC15W4k.h"
#include <intrins.h>                                        // 加入此頭文件后,可使用_nop_庫函數(shù)
#include <string.h>           // 加入此頭文件后,可使用strstr庫函數(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;    //寫入預置值
        ET0 =1;  //允許定時器0中斷
        TR0=1;     
}
void UART_init()
{
          SCON = 0x50;                             //8位數(shù)據(jù),可變波特率// 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;//保存數(shù)據(jù)
                        rec_flag =1;
         }
         if(TI)
         {
                        TI=0;
         }
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:161164 發(fā)表于 2022-12-2 18:13 | 只看該作者
rec_data每次接收只能存一個字節(jié)
字符串不能用==作比較,要用strcmp或memcmp
回復

使用道具 舉報

板凳
ID:1052836 發(fā)表于 2022-12-2 18:37 | 只看該作者
很不錯的內容 接受了 好好學習下
回復

使用道具 舉報

地板
ID:981835 發(fā)表于 2022-12-5 09:20 | 只看該作者
lkc8210 發(fā)表于 2022-12-2 18:13
rec_data每次接收只能存一個字節(jié)
字符串不能用==作比較,要用strcmp或memcmp

好 受教了,謝謝
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表