/*RS-232串口*/
#include "reg52.h"
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit s2 = P2^1;
sbit en = P2^5;
uint8 arg;
uint8 counter =0;
void init(void)
{
TMOD=0x20; //定时器1的工作方式2
TL1=0xfd; //装载计数初值
TH1=0xfd;
SCON=0x50; //采用串口工作方式1,无奇偶校验
PCON=0x00; //串口波特率不加倍
TMOD |= 0x01;//初始化定时器0
TL0 = 0X3C;
TH0 = 0X0B0;
EA = 1; //开总中断,开串口中断
ES = 1;
ET0 = 1;
TR1=1; //启动定时器1
TR0 = 1;
}
/************************单片机接收PC机发来的指令让数码管循环显示0-F******************/
receive_byte(uint8 *dat)
{
*dat = SBUF;
while (!RI);
RI = 0;
//SBUF = *dat;
//while(!TI);
//TI = 0;
}
serial_server(void) interrupt 4
{
EA = 0;
receive_byte(&arg);
P0 = arg;
EA = 1;
}
/************************单片机接每隔2s向PC机发送一串字符******************/
code unsigned char send_txt[]={"Serial Interface Test OK!/n"};
void test_serial(void)
{
int i;
EA=0;//关一下
for(i=0;i<sizeof(send_txt);i++)
{
SBUF=send_txt[i];
while(TI==0);
TI=0;
}
EA=1;//再打开
}
//中断源编号为4,即串口中断
void timer0_server(void) interrupt 1
{
EA=0;//清除中断标志,硬件置位,软件清零
RI=0;
counter++;
if(20 == counter)
{
test_serial();
counter = 0;
}
TL0 = 0X3C;
TH0 = 0X0B0;
EA=1;//开中断,等待下一次中断的到来
}
main()
{
en = 1;
s2 = 0;
init();
while(1);
}
串口通信++++多线程简单实例
最新推荐文章于 2023-05-16 23:15:29 发布