找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 874|回复: 3
打印 上一主题 下一主题
收起左侧

请大神们帮我看看单片机程序我这样子写改变脉宽是否正确和两个定时器使用

[复制链接]
跳转到指定楼层
楼主
ID:981835 发表于 2022-12-2 16:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
入门小生求教各位!单片机源程序如下:
#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;
         }
}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2022-12-2 18:13 | 只看该作者
rec_data每次接收只能存一个字节
字符串不能用==作比较,要用strcmp或memcmp
回复

使用道具 举报

板凳
ID:1052836 发表于 2022-12-2 18:37 | 只看该作者
很不错的内容 接受了 好好学习下
回复

使用道具 举报

地板
ID:981835 发表于 2022-12-5 09:20 | 只看该作者
lkc8210 发表于 2022-12-2 18:13
rec_data每次接收只能存一个字节
字符串不能用==作比较,要用strcmp或memcmp

好 受教了,谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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