打印

MSC1210

[复制链接]
1944|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
weicheichei|  楼主 | 2011-10-21 08:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <REG1210.H>
#include <stdio.h>
//#include "rom1210.h"
sbit LEDflag=P1^0;
sbit order_on=P1^6;
sbit p14=P1^4;
void main()
{
    P1DDRH=0xcf;     //设置I/O口的输入输出方式,外部中断2为输入
TMOD=0x2f;   //设置定时器1为工作方式2
CKCON&=0x2f;  //定时器1使用时钟频率的12分频,T1M=0;
PCON|=0x80;   //SMOD0=0串口波特率加倍
TH1=256-(((2*Fosc/32)/12)/BUAD);  //装入初值0xF4
TL1=256-(((2*Fosc/32)/12)/BUAD);
TR1=1;   //启动定时器
SCON0=0x50;  //设置串口工作在工作方式1,允许接收
EA=1;     //开总中断
ES0=1;    //开串口0中断
EX2=1;       //开外部中断2
while(1)
{
    LEDflag=1;
    switch(flag)
    {
      case 1:
   {  
        ES0=0;                                    //关闭串口中断
     EX2=0;            //关闭外部中断2
        LED1=0;                           //二极管点亮
        flag=0;
        ES0=1;            //开串口中断
     EX2=1;            //开外部中断2
   }break;
   case 2:
   {
          LED2=~LED2;
        ES0=0;                                    //关闭串口中断
     EX2=0;            //关闭外部中断2
        LED1=0;                           //二极管点亮
        flag=0;
        ES0=1;            //开串口中断
     EX2=1;            //开外部中断2
   }break;
   default:{}break;
    }
   
    if(button_flag==1)
    {
     EX2=0;         //关外部中断2
    button_flag=0;
    flag=2;
    EX2=1;      //打开外部中断2
    }
     
    if(uart0RI==1)
    {
   ES0=0;       //关串口中断
   flag=SBUF0; //接收一个字节
   SBUF0=flag; //将接收到的字节发送出去
   uart0RI=0;//将接收标志清零
   ES0=1;  //开串口中断
    }
   
}   
}
void UART0_int() interrupt 4  //串口中断函数
{
if(RI_0==1)
{
   uart0RI=1;
  RI_0=0;
}
else
{}
}
void INT2_int() interrupt 8     //外部中断2函数
{
//if(EXIF & 0x10==0x10)       //如果加上这句判断就不能进入中断,外部中断触发后EXIF的第四位为1;
// {
button_flag=1;
EXIF &=0xef;      //清除外部中断2标志位
// }
}
上面的程序有两个中断,一个串口0中断一个外部中断2,当上电以后如果不给串口发东西,也就是不触发串口中断的时候,
外部中断2可以自由的触发,当给串口发过一次东西后,就是 串口中断触发过一次后,外部中断2函数就不能再执行了。

相关帖子

沙发
weicheichei|  楼主 | 2011-10-21 09:21 | 只看该作者
:handshake

使用特权

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

本版积分规则

2

主题

50

帖子

1

粉丝