1. bread88lifa利发国际娱乐论坛/
  2. 嵌入式论坛/
    1. 电子论坛综合区
    2. 嵌入式论坛
    3. 电源技术论坛
    4. 硬件设计论坛
    5. 测试测量论坛
    6. 检测技术与质量
    7. EDA设计论坛
    8. 综合技术与应用
    9. 开源硬件
    10. IC设计论坛
    11. 消费电子论坛
    12. 无线通信论坛
    13. 个人版区
    14. 厂商专区
    15. 论坛服务区
    16. 高校联盟
    17. 供求信息发布
  3. 单片机/MCU论坛
    1. ARM技术论坛
    2. Android论坛
    3. Linux论坛
    4. FPGA|CPLD|ASIC论坛
    5. DSP论坛
    6. 嵌入式系统论坛
  4. / 关于stc89c52主函数的问题
    关闭提示

[问答] 关于stc89c52主函数的问题

[复制链接]
实习生
发表于 2018-1-11 18:15:03   240 查看 10 回复 只看该作者 倒序浏览
分享
void
main( void )
{        
        unsigned char i;
        for( i=0;i<10;i++ )
        {
                TI = 1;
        }
        while( 1 );
}
TI = 1,进入串口中断,发送数据。
循环十次把一个十个数据的数组给发送出去。
下载后发现串口一直再发数据,每进入中断我都TI=0,按道理应该只是输出十个数据就停留在while(1)这里。
请问谁有遇到过这个问题并解决,指教一下

标签:51单片机 stc89c52
举报
高级工程师
发表于 2018-1-11 18:43:35  
并不一定是主函数的问题,应该要同时看与串口有关的所有函数
回复 点赞 举报
实习生
发表于 2018-1-11 19:57:35  
谢谢
回复 点赞 举报
实习生
发表于 2018-1-11 19:57:55  
谢谢
回复 点赞 举报
助理工程师
发表于 2018-1-11 20:44:03  
#include<reg52.h>
void main()
{        
        unsigned char code table[]={
        0x00,0x01,0x02,0x03,
        0x04,0x05,0x06,0x07,
        0x08,0x09};
        unsigned char i;
        TMOD=0x20;
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        for( i=0;i<10;i++ )
        {
                SBUF=table[i];
                while(!TI);
                TI=0;
        }
        while(1);
}
回复 点赞 举报
高级工程师
发表于 2018-1-11 21:13:31  
沙发说的对,还要看其它函数具体分析才行。
回复 点赞 举报
助理工程师
发表于 2018-1-11 21:45:44  
谢谢大神回复
回复 点赞 举报
实习生
发表于 2018-1-12 11:26:11    楼主|
人中狼 发表于 2018-1-11 18:43
并不一定是主函数的问题,应该要同时看与串口有关的所有函数

unsigned char date[] = {0,1,2,3,4,5,6,7,8,9}; 这是要发送出去的数组
这是串口设置函数,用的是stc89c52,用定时器2做波特率发生器
void
UART_Config( unsigned int baud )
{
        SCON = 0x50;                                 //工作方式1;串行接收使能。
        T2CON = 0x34;                                //波特率发生器接收和发送相同波特率,同时开启定时器2
        switch( baud )
        {
                case 1200:RCAP2H=0xFE;RCAP2L=0xC8;break;
                case 2400:RCAP2H=0xFF;RCAP2L=0x64;break;
                case 9600:RCAP2H=0xFF;RCAP2L=0xD9;break;
        }
        ES = 1;
}
这是串口中断函数,在中断中发送数据
void
Interrupt_UART( void ) interrupt 4  
{
        static unsigned char i;
        if( RI )
        {
                RI = 0;                         //若打开串口中断,则必须把RI进行软件清0,否则会一直响应中断
        }
        if( TI )
        {
                TI = 0;                                //同理RI
                SBUF = date;
                i++;
        }
}

麻烦帮我看看,谢谢
回复 点赞 举报
技术员
发表于 2018-1-12 12:27:27  
先找个能用的串口程序编译了,下载看看结果,弄懂了再改一改;你这里问题很多,首先在main函数中没对串口和定时器进行初始化,其次TI是发送完成中断,进入TI中断后,将TI清零,然后再发送一个字符,TI又变成1了,这就是程序会一直发送的原因。为什么你没配置串口,竟然可以发送、进入串口中断,我不懂
回复 点赞 举报
实习生
发表于 2018-1-12 17:51:16    楼主|
勇哥-lzu 发表于 2018-1-12 12:27
先找个能用的串口程序编译了,下载看看结果,弄懂了再改一改;你这里问题很多,首先在main函数中没对串口和定时器进行初始化,其次TI是发送完成中断,进入TI中断后,将TI清零,然后再发送一个字符,TI又变成1了,这就是程序会一直发送的原因。为什么你没配置串口,竟然可以发送、进入串口中断,我不懂 ...

谢谢,我知道为什么会连续发送了,我没贴其他代码是怕大家觉得太长懒得看所以没贴出了
回复 点赞 举报
工程师
发表于 6 天前  
串行口中断要软件清零 不清零不可以
回复 点赞 举报
高级模式
您需要登录后才可以回帖 登录 | 注册
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表
  1. time最新主题
  2. recommend推荐主题
  3. hot热门主题
  4. post 我的帖子
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

工程师创意

工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

FPGA|CPLD|ASIC论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

参考设计中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

招聘┃求职发布区

电子展览展会专区

88lifa利发国际娱乐

百度360搜索搜狗搜索