找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2735|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

串口中斷問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51482 發(fā)表于 2013-8-10 20:17 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
/************************甲機(jī)*******************************
名稱:甲機(jī)串口程序
說明:甲機(jī)向乙機(jī)發(fā)送控制命令字符,甲機(jī)同時(shí)還可以接收乙機(jī)發(fā)送
      的數(shù)字,所接收的數(shù)字顯示在數(shù)碼管上。
***********************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P1^0;
sbit LED2=P1^3;
sbit K1=P1^7;
uchar temp,num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint);
void put_to_serail(uchar c);
void init();
void keyscan();
//主程序
void main()
{
   init();
   while(1)
   {
      delay(10);
      keyscan();
      switch(temp)
      {
         case 0://put_to_serail('X');
                LED1=LED2=1;
                break;
         case 1://put_to_serail('A');
                LED1=0;LED2=1;
                break;
         case 2://put_to_serail('B');
                LED1=1;LED2=0;
                break;
         case 3://put_to_serail('C');
                LED1=0;LED2=0;
                break;
      }
   }
}
//初始化程序
void init()
{
   temp=0;
   LED1=LED2=1;
   P0=0x00;
   SCON=0x50;
   TMOD=0x02;
   PCON=0x00;
   TH1=0xfd;
   TL1=0xfd;
   TI=RI=0;
   TR1=1;
   EA=1;
   ES=1;
}
//延時(shí)程序
void delay(uint z)
{
   uint x,y;
   for(x=z;x>0;x--)
      for(y=110;y>0;y--);
}
//鍵盤掃描程序
void keyscan()
{
   if(K1==0)
   {
      delay(10);
      if(K1==0)
      {
         temp++;
         if(temp==4)
            temp=0;
      }
      while(!K1);
   }
   if(K1==0)
   {
      put_to_serail('X');
   }
   if(K1==1)
   {
      put_to_serail('A');
   }
   if(K1==2)
   {
      put_to_serail('B');
   }
   if(K1==3)
   {
      put_to_serail('C');
   }
}
//串口發(fā)送程序
void put_to_serail(uchar c)
{
   SBUF=c;
   while(TI==0);
   TI=0;
}
//串口接收程序
void Serial_INIT() interrupt 4
{
   if(RI)
   {
      RI=0;
      if(SBUF>=0&&SBUF<=9)
         P0=table[SBUF];
      else
         P0=0x00;
   }
}
   



/*********************************乙機(jī)*********************************
名稱:乙機(jī)程序接收甲機(jī)發(fā)送的字符并完成相應(yīng)動(dòng)作
說明:乙機(jī)接收到甲機(jī)發(fā)送的信號(hào)后,根據(jù)相應(yīng)信號(hào)控制完成不同的LED點(diǎn)亮動(dòng)作
**********************************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P1^0;
sbit LED2=P1^3;
sbit K2=P1^7;
uchar num;
void delay(uint);
void init();
void keyscan();
//主程序
void main()
{
   init();
   while(1)
   {
      delay(100);
      keyscan();
      
   }
   
}
//初始化程序
void init()
{
   num=0;
   SCON=0x50;
   TMOD=0x20;
   PCON=0x00;
   TH1=0xfd;
   TL1=0xfd;
   TI=RI=0;
   TR1=1;
   EA=1;
   ES=1;
}
//延時(shí)子程序
void delay(uint z)
{
   uint x,y;
   for(x=z;x>0;x--)
      for(y=110;y>0;y--);
}
//按鍵掃描程序
void keyscan()
{
   if(K2==0)
   {
      delay(5);
      if(K2==0)
      {
         SBUF=num;
         num++;
         if(num==10)
            num=0;
         while(TI==0);
         TI=0;
      }
   }
}
//乙機(jī)串口中斷程序
void serial_0() interrupt 4
{
   if(RI==1)
   {
      RI=0;
      switch(SBUF)
      {
         case  'X':LED1=1;LED2=1;break;
         case  'A':LED1=0;LED2=1;break;
         case  'B':LED1=1;LED2=0;break;
         case  'C':LED1=0;LED2=0;break;
      }
   }
}

為什么甲機(jī)發(fā)送的字節(jié)乙機(jī)收不到,乙機(jī)發(fā)送的甲機(jī)也沒收到。

1.jpg (241.36 KB, 下載次數(shù): 141)

1.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:7485 發(fā)表于 2013-8-11 06:51 | 只看該作者
甲機(jī)或乙機(jī)任何一個(gè)有不正常的地方,都會(huì)使通訊失敗。

這里面牽涉的方面很多,兩個(gè)單片機(jī)都要能正常工作,這是最起碼的。串口部分的硬件連接、波特率設(shè)置、程序等等等等。。。。。
回復(fù)

使用道具 舉報(bào)

板凳
ID:52928 發(fā)表于 2013-8-11 10:42 | 只看該作者
兩個(gè)單片機(jī)要共地
回復(fù)

使用道具 舉報(bào)

地板
ID:52999 發(fā)表于 2013-8-14 13:10 | 只看該作者
你proteus仿真中,雙機(jī)并沒有連通吧!串口那線被你忽略了
回復(fù)

使用道具 舉報(bào)

5#
ID:52999 發(fā)表于 2013-8-14 13:13 | 只看該作者
其實(shí),不用MAX232和串口,,直接甲機(jī)的TXD連到乙機(jī)的RXD,乙機(jī)的TXD連到甲機(jī)的RXD就可以通信了,實(shí)際電路這樣也可以實(shí)現(xiàn)的
回復(fù)

使用道具 舉報(bào)

6#
ID:76287 發(fā)表于 2015-4-10 09:11 | 只看該作者
雖然不懂,但還是要頂,畢竟每一位老手都是從新手蛻變而來的,贊一個(gè)。。。。。。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表