找回密码
 注册
关于网站域名变更的通知
查看: 473|回复: 8
打印 上一主题 下一主题

stc15单片机的串口2中断问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-11-28 09:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
目标:通过串口助手发送数据后,单片机回传+1。0 d. `) ]' F4 Y3 P4 b9 q- s" T$ b
现象:没有进入中断服务函数" V* j2 d' [/ G$ d) I
void Uart_Init(void)0 T7 w1 M" t% _9 y! q! }2 ^% b
{
) ?4 W0 t; k  J$ r9 ~: n% z        P_SW1 &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=0 (P3.0/RxD2, P3.1/TxD2)
) w6 r& }! _! {        P_SW2 &= ~S2_S0;         //S2_S0=0 (P1.0/RxD2, P1.1/TxD2)
1 y  b9 T6 Q( o! X; J8 f- o        //串口1配置
* c4 o2 N2 r3 V$ y        PCON &= 0x3f;               //串口1波特率不倍频- V% i* \! m3 ^+ D3 D
        SCON = 0x50;                                        //8位数据,可变波特率3 v) s! l! |; j! g" g7 J; U
        AUXR |= 0x01;                           //选择定时器2为串口1的波特率发生器3 l4 @$ u7 ?8 D  p' k- Y$ X
        
: n7 _: x2 _" [9 V; {& u        //串口2配置               
* L! Z9 Y0 s+ h5 u        S2CON = 0x50;      //8位数据,可变波特率,串口2只能选择定时器2作为波特率发生器
8 A4 S% F+ _, f        $ a( r- f) B2 h( n
        AUXR |= 0x04;                                //T2为1T模式' [/ L% m+ j7 k5 v% k3 g6 K4 W
        T2L = (65536 - (FOSC/4/BAUD));   //设置波特率重装值
0 i* @; G5 t3 U5 K2 w  }/ |; G        T2H = (65536 - (FOSC/4/BAUD))>>8;2 Y8 ~, x2 }2 E. m' |  P; \
        AUXR |= 0x10;         //启动定时器2
% a9 {, E$ S1 h9 D/ ~        
/ j% p0 P8 I6 O        ES = 1;             //允许串口1中断) A: k9 ?  K: d, t' b- ?
        IE2 |= 0x01;   //允许串口2中断      * V. f- C; [9 W

# ]+ g' w& J0 o% Z+ E}5 }: R" Z, E0 K" a/ {/ T2 P; a
void Uart2() interrupt 8  using 1
{
        if (S2CON & S2RI)  //接收标志
        {
                S2CON &= ~S2RI;  //清除S2RI位  
                recvdata = S2BUF;
                if(recvdata == 0x0A)
                {
                        Uart2_SendData(0x0A+1);
                }
                if(recvdata == 0x0C)
                {
                        Uart2_SendData(0x0C+1);
                }
        }
        if (S2CON & S2ti)  //发送标志
        {
                S2CON &= ~S2TI;         //清除S2TI位
                B_TX2_Busy = 0;
        }
}
void Uart2_SendData(u8 dat)% Z' `! W7 d; t
{# \: C, ?! D" m7 {3 ], r& K9 _. r8 A
        S2BUF = dat;                  //写数据到数据寄存器) C. K& L8 N! J! Q. F- H1 L
        while(!(S2CON&S2TI));      //停止位没有发送时,S2TI为0,一直等待
2 @- b1 I- ?$ r6 o2 k# n* A        S2CON &= ~S2TI;       //清除S2TI
. Z3 L% ~, M0 \3 o4 U) |
$ J  v9 v: J: e, g" i/ T1 K3 o}
. Z! o0 g1 ?  N! |/ ]' C3 a
头像被屏蔽
  • TA的每日心情
    奋斗
    2022-11-8 15:10
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    推荐
    发表于 2022-11-28 10:32 | 只看该作者
    提示: 作者被禁止或删除 内容自动屏蔽

    该用户从未签到

    3#
    发表于 2022-11-28 13:28 | 只看该作者
    建议找个标准的例程先不用自己编的。

    点评

    是按照例程修改的,发送正常,不过没有进入接收中断。  详情 回复 发表于 2022-11-28 13:44

    该用户从未签到

    4#
    发表于 2022-11-28 13:36 | 只看该作者
    有没有设置接收允许。

    点评

    设置了的,没有忘。  详情 回复 发表于 2022-11-28 13:45

    该用户从未签到

    5#
     楼主| 发表于 2022-11-28 13:44 | 只看该作者
    RGB_lamp 发表于 2022-11-28 13:28
    ' ?0 @. X8 R# L3 U& {建议找个标准的例程先不用自己编的。
    ( x1 y9 V6 ?2 K6 h
    是按照例程修改的,发送正常,不过没有进入接收中断。
    " @: t0 H! S+ z0 i( [( @& B) R( B# I

    该用户从未签到

    6#
     楼主| 发表于 2022-11-28 13:45 | 只看该作者
    名字好听吗 发表于 2022-11-28 13:36
      f5 f) K" P* d有没有设置接收允许。
    / A. u+ B  Z1 o! q
    设置了的,没有忘。
    ( D# d+ D+ N" _5 Q, D( t

    点评

    把串口发送返回数据放在主程序里,串口中断只设置接收到数据标志和保存接收到的数据。  详情 回复 发表于 2022-11-28 13:59

    该用户从未签到

    7#
    发表于 2022-11-28 13:59 | 只看该作者
    Ele_insect 发表于 2022-11-28 13:452 A4 b# N8 j' M( C! i7 \2 t$ Z% I
    设置了的,没有忘。
    7 B* o' l/ K" |1 Z6 {
    把串口发送返回数据放在主程序里,串口中断只设置接收到数据标志和保存接收到的数据。
    " B, J( `# j0 `/ x

    该用户从未签到

    8#
    发表于 2022-11-28 14:05 | 只看该作者
    AUXR寄存器中设置定时器1是否分频,会影响到串口2,有遇到这个问题的吗。

    该用户从未签到

    9#
    发表于 2022-11-28 14:16 | 只看该作者
    定时器1初始化中的AUXR |= (1<<6)导致的,不设置定时器1的工作模式,串口2可以正常使用;设置了定时器1的工作模式后,串口2的中断服务函数进不去了。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-29 06:21 , Processed in 0.140625 second(s), 29 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表