本帖最后由 xianming 于 2020-3-24 19:49 编辑
STC15w4k32s4单片机,用到adc,模拟i2c(OLED12864),串口,我先把adc和i2c做完了,最后加上串口,本来以为没问题了,要成功了结果单片机发送完串口就自动复位了,程序不能继续运行。
main前面有很多头文件,挺长的,不知道有没有影响。
贴代码
//头文件比较长
#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);
//后面不用贴了,上面已经出错了
//下面是串口初始化代码
#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) //参数:晶振频率(频率乘1000000=10^6),波特率 //(最高波特率65535,串口助手65535之内最高可选57600)
{
P_SW1 &= 0x3F; //将P_SW1前两位设置成00 (P3.0/RxD, P3.1/TxD)
SCON = 0x50; //8位可变波特率
T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
T2H = (65536 - (FOSC/4/BAUD))>>8;
AUXR = 0x15; //T2为1T模式, 并启动定时器2
//AUXR |= 0x01; //选择定时器2为串口1的波特率发生器
ES = 1; //使能串口1中断
EA = 1;
}
void sendbyte(UCHAR8 PrintByte)
{
//_push_(ACC);
//ACC = PrintByte; //获取校验位P (PSW.0)
SBUF = PrintByte; //写数据到UART数据寄存器
while(!TI);
TI=0;
//_pop_(ACC);
}
#endif
没有用上最后sendbyte
大家帮我看看,好长时间没解决了
|