打印
[STC单片机]

STC15W4 系列单片机 串口3和串口4

[复制链接]
1819|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yy184911008|  楼主 | 2016-4-8 08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在想用STC15W4K系列单片机的串口3和串口4通讯,串口2和串口1通讯没问题,但是串口3和串口4不能收发数据

这是串口3的程序  能给我说说是不是还有什么配置没有写出来或者没写对啊

#include "STC15.h"
#define uchar unsigned char
#define uint unsigned int
#define FOSC 11059200
#define BAUD 9600

#define S3RI 0x01
#define S3TI 0x02

#define TM (65536-(FOSC/4/BAUD))
uchar flag,num;
void INIT(void)
{
        //TMOD=0x10;
        P_SW2&=0x00;
        S3CON=0x10;       
        T2L=TM;
        T2H=TM>>8;
        AUXR=0x14;
        IE2=0x08;
        EA=1;
}

void main(void)
{
                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;
                INIT();
        while(1)
        {
                if(flag==1)
                {
                        flag=0;
                        IE2=0x00;
                        S3BUF=num;
                        while((S3CON&S3TI)==0);
                        S3CON&=~S3TI;
                        IE2=0x08;
                }
        }
}

void UART() interrupt 14
{
        if((S3CON & S3RI) != 0x00)
                S3CON&=~S3RI;
                num=S3BUF;
                flag=1;       
}

相关帖子

沙发
ningling_21| | 2016-4-8 10:58 | 只看该作者
有没有试过官方例程

使用特权

评论回复
板凳
coody| | 2016-4-8 12:43 | 只看该作者
STC官方实验箱4的例程里有4个串口同时中断方式收发的例程。
http://www.****ducst/STC-Study/S ... -SCH-C-ASM-VER2.RAR

使用特权

评论回复
地板
JYL007| | 2017-11-10 17:46 | 只看该作者
你程序里中断序号错了,应该是17

使用特权

评论回复
5
JYL007| | 2017-11-10 17:47 | 只看该作者
我的程序只能发不能收,不知道哪位大侠能给看看。
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 ϵÁÐ ¶¨Ê±Æ÷3ÓÃ×÷´®¿Ú3µÄ²¨ÌØÂÊ·¢ÉúÆ÷¾ÙÀý------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966-------------------------*/

/* Èç¹ûÒªÔÚ³ÌÐòÖÐʹÓô˴úÂë,ÇëÔÚ³ÌÐòÖÐ×¢Ã÷ʹÓÃÁËSTCµÄ×ÊÁϼ°³ÌÐò        */
/* Èç¹ûÒªÔÚÎÄÕÂÖÐÓ¦Óô˴úÂë,ÇëÔÚÎÄÕÂÖÐ×¢Ã÷ʹÓÃÁËSTCµÄ×ÊÁϼ°³ÌÐò        */
/*---------------------------------------------------------------------*/

//±¾Ê¾ÀýÔÚKeil¿ª·¢»·¾³ÏÂÇëÑ¡ÔñIntelµÄ8058оƬÐͺŽøÐбàÒë
//ÈôÎÞÌرð˵Ã÷,¹¤×÷ƵÂÊÒ»°ãΪ11.0592MHz


#include "reg51.h"
#include "intrins.h"
sbit LED=P1^1;
typedef unsigned char BYTE;
typedef unsigned int WORD;

#define FOSC 11059200L          //ϵͳƵÂÊ
#define BAUD 9600             //´®¿Ú²¨ÌØÂÊ

#define NONE_PARITY     0       //ÎÞУÑé
#define ODD_PARITY      1       //ÆæУÑé
#define EVEN_PARITY     2       //żУÑé
#define MARK_PARITY     3       //±ê¼ÇУÑé
#define SPACE_PARITY    4       //¿Õ°×УÑé

#define PARITYBIT NONE_PARITY   //¶¨ÒåУÑéλ

sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr P6M1 = 0xCB;
sfr P6M0 = 0xCC;
sfr P7M1 = 0xE1;
sfr P7M0 = 0xE2;

sfr S3CON = 0xac;               //UART3 ¿ØÖƼĴæÆ÷
sfr S3BUF = 0xad;               //UART3 Êý¾Ý¼Ä´æÆ÷

sfr IE2     = 0xAF;             //ÖжÏʹÄܼĴæÆ÷2
sfr T4T3M   = 0xD1;             //¶¨Ê±Æ÷3ºÍ¶¨Ê±Æ÷4¿ØÖƼĴæÆ÷
sfr T4H     = 0xD2;             //¶¨Ê±Æ÷4¸ß8λ
sfr T4L     = 0xD3;             //¶¨Ê±Æ÷4µÍ8λ
sfr T3H     = 0xD4;             //¶¨Ê±Æ÷3¸ß8λ
sfr T3L     = 0xD5;             //¶¨Ê±Æ÷3µÍ8λ

#define S3RI  0x01              //S3CON.0
#define S3TI  0x02              //S3CON.1
#define S3RB8 0x04              //S3CON.2
#define S3TB8 0x08              //S3CON.3

sfr P_SW2   = 0xBA;             //ÍâÉ蹦ÄÜÇл»¼Ä´æÆ÷2
#define S3_S0 0x02              //P_SW2.1

bit busy;

void SendData(BYTE dat);
void SendString(char *s);

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;

    P_SW2 &= ~S3_S0;            //S3_S0=0 (P0.0/RxD3, P0.1/TxD3)
//  P_SW2 |= S3_S0;             //S3_S0=1 (P5.0/RxD3_2, P5.1/TxD3_2)

#if (PARITYBIT == NONE_PARITY)
    S3CON = 0x50;               //8λ¿É±ä²¨ÌØÂÊ
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
    S3CON = 0xda;               //9λ¿É±ä²¨ÌØÂÊ,УÑéλ³õʼΪ1
#elif (PARITYBIT == SPACE_PARITY)
    S3CON = 0xd2;               //9λ¿É±ä²¨ÌØÂÊ,УÑéλ³õʼΪ0
#endif

    T3L = (65536 - (FOSC/4/BAUD));   //ÉèÖò¨ÌØÂÊÖØ×°Öµ
    T3H = (65536 - (FOSC/4/BAUD))>>8;
    T4T3M |= 0x02;              //¶¨Ê±Æ÷3Ϊ1Tģʽ
    T4T3M |= 0x08;              //¶¨Ê±Æ÷3¿ªÊ¼¼Æʱ
    IE2 = 0x08;                 //ʹÄÜ´®¿Ú3ÖжÏ
    EA = 1;

    SendString("STC15F4K60S4\r\nUart3 Test !\r\n");
    while(1);
}

/*----------------------------
UART3 ÖжϷþÎñ³ÌÐò
-----------------------------*/
void Uart3() interrupt 17 using 0
{
    if (S3CON & S3RI)
    {
        S3CON &= ~S3RI;         //Çå³ýS3RIλ
        P0 = S3BUF;             //P0ÏÔʾ´®¿ÚÊý¾Ý
        P2 = (S3CON & S3RB8);   //P2.2ÏÔʾУÑéλ

使用特权

评论回复
6
JYL007| | 2017-11-10 18:14 | 只看该作者
可以收发了,发现是硬件的原因。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝