/***********************************************************************
要求:? ? ? ? 首先由单片机发送"please input numner: ",在通过串口助手发送4
然后单片机接收后灯亮四秒;
***********************************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define??uint unsigned int
sbit??LED=P0^0;
void??Com_Init(void);
void? ?transmit(void);
void? ? receive_then_ring(void);
uchar idata trdate[]= "please input numner: " ;
uchar??IntCount=0;? ? ? ? ? ? ? ? // 宣告IntCount变数,计算T0中断次数
uchar seconds=0;
main()
{
? ? ? ? Com_Init();
? ? while(1) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???
? ? ? ? {
? ? ? ? ? ? ? ? while(1)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???//发送
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ???transmit();
? ? ? ? ? ? ? ???break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? while(1)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //接收
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ?? ?receive_then_ring();
? ? ? ? ? ? ? ?? ?ET0=1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???? ? ? ? //开T0中断
? ? ? ? ? ? ? ?? ?break;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ???}
? ? ? ? ? ? ? ? while(1)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //响铃
? ? ? ? ? ? ? ?? ? {? ? ? ?
? ? ? ? ? ? ? ?? ?? ?? ?TR1 = 0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???//关闭TIMER1
? ? ? ? ? ? ? ?? ? ? ? ? ?? ???TR0= 1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???//启动TIMER0 ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? while(1);
? ? ? ? ? ? ? ?? ? }? ? ? ?
? ? ? ? }
}
void timer0(void) interrupt 1? ? ? ? // T0中断子程序开始
{? ? ? ? ? ? ? ?
? ? TH0=(65536-50000)/256;? ? ? ?
? ? ? ? TL0 =(65536-50000)%256;? ? ? ? ? ? ? ? ? ? ? ? // 设置T0计数量高8位元、低8位元
? ? ? ?? ?IntCount++;? ? ? ?
? ? ? ? if (IntCount==20)? ? ? ? ? ? ? ? ? ? ? ? // 若T0已中断20次数,即一秒
? ? ? ? {? ? ? ? IntCount=0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 重新计次
? ? ? ? ? ? ? ? seconds++; ? ? ? ?
? ? ? ???if (seconds==5)
? ? ? ???{? ? ? ???LED=1;
? ? ? ? ? ? ? ???TR0= 0;? ? ? ?
? ? ? ?? ?}
? ? ? ? }
}
void??Com_InitT1(void)
{
? ? ? ???EA=1;? ? ? ? ? ? ? ? ? ? ? ?? ? //开总中断EA=1
? ? ? ???ES=1;? ?? ?? ?? ?? ? //串行口中断? ? ? ???
? ? ? ???ET1=1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???//开T1中断
? ???TMOD = 0x21;? ? ? ? ? ? ? ? ? ? ? ? //将定时器1设置为Mode2以产生波特率;TO=mode1
? ???PCON = 0x00;? ? ? ? ? ? ? ? ? ? ? ???//SMOD为0
? ???SCON = 0xd8;? ? ? ? ? ? ? ? ? ? ? ?? ?//串行口设置为方式3
? ? ? ???TH0=(65536-50000)/256;? ? ? ?
? ? ? ???TL0=(65536-50000)%256;
? ???TH1 = 0xFd;? ? ? ? ? ? ? ? ? ? ? ???//波特率9600
? ???TL1 = 0xFd;
? ???TR1 = 1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???//启动TIMER1
}
void??transmit(void)
{? ? ? ?? ?uchar *p;
? ? ? ?? ?p=trdate;
??while((*p)!='\0')? ? ? ?
? ? ? ? ? ? ? ???{
? ? ? ? ? ? ? ? ? ? ? ???SBUF=*p;
? ? ? ? ? ? ? ? ? ? ? ???while(TI==0);? ? ? ? ? ? ? ? ? ? ? ? //为发送完,等待
? ? ? ? ? ? ? ? ? ? ? ???TI=0;
? ? ? ? ? ? ? ? ? ? ? ???_nop_();
? ? ? ? ? ? ? ? ? ? ? ???++p;
? ? ? ? ? ? ? ???}
}
void? ?receive_then_ring(void)
{
? ? ? ?? ? uchar a;
? ? ? ?? ? while(RI==0);
? ? ? ?? ? RI=0;
? ? ? ?? ? a= SBUF;? ?? ? /*接收到的字节,立即发送出去*/
? ? ? ?? ???_nop_();
? ? ? ?? ? SBUF=a;
? ? ? ?? ? while(TI==0);
? ? ? ?? ? TI=0;
? ? ? ?? ? LED=0;
}
为什么定时器,串口收发都没反应?程序没错的呀~~请高手指教
代码.zip (24.56 KB)