• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > 为什么我的外部中断函数不能在串口上显示,51单片机的,急急

为什么我的外部中断函数不能在串口上显示,51单片机的,急急

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了单片机串口发送函数,单片机串口接收函数,51单片机串口通信,单片机串口,单片机蓝牙串口通信等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 为什么我的外部中断函数不能在串口上显示,51单片机的,急急
描述:

#include <reg52.h>
#include<stdio.h>
#define jingzhen     11059200UL  /*使用22.1184M晶体*/  
#define botelv   9600UL      /*波特率定义为9600*/
unsigned char zifuchuan[]="abcdefg哈哈"; //待显示字符。
volatile unsigned char sending;
unsigned char i=0,print_flag=0;
unsigned int time=0;
sbit s3=P3^2;  //INT0    s3触发关
sbit s2=P3^3; //INT1  s2触发开
sbit led1=P1^0;
sbit led2=P1^1;
void waibuzhongduan_init()
{
     //P3|=0x0f;
 EA=1; //开启全局中断
 EX0=1;  //外部中断0开启
 IT0=1;  //下降沿触发
  
 EX1=1;   //外部中断1开启
 IT1=1;  //下降沿触发
}
void delay(unsigned char i)
{
unsigned char j,k;
for(j=i;j>0;j--)
for(k=90;k>0;k--);
}
void Timer0_init() //定时器初始化函数
{
    TMOD|=0x20;      //设置计数器1的工作方式2
TH1=0xfd; //设置计数器1的初值,决定波特率
TL1=0xfd; //设置计数器1的初值,决定波特率
PCON=0x00;      // 波特率倍增0x00不加倍  0x80加倍
SCON=0x50; //设置工作方式1 开启接受允许
EA=1;     //开启总中断
ES=1; //开启串口接受中断
TR1=1; //计数器1开始运行
    TMOD|=0x01;//选择T016位定时器模式
    TH0=(65536-45872)/256;
    TL0=(65536-45872)%256;//赋初值
    //EA=1;//全局中断开
    ET0=1;//T0中断开
    TR0=0;// T0计时器关
}
/*void on_off()
{
 if(s2==0)
{
delay(10);
if(!s2)
{
while(!s2);    
    TR0=~TR0;//s2为计时开关
}
}
} */
void display_str ()
{
    unsigned int  idata times[10];
   if(2==i)
   {
   //sendc(zifuchuan);
   sprintf(times,"%d",++time);
   ES=0;
   TI=1;
   printf("%s\n",times);
   while(!TI);
   TI=0;
   ES=1;
   i=0;
   }
   led2=~led2;
}
void main()
{
    waibuzhongduan_init();
Timer0_init();
while(1)
{
if(print_flag==1)
    display_str();
}
}
void timer0 ()interrupt 1 //中断函数  (50ms)
{
 TH0=(65536-45872)/256;
 TL0=(65536-45872)%256;//赋初值
  i++;
}
void ITN1 ()interrupt 2 //中断函数  开启定时器
{
   print_flag=0;
   TR0=1;
   led1=~led1;
}
void ITN0()interrupt 0 //中断函数  关闭定时器
{    
   TR0=0;
   display_str();
   delay(5);
   i=0;//置0
   time=0;
   print_flag=1;
    led1=~led1;
}


解决方案1:

void ITN0()interrupt 0 //中断函数  关闭定时器
这个函数里不要放那么多东西
  display_str();
   delay(5);
去掉


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 为什么我的外部中断函数不能在串口上显示,51单片机的,急急

相关文章

  • 2017-06-05 PID\VIDHardwareID有什么关系
  • 2017-06-05 锂电池剩余电量测量方法
  • 2017-06-05 用51串口接收陀螺仪数据包数据不完整
  • 2017-06-05 关于操作系统的分段和分页的疑问
  • 2017-06-05 在看linuxdevicedrivers2ed,看的一头雾水
  • 2017-06-05 wince221支持读取microSD卡是多少
  • 2017-06-05 如何获取并口地址
  • 2017-06-05 请问sys驱动如何安装?
  • 2017-06-05 Altiumdesigner画原理图,总线部分的NetLabel部分出现错误警告。
  • 2017-06-05 centos下wget:无法解析主机地址

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 紧急!!!USB接口/串口??
    • linuxSPI下调用write写,但用read得到的值为0问题
    • 访问一个ip过程是怎么样的?
    • 触控屏触控的点可以是无限个吗?
    • 对ARM板硬盘可擦写次数的问题
    • 刚刚毕业的大学生,对于未来的前景很迷茫,希望指点!
    • wince,引用webservice,出现服务器无法处理请求,未将对象引用设置到对象的实例。
    • 谁有NUCLEUS源代码笔记,有的话,请给我发一份!谢谢!
    • 关于RSA算法在嵌入式设备中的实现
    • 求一段简单代码:对pci卡进行操作?(如configurationregister和memoryregister)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有