⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tr.c

📁 基于MSC-51 单片机的无线数据传输程序
💻 C
字号:
#include<reg51.h>
#include<absacc.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit EXF2=T2CON^6
//主程序 定义中断源,并对定时器赋初值,以及向8253寄存器写控制字
void main(void)
{
	//以下是设置中断和定时器
	EA=1;PT0=1;
	ET0=1;
	IT0=1;IT1=1;
	EX0=1;EX1=1;ET2=1;
	E2CON=0x08;
	TMOD=0x21;
	//定时器0为产生18MS的中断,定时器1为9600bit/s的波特率发生器
	TH0=0xB9;
	TL0=0xB0;
	TL1=0xFD;
	TH1=0xFD;
	SCON=0x50;
	PCON=0x80;
	
	//向8253中写入控制字,门空的方式1计数方式
	COMI=0x30;
	C0I=0;COI=0;
	COMI=0x70;
	C1I=0;C1I=0;
	COMI=0xB0;
	C2I=0;C2I=0;
	//开定时器
	TR1=1;
	TR0=1;
	TQ=1;
	sendflag=1;
	while(1){}
}

//中断0的服务子程序,单片机读入8253计数
void intsvrex0(void)interrupt0
{
	//中断0到来,单片机读入8253计数器0中的计数值
	COMI=0x00;
	L=C0I;
	h=C0I;
	BUF810=-(h*256+1);
	COMI=0x30;
	C0I=0;C0I=0;
}

//中断1的服务子程序,单片机读入8253计数器1中的技术值
void intsrex1(boid)interrupt2
{
	//中断1到来,单片机读入8253计数器1中的计数值
	COMI=0x40;
	l=C1I;
	h=C1I;
	BUF811=-(h*256+1);
	COMI=0x70;
	C1I=0;C1I=0;
}

//中断3的服务子程序,单片机读入8253计数器2中的计数值
void intsvr2(void)interrupt5
{
	//中断3到来,单片机读入8253计数器2中的计数值
	EXF2=0;
	COMI=0x80;
	l=C2I;
	h=C2I;
	BUF812=-(h*256+1);
	COMI=0xB0;
	C2I=0;C2I=0;
}
 //定时器0的中断服务程序,产生18MS的计数中断,读取姿态数据,并向串口发送姿态数据
 void intsvr1(void)interrupt1
 {
 	//读取姿态数据
 	yawh=XBYTE[0x6000];
 	yawl=XBYTE[0x1000];
 	yaw=yawh*256+yawl;
 	pitchh=XBYTE[0x2000];
 	pitchl=XBYTE[0x3000];
 	pitch=pitchh*256+pitchl;
 	rollh=XBYTE[0x4000];
 	rolll=XBYTE[0x5000];
 	roll=rollh*256+rolll;
 	
 	//重新装入定时器0的初值
 	TH0=0xB9;
 	TL0=0xB0;
 	
 	switch(sendflag)
 	{
 		//向串口发送8253的计数值
 		case1:
 			{
 				printf("$%d,%d,%d,%d*",BUF810,BUF811,BUF812);
 				sendflag=0;
 			}break;
 			
 		//向串口发送姿态反馈的数值
 		case0:
 			{
 				printf("$%d,%d,%d,%d*",yaw,pitch,roll);
 				sendflag=1;
 			}break;
 		}
 	}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -