久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

MCU進入串口中斷后,得到一個時間,但是這個值別的地方用不起來,是作用域的問題嗎?

[復制鏈接]
跳轉到指定樓層
樓主
ID:980872 發表于 2022-3-18 13:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位大神,我用的是C8051F330的單片機,串口發送和接收都沒有問題,我在進入串口中斷后,讀串口,把串口讀到的值賦給全局變量time,如果讀到的是F1,延時函數就delay()就是5s,但是好像不起作用,不知道是不是time的作用域有問題?
#include <c8051f330.h>                 // SFR declarations
#include <stdio.h>

//-----------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------

#define SYSTEMCLOCK      24500000           // SYSCLK frequency in Hz
#define BAUDRATE             9600           // Baud rate of UART in bps


//-----------------------------------------------------------------------------
// Function PROTOTYPES
//-----------------------------------------------------------------------------

void SYSCLK_Init (void);
void UART0_Init (void);
void PORT_Init (void);
void Timer2_Init (int);

//-----------------------------------------------------------------------------
// Global Variables
//-----------------------------------------------------------------------------


char Byte,flag;

unsigned char temp1;

unsigned int time;

//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void delay()
{
unsigned int i,j;
        for(i=0;i<time;i++)//100和30000約1s
                {
                        for(j=0;j<30000;j++)//30000是0.008s
                        {
                        
                        }
                }
}


void main (void)
{
                P1=0x00;
        temp1=0x00;
        time=1500;
        PCA0MD &= ~0x40;                    // WDTE = 0 (clear watchdog timer
                                       // enable)
   PORT_Init();                        // Initialize Port I/O
   SYSCLK_Init ();                     // Initialize Oscillator
   UART0_Init();

   EA = 1;
   while(1)
   {
               
                if(temp1<101)//<100
                                {
                                        P1=temp1;
                                                                                                

                        SBUF0=temp1;
                        
                        while(!TI0);
                                TI0=0;        
                                        delay();
                                        temp1++;
                                }
                                else        if(temp1==101)
                                        {        
                                                
                                                temp1=0x80;
                                                
                                                for(temp1=0x80;temp1<0xe5;temp1++)
                                                {
                                                        P1=temp1;
                                                                delay();
                                                        SBUF0=temp1;
                        while(!TI0);
                                                                                TI0=0;
                                                }

                                                        temp1=0x00;
                                        }                                
   }
}


void PORT_Init (void)
{
   P0MDOUT |= 0x10;                    // Enable UTX as push-pull output
        P1MDOUT |= 0xff;
   XBR0    = 0x01;                     // Enable UART on P0.4(TX) and P0.5(RX)
   XBR1    = 0x40;                     // Enable crossbar and weak pull-ups
}

void SYSCLK_Init (void)
{
   OSCICN |= 0x03;                     // Configure internal oscillator for
                                       // its maximum frequency
   RSTSRC  = 0x04;                     // Enable missing clock detector
}


void UART0_Init (void)
{
   SCON0 = 0x10;                       // SCON0: 8-bit variable bit rate
                                       //        level of STOP bit is ignored
                                       //        RX enabled
                                       //        ninth bits are zeros
                                       //        clear RI0 and TI0 bits
   if (SYSTEMCLOCK/BAUDRATE/2/256 < 1) {
      TH1 = -(SYSTEMCLOCK/BAUDRATE/2);
      CKCON &= ~0x0B;                  // T1M = 1; SCA1:0 = xx
      CKCON |=  0x08;
   } else if (SYSTEMCLOCK/BAUDRATE/2/256 < 4) {
      TH1 = -(SYSTEMCLOCK/BAUDRATE/2/4);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 01
      CKCON |=  0x01;
   } else if (SYSTEMCLOCK/BAUDRATE/2/256 < 12) {
      TH1 = -(SYSTEMCLOCK/BAUDRATE/2/12);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 00
   } else {
      TH1 = -(SYSTEMCLOCK/BAUDRATE/2/48);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 10
      CKCON |=  0x02;
   }

   TL1 = TH1;                          // init Timer1
   TMOD &= ~0xf0;                      // TMOD: timer 1 in 8-bit autoreload
   TMOD |=  0x20;
   TR1 = 1;                            // START Timer1   IP |= 0x10;                         // Make UART high priority
   ES0 = 1;                            // Enable UART0 interrupts

}

void UART0_Interrupt (void) interrupt 4
{

unsigned int ab;

   if(RI0==1)
                {
                 RI0 = 0;                           // Clear interrupt flag

      Byte = SBUF0;                      // Read a character from UART
                 
                        P1=Byte;
                        
                        
                        SBUF0=Byte;
                        while(!TI0);
                        TI0=0;
                        if(Byte==0xF1)
                                {
                                time=500;
                                }
                                        else if(Byte==0xF2)
                                                {
                                                        time=1000;
                                                }
                                                                else if(Byte==0xF3)
                                                                        {
                                                                                time=1500;
                                                                        }
                                                                                else if(Byte==0xF4)
                                                                                {
                                                                                        time=2000;
                                                                                }
                                                                                        else
                                                                                                {
                                                                                                         P1=Byte;
                                                                                                }
                        flag=1;
                }
   }


        



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

使用道具 舉報

沙發
ID:980872 發表于 2022-3-18 15:22 | 只看該作者
是Byte的類型不對,改成unsigned char就行了

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色在线免费视频 | 精品网 | 久久人体视频 | 中文字幕日韩欧美 | 国产综合视频 | 福利片在线 | 亚洲欧美日韩国产综合 | 九九热热九九 | 日韩在线中文字幕 | 午夜国产羞羞视频免费网站 | 日本超碰| 国产亚洲精品美女久久久久久久久久 | 国产一区二区三区 | 亚洲品质自拍视频网站 | 99久久精品国产麻豆演员表 | 日本人做爰大片免费观看一老师 | 一区在线观看 | 99精品欧美一区二区三区综合在线 | 亚洲成人一区二区三区 | 色天天综合| 伊人久久精品 | 亚洲免费毛片 | 黄色毛片视频 | 免费美女网站 | 99在线精品视频 | 日韩在线国产 | 一区二区三区亚洲 | 天天干天天爱天天 | 日韩免费高清视频 | 久久久精品影院 | 综合激情久久 | 视频在线一区二区 | 国产一区二区三区在线观看免费 | 婷婷综合色 | 久久久xx| 九九热在线精品视频 | 欧美精品三区 | 日韩在线中文 | aaaa日韩| 精品成人在线 | 国产乱精品一区二区三区 |