#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
}
编程原理程序1为查询通信方式接口程序,为一典型的数据采集例程。其中bioscom()函数初始化COM1(此函数实际调用BIOS
INT
14H中断0号功能)。这样在程序中就避免了具体设置波特率因子等繁琐工作,只需直接访问发送/接收寄存器(3F8H)和线路状态寄存
发送:#include
<reg52.h>
#include<intrins.h>
#include<string.h>
#define
uchar
unsigned
char
uchar
data
i,j,p,TEST
sbit
INTT0=P3^2
uchar
code
V_35[10]={'V','o','l','t','
','3','.','5',13,10}
void
Init()
void
Delay()
void
Volt_35()
void
main()
{
Init()
while(1)
{
if(TEST)
{
Volt_35()
TEST=0
}
}
}
void
Init()
{
P0=0XFF
//I/O口初始化
P1=0xFF
P2=0XFF
P3=0xFF
SCON=0x50
//设置成串口方式1
T2CON=0x34
TH2=0xff
//晶振11.0592MHZ,波特率9600
TL2=0xdc
RCAP2H=0XFF
RCAP2L=0XdC
EA=1
EX0=1
IT0=1
TEST=0
}
void
Delay()
{
for(i=0i<100i++)
for(j=0j<100j++)
}
void
Volt_35()
{
for(p=0p<10p++)
{
SBUF=V_35[p]
while(!TI)
TI=0
}
}
void
int0svr(void)
interrupt
0
using
1
{
Delay()
if(!INTT0)
{
while(!INTT0)
TEST=1
}
}
接收:
#include
<reg52.h>
#include<intrins.h>
#include<string.h>
#define
uchar
unsigned
char
uchar
data
i
void
Init()
void
main()
{
Init()
while(1)
{
for(i=0i<10i++)
{
while(!RI)
P1=SBUF
RI=0
}
}
}
void
Init()
{
P0=0XFF
P1=0xFF
P2=0XFF
P3=0xFF
SCON=0x50
T2CON=0x34
TH2=0xff
TL2=0xdc
RCAP2H=0XFF
RCAP2L=0XdC
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)