程序1为查询通信方式接口程序,为一典型的数据采集例程。其中bioscom()函数初始化COM1(此函数实际调用BIOS
INT
14H中断0号功能)。这样在程序中就避免了具体设置波特率因子等繁琐工作,只需直接访问发送/接收寄存器(3F8H)和线路状态寄存
#include <REG52.H>#define uchar unsigned char
#define uint unsigned int
sbit ring=P3^7
sbit CASE1=P2^0
sbit CASE2=P2^1
sbit CASE3=P2^2
sbit CASE4=P2^3
uchar se=0,re=0
uchar temp=0
void wait(uint cnt)
{
while(--cnt)
}
//串口发送程序
void send(uchar se)
{
SBUF=se //发送数据
while(TI == 0)
TI = 0
}
//串口接收程序
uchar receive(void)
{
re=SBUF //接收数据
while(RI==0)
RI=0
return re
}
//串口初始化
void sinti(void)
{
SCON = 0x50
TMOD |= 0x20
TH1 = 0xFD
TR1 = 1
EA= 1
ES= 1
}
void delay(int cnt)
{
while(--cnt)
}
//主程序
int main (void)
{
int i
sinti() //串口初始化程序
ring=1
while(1)
{
while (1)
{
if(CASE1==0)
{
send('a')
ring=0
break
}
if(CASE2==0)
{
send('b')
ring=0
break
}
if(CASE3==0)
{
send('c')
ring=0
break
}
if(CASE4==0)
{
send('d')
ring=0
break
}
}
if(ring==0)
{
wait(60000)
ring=1
}
for(i=0i<10000i++)
}
}
//串口中断程序
void UART_SER (void) interrupt 4 //串行中断服务程序
{
if(RI)//判断是接收中断产生
{
RI=0 //标志位清零
temp=SBUF
}
if(TI)//如果是发送标志位,清零
TI=0
}
voidSend_Byte(uchar
i)
{
WDI
=
~WDI
TI
=
0
SBUF
=
i
while(TI==0)
WDI
=
~WDI
TI
=
0
}
void
Send_String(uchar
*string)
{
while(*string!=0)
{
Send_Byte(*string)
string
++
}
}
void
Com_A_Int()
interrupt
4
{
uchar
idata
status
status
=
SBUF
RI
=
0
if
(status
==
0x02)
Send_String("HELLO")
if
(status
==
0x55)
Send_String("THIS
IS
A
WELL
BEGIN!")
}
这是串口中断程序,其他的你可以自己根据实际情况编写
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)