#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
}
ORG 0000HAJMP MAIN上电,转向主程序
ORG 0023H串行口的中断入口地址
AJMP SERVE 转向中断服务程序
ORG 0040H主程序
MAIN: MOV SP,#60H 设置堆栈指针
MOV SCON ,#50H
MOV PCON ,#00H
MOV TMOD,#20H
MOV TH1,#0F3H
MOV TL1,#0F3H
SETB TR1
MOV R0 ,#20H 置发送数据区首地址
MOV R1 ,#40H ;置接收数据区首地址
MOV R7 ,#10H ;置发送字节长度
MOV R6 ,#10H ;置接收字节长度
SETB ES允许串行口中断
SETB EACPU允许中断
MOV A ,@R0 ;取第一个数据发送
MOV SBUF ,A发送第一个数据
SJMP $ ;等待中断
SERVE: JNB RI ,SEND TI=1,为发送中断
CLR RI
MOV A ,SBUF 读出接收缓冲区内容
MOV @R1 ,A读入接收缓冲区
DJNZ R6 ,L1 判断数据块发送完否
SJMP L2数据块接收完,转L2
L1:INC R1修改数据区指针
L2:RETI中断返回
SEND:
CLR TI清除发送中断标志
DJNZ R7 ,L3 判断数据块发送完否
SJMP L4数据块接收完,转L4
L3: MOV A ,@R0取数据发送
MOV SBUF ,A发送数据
INC R0修改数据地址
L4:
RETI中断返回
END
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)