標(biāo)題: STC15單片機(jī)串口不能發(fā)送 [打印本頁(yè)]

作者: xianming    時(shí)間: 2020-3-24 19:42
標(biāo)題: STC15單片機(jī)串口不能發(fā)送
本帖最后由 xianming 于 2020-3-24 19:49 編輯

STC15w4k32s4單片機(jī),用到adc,模擬i2c(OLED12864),串口,我先把a(bǔ)dc和i2c做完了,最后加上串口,本來(lái)以為沒(méi)問(wèn)題了,要成功了結(jié)果單片機(jī)發(fā)送完串口就自動(dòng)復(fù)位了,程序不能繼續(xù)運(yùn)行。
main前面有很多頭文件,挺長(zhǎng)的,不知道有沒(méi)有影響。

貼代碼
//頭文件比較長(zhǎng)
#include <STC15F2K60S2.H>
#include "IOMode.h"
#include "table.h"
#include "OLED.h"
#include "ADC.h"
#include "Serial.h"

#define uchar unsigned char
uchar ge,shi,bai;
static uchar ch;
bit change;
void dispnum(uchar binnum,uchar xy);
void selectxy(uchar X,uchar Y);
void Delay30ms();
void main()
{
uchar i,x,y;
ch=0x00;
IOMode00();
//OLED_Init(0x20,0x00);
//InitADC(0x00,0x0C);
serialinit(11059200,9600);

SBUF=0x20;
while(!TI);
    TI=0;

/*OLED16dot(0,2,0,xytab);
OLED16dot(0,4,1,xytab);
for(i=0;i<5;i++)
{
OLED16dot(16+i*16,0,i,titletab);
}
for(i=0;i<5;i++)
{
OLED16dot(16+i*16,6,i,keytab);
}  */
//OLED816dot(16,2,4,numbertab);
//OLED816dot(16,4,5,numbertab);

//后面不用貼了,上面已經(jīng)出錯(cuò)了
//下面是串口初始化代碼

#ifndef Serial_H
#define Serial_H

#include <intrins.h>

#define ULONG32 unsigned long
#define UINT16  unsigned int
#define UCHAR8  unsigned char

void serialinit(ULONG32 FOSC,UINT16 BAUD)        //參數(shù):晶振頻率(頻率乘1000000=10^6),波特率                                                                                //(最高波特率65535,串口助手65535之內(nèi)最高可選57600)
{
        P_SW1 &= 0x3F;                                //將P_SW1前兩位設(shè)置成00         (P3.0/RxD, P3.1/TxD)
    SCON = 0x50;                //8位可變波特率
    T2L = (65536 - (FOSC/4/BAUD));   //設(shè)置波特率重裝值
    T2H = (65536 - (FOSC/4/BAUD))>>8;
    AUXR = 0x15;                //T2為1T模式, 并啟動(dòng)定時(shí)器2
    //AUXR |= 0x01;               //選擇定時(shí)器2為串口1的波特率發(fā)生器
    ES = 1;                     //使能串口1中斷
    EA = 1;
}

void sendbyte(UCHAR8 PrintByte)
{
        //_push_(ACC);
    //ACC = PrintByte;                  //獲取校驗(yàn)位P (PSW.0)
       
    SBUF = PrintByte;                 //寫數(shù)據(jù)到UART數(shù)據(jù)寄存器   
        while(!TI);
    TI=0;
        //_pop_(ACC);                 
}

#endif
沒(méi)有用上最后sendbyte
大家?guī)臀铱纯,好長(zhǎng)時(shí)間沒(méi)解決了


作者: lovexulu    時(shí)間: 2020-3-24 23:09

手冊(cè)中的。瞅瞅是不是這個(gè)情況

作者: wo4fisher    時(shí)間: 2020-3-24 23:48
STC isp下載程序那個(gè)軟件里有各種stc單片機(jī)不同功能的程序模板,直接拿來(lái)可用。建議你參考那個(gè)去進(jìn)行學(xué)習(xí)。
作者: lmn2005    時(shí)間: 2020-3-25 08:04
我有一次使用STC15F104w模擬串口、模擬紅外接收也出現(xiàn)復(fù)位,后來(lái)確定是128字節(jié)RAM使用率太高,你編譯后檢查一下結(jié)果,看是否也是同一個(gè)道理。
作者: xianming    時(shí)間: 2020-3-25 12:40
lovexulu 發(fā)表于 2020-3-24 23:09
手冊(cè)中的。瞅瞅是不是這個(gè)情況

你好,我只是寫了SBUF=0x20,程序就出問(wèn)題,自動(dòng)復(fù)位了,我并沒(méi)有長(zhǎng)調(diào)用。
作者: xianming    時(shí)間: 2020-3-25 12:41
wo4fisher 發(fā)表于 2020-3-24 23:48
STC isp下載程序那個(gè)軟件里有各種stc單片機(jī)不同功能的程序模板,直接拿來(lái)可用。建議你參考那個(gè)去進(jìn)行學(xué)習(xí)。

我把模板拼湊出來(lái)就不行了
作者: xianming    時(shí)間: 2020-3-25 17:42
新新科技 發(fā)表于 2020-3-25 08:04
我有一次使用STC15F104w模擬串口、模擬紅外接收也出現(xiàn)復(fù)位,后來(lái)確定是128字節(jié)RAM使用率太高,你編譯后檢查 ...

你好,我只用了大約40字節(jié)ram,但是有一些像unsigned char code tab[] =這樣的字庫(kù),不知道有沒(méi)有影響。
作者: xianming    時(shí)間: 2020-3-26 16:21
我的問(wèn)題還有誰(shuí)能幫我看看啊,第二個(gè)帖了
作者: xianming    時(shí)間: 2020-3-28 11:04
誰(shuí)能有辦法啊,幫我看看
作者: xianming    時(shí)間: 2020-4-6 10:25
帖子沉了




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