单片机简单的串口通信
扫描二维码
随时随地手机看文章
1 /*-------------------------------------------
2 简单的串口通信
3 -------------------------------------------*/
4 #include
5
6 #define uint unsigned int
7 #define uchar unsigned char
8
9
10 uchar flag,a,i; //标志接收串口中断标志,接收SBUF内容
11 uchar code table[]="I get ";
12 /*--------------------------------------------
13 延时函数
14 ---------------------------------------------*/
15 void delay_ms(uint z)
16 {
17 uint y;
18 while(z--)
19 for(y=110;y>0;y--);
20 }
21 /*--------------------------------------------
22 USAR初始函数
23 ---------------------------------------------*/
24 void USRT_init()
25 {
26 TMOD=0x20; //设置T1定时器工作方式2
27 TH1=0xfd; //T1定时器装初值
28 TL1=0xfd;
29 TR1=1; //启动T1定时器
30 REN=1; //允许串口中断接收
31 SM0=0; //设定串口工作方式
32 SM1=1;
33 EA=1; //开总中断
34 ES=1; //开串口中断
35 }
36 /*--------------------------------------------
37 串口中断程序
38 ---------------------------------------------*/
39 void ser()interrupt 4
40 {
41 RI=0;
42 a=SBUF;
43 flag=1;
44 }
45 /*--------------------------------------------
46 主函数
47 ---------------------------------------------*/
48 void main()
49 {
50 USRT_init();
51 while(1)
52 {
53 if(flag==1) //检测到串口中断。表示有数据传过来了
54 {
55 ES=0; //关闭串口中断,接下来要发送数据,如果不关闭每次发送之后串口中断都会执行又进入if(flag==1)那里,然后死循环
56 for(i=0;i<6;i++) //将table[]中的前6个发送出去
57 {
58 SBUF=table[i];
59 while(!TI); //每次等待发送完毕,再执行下一条
60 TI=0; //手动清0
61 }
62 SBUF=a; //将收到的数据发送出去
63 while(!TI);
64 TI=0;
65 ES=1;
66 flag=0;
67 }
68 }
69 }