欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: STC8H8K64U使用內(nèi)部晶振異常,只有8M [打印本頁]

作者: zhujiang4812    時(shí)間: 2025-7-13 00:46
標(biāo)題: STC8H8K64U使用內(nèi)部晶振異常,只有8M
不帶晶振,如下編譯完成,燒錄時(shí)顯示頻率只有8M,怎么更改到11.059MHz

本例程基于STC8H8K64U為主控芯片的實(shí)驗(yàn)箱9進(jìn)行編寫測(cè)試,STC8G、STC8H系列芯片可通用參考.

串口1全雙工中斷方式收發(fā)通訊程序。
通過PC向MCU發(fā)送數(shù)據(jù), MCU收到后通過串口1把收到的數(shù)據(jù)原樣返回.

用定時(shí)器做波特率發(fā)生器,建議使用1T模式(除非低波特率用12T),并選擇可被波特率整除的時(shí)鐘頻率,以提高精度。

下載時(shí), 選擇時(shí)鐘 22.1184MHz (用戶可自行修改頻率).

******************************************/

#include "stc8h.h"       //包含此頭文件后,不需要再包含"reg51.h"頭文件

#define MAIN_Fosc       22118400L   //定義主時(shí)鐘(精確計(jì)算115200波特率)


typedef     unsigned char   u8;
typedef     unsigned int    u16;
typedef     unsigned long   u32;


#define     Baudrate1           115200L
#define     UART1_BUF_LENGTH    64


u8  TX1_Cnt;    //發(fā)送計(jì)數(shù)
u8  RX1_Cnt;    //接收計(jì)數(shù)
bit B_TX1_Busy; //發(fā)送忙標(biāo)志

u8  xdata RX1_Buffer[UART1_BUF_LENGTH]; //接收緩沖


void UART1_config(u8 brt);   // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
void PrintString1(u8 *puts);


//========================================================================
// 函數(shù): void main(void)
// 描述: 主函數(shù)。
// 參數(shù): none.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 備注:
//========================================================================
void main(void)
{
    P_SW2 |= 0x80;  //擴(kuò)展寄存器(XFR)訪問使能

    P0M1 = 0x30;   P0M0 = 0x30;   //設(shè)置P0.4、P0.5為漏極開路(實(shí)驗(yàn)箱加了上拉電阻到3.3V)
    P1M1 = 0x30;   P1M0 = 0x30;   //設(shè)置P1.4、P1.5為漏極開路(實(shí)驗(yàn)箱加了上拉電阻到3.3V)
    P2M1 = 0x3c;   P2M0 = 0x3c;   //設(shè)置P2.2~P2.5為漏極開路(實(shí)驗(yàn)箱加了上拉電阻到3.3V)
    P3M1 = 0x50;   P3M0 = 0x50;   //設(shè)置P3.4、P3.6為漏極開路(實(shí)驗(yàn)箱加了上拉電阻到3.3V)
    P4M1 = 0x3c;   P4M0 = 0x3c;   //設(shè)置P4.2~P4.5為漏極開路(實(shí)驗(yàn)箱加了上拉電阻到3.3V)
    P5M1 = 0x0c;   P5M0 = 0x0c;   //設(shè)置P5.2、P5.3為漏極開路(實(shí)驗(yàn)箱加了上拉電阻到3.3V)
    P6M1 = 0xff;   P6M0 = 0xff;   //設(shè)置為漏極開路(實(shí)驗(yàn)箱加了上拉電阻到3.3V)
    P7M1 = 0x00;   P7M0 = 0x00;   //設(shè)置為準(zhǔn)雙向口

    UART1_config(1);    // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
    EA = 1; //允許總中斷

    PrintString1("STC8H8K64U UART1 Test Programme!\r\n");  //UART1發(fā)送一個(gè)字符串

    while (1)
    {
        if((TX1_Cnt != RX1_Cnt) && (!B_TX1_Busy))   //收到數(shù)據(jù), 發(fā)送空閑
        {
            SBUF = RX1_Buffer[TX1_Cnt];     //把收到的數(shù)據(jù)遠(yuǎn)樣返回
            B_TX1_Busy = 1;
            if(++TX1_Cnt >= UART1_BUF_LENGTH)   TX1_Cnt = 0;
        }
    }
}


//========================================================================
// 函數(shù): void PrintString1(u8 *puts)
// 描述: 串口1發(fā)送字符串函數(shù)。
// 參數(shù): puts:  字符串指針.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 備注:
//========================================================================
void PrintString1(u8 *puts) //發(fā)送一個(gè)字符串
{
    for (; *puts != 0;  puts++)     //遇到停止符0結(jié)束
    {
        SBUF = *puts;
        B_TX1_Busy = 1;
        while(B_TX1_Busy);
    }
}

//========================================================================
// 函數(shù): SetTimer2Baudraye(u16 dat)
// 描述: 設(shè)置Timer2做波特率發(fā)生器。
// 參數(shù): dat: Timer2的重裝值.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 備注:
//========================================================================
void SetTimer2Baudraye(u16 dat)  // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
{
    AUXR &= ~(1<<4);    //Timer stop
    AUXR &= ~(1<<3);    //Timer2 set As Timer
    AUXR |=  (1<<2);    //Timer2 set as 1T mode
    T2H = dat / 256;
    T2L = dat % 256;
    IE2  &= ~(1<<2);    //禁止中斷
    AUXR |=  (1<<4);    //Timer run enable
}

//========================================================================
// 函數(shù): void UART1_config(u8 brt)
// 描述: UART1初始化函數(shù)。
// 參數(shù): brt: 選擇波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 備注:
//========================================================================
void UART1_config(u8 brt)    // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
{
    /*********** 波特率使用定時(shí)器2 *****************/
    if(brt == 2)
    {
        AUXR |= 0x01;       //S1 BRT Use Timer2;
        SetTimer2Baudraye(65536UL - (MAIN_Fosc / 4) / Baudrate1);
    }

    /*********** 波特率使用定時(shí)器1 *****************/
    else
    {
        TR1 = 0;
        AUXR &= ~0x01;      //S1 BRT Use Timer1;
        AUXR |=  (1<<6);    //Timer1 set as 1T mode
        TMOD &= ~(1<<6);    //Timer1 set As Timer
        TMOD &= ~0x30;      //Timer1_16bitAutoReload;
        TH1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) / 256);
        TL1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) % 256);
        ET1 = 0;    //禁止中斷
        INTCLKO &= ~0x02;   //不輸出時(shí)鐘
        TR1  = 1;
    }
    /*************************************************/

    SCON = (SCON & 0x3f) | 0x40;    //UART1模式, 0x00: 同步移位輸出, 0x40: 8位數(shù)據(jù),可變波特率, 0x80: 9位數(shù)據(jù),固定波特率, 0xc0: 9位數(shù)據(jù),可變波特率
//  PS  = 1;    //高優(yōu)先級(jí)中斷
    ES  = 1;    //允許中斷
    REN = 1;    //允許接收
    P_SW1 &= 0x3f;
    P_SW1 |= 0x00;      //UART1 switch to, 0x00: P3.0 P3.1, 0x40: P3.6 P3.7, 0x80: P1.6 P1.7, 0xC0: P4.3 P4.4
//  PCON2 |=  (1<<4);   //內(nèi)部短路RXD與TXD, 做中繼, ENABLE,DISABLE

    B_TX1_Busy = 0;
    TX1_Cnt = 0;
    RX1_Cnt = 0;
}


//========================================================================
// 函數(shù): void UART1_int (void) interrupt UART1_VECTOR
// 描述: UART1中斷函數(shù)。
// 參數(shù): nine.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 備注:
//========================================================================
void UART1_int (void) interrupt 4
{
    if(RI)
    {
        RI = 0;
        RX1_Buffer[RX1_Cnt] = SBUF;
        if(++RX1_Cnt >= UART1_BUF_LENGTH)   RX1_Cnt = 0;    //防溢出
    }

    if(TI)
    {
        TI = 0;
        B_TX1_Busy = 0;
    }
}

111.jpg (85.41 KB, 下載次數(shù): 0)

111.jpg

112.jpg (45.25 KB, 下載次數(shù): 0)

112.jpg

作者: lmn2005    時(shí)間: 2025-7-16 14:42
1、用最新版本的ISP2、把燒錄波特率調(diào)低點(diǎn)試試




作者: WL0123    時(shí)間: 2025-7-16 16:18
你說的情況從沒遇過,試試下載時(shí)除了選擇【不調(diào)節(jié),使用內(nèi)部預(yù)置的頻率】外,其他選項(xiàng)全部默認(rèn)。



作者: rundstedt    時(shí)間: 2025-7-16 16:51
那就是芯片不行,將就著用吧,不是11.0592一樣可以用1串口。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1